Posts made by Mike Van
-
RE: My code may be in a endless loop, what happened?
@backtrader ohoh I get it. My English understanding is really poor. Thanks for your patience.
-
RE: My code may be in a endless loop, what happened?
@backtrader
I just define self.ATR as a list to store ATRs of different stocks.
What the better method should I use to store different stocks' indicators? -
RE: My code may be in a endless loop, what happened?
@ab_trader Thanks a lot. Let me try again.
-
RE: My code may be in a endless loop, what happened?
@backtrader
I have many stocks, so I just want to store ATRs by a list.
My aim is:self.ATR[0] = datas[0]'s ATR self.ATR[1] = datas[1]'s ATR ......
Now I use bt.indicators.ATR can achieve this goal:
self.ATR = list(range(len(self.datas))) for index, stock_data in enumerate(self.datas): self.ATR[index] = bt.indicators.ATR(self.datas[index], period=20)
But I still want to know why Ta-lib doesn't work. What is wrong with me?
-
RE: Multi Example
Thanks for this valuable example, and why not put it in the document?
-
A small error in the document
In the section Bracket Orders, there is a small error in my view in the subsection Manual Issuing of a Bracket
mainside = self.buy(price=13.50, exectype=bt.Order.Limit, transmit=False) lowside = self.sell(price=13.00, size=mainsize.size, exectype=bt.Order.Stop, transmit=False, parent=mainside) highside = self.sell(price=14.00, size=mainsize.size, exectype=bt.Order.Limit, transmit=True, parent=mainside)
size=mainsize.size should be size=mainside.size
-
My code may be in a endless loop, what happened?
This is my code on strategy
class Turtle(bt.Strategy): def __init__(self): self.ATR = list(range(len(self.datas))) for i in range(len(self.datas)): self.ATR[i] = bt.talib.ATR([self.datas[i].high, self.datas[i].low, self.datas[i].close], timeperiod=20) # P227 self.sys = None self.lasttrade = None
I used many datafeeds. When I use this code, the program never runs out.
When I commented out this code as followself.ATR = list(range(len(self.datas))) for i in range(len(self.datas)): self.ATR[i] = bt.talib.ATR([self.datas[i].high, self.datas[i].low, self.datas[i].close], timeperiod=20) # P227
Everything will be OK. What happened?
I hope someone can help me. -
It's a silly question, but it really confuses me. Please help me.
The code in Quickstart really confuses me.
The code is as followsclass TestStrategy(bt.Strategy):
def log(self, txt, dt=None): ''' Logging function fot this strategy''' dt = dt or self.datas[0].datetime.date(0) print('%s, %s' % (dt.isoformat(), txt)) def __init__(self): # Keep a reference to the "close" line in the data[0] dataseries self.dataclose = self.datas[0].close # To keep track of pending orders self.order = None def notify_order(self, order): if order.status in [order.Submitted, order.Accepted]: # Buy/Sell order submitted/accepted to/by broker - Nothing to do return # Check if an order has been completed # Attention: broker could reject order if not enough cash if order.status in [order.Completed]: if order.isbuy(): self.log('BUY EXECUTED, %.2f' % order.executed.price) elif order.issell(): self.log('SELL EXECUTED, %.2f' % order.executed.price) self.bar_executed = len(self) elif order.status in [order.Canceled, order.Margin, order.Rejected]: self.log('Order Canceled/Margin/Rejected') # Write down: no pending order self.order = None def next(self): # Simply log the closing price of the series from the reference self.log('Close, %.2f' % self.dataclose[0]) # Check if an order is pending ... if yes, we cannot send a 2nd one if self.order: return # Check if we are in the market if not self.position: # Not yet ... we MIGHT BUY if ... if self.dataclose[0] < self.dataclose[-1]: # current close less than previous close if self.dataclose[-1] < self.dataclose[-2]: # previous close less than the previous close # BUY, BUY, BUY!!! (with default parameters) self.log('BUY CREATE, %.2f' % self.dataclose[0]) # Keep track of the created order to avoid a 2nd order self.order = self.buy() else: # Already in the market ... we might sell if len(self) >= (self.bar_executed + 5): # SELL, SELL, SELL!!! (with all possible default parameters) self.log('SELL CREATE, %.2f' % self.dataclose[0]) # Keep track of the created order to avoid a 2nd order self.order = self.sell()
Two questions:
- what does len(self) mean and why it can be executed?
- why we can call the function notify_order()? I read the bt.Strategy but found the answer.
-
RE: Some questions about dividend and answer authority
@backtrader Thanks for your helping. "Answer authority" is the adjusted price by the dividends. And I just don't know how to speak it in English.
And if I feeds two data, I have to align them in advance according to datetime right? Is there such a solution in backtrader? -
Some questions about dividend and answer authority
I'm learning about backtrader and I think it's an amazing framework.
But I have some questions about dividend and answer authority.- In my view, the price of answer authority is more useful for most indicators, but the raw stock price may be closer to the reality for cash management. If the order signals are generated by answer authority data and order price use the raw price, can I use only two datafeeds?
- Is there a method to add dividends directly to cash?