Latest 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.