[英]After running Cerebro nothing is happening to my portfolio value in backtrader, how do i check if it is working or not
进口 backtrader 作为 bt 进口 backtrader.feeds 作为 btfeed 进口 backtrader.analyzers 作为 btanalyzers 进口 talib 作为 ta 进口 numpy 作为 np 进口 pandas 作为 pd
从日期时间导入日期时间
class MACross(bt.Strategy):
def __init__(self):
ma_fast = bt.ind.SMA(period = 10)
ma_slow = bt.ind.SMA(period = 50)
self.crossover = bt.ind.CrossOver(ma_fast, ma_slow)
def next(self):
if not self.position:
if self.crossover >0:
self.buy()
elif self.crossover <0:
self.close()
class dataFeed(btfeed.GenericCSVData):
params = (
('dtformat', '%m/%d/%Y %H:%M'),
('datetime', 0),
('open', 1),
('high', 2),
('low', 3),
('close', 4),
('volume', 5),
('openinterest', -1)
)
cerebro = bt.Cerebro()
data = dataFeed(dataname='data.csv')
cerebro.addstrategy(MACross)
cerebro.adddata(data)
back = cerebro.run()
cerebro.broker.getvalue()
back[0].analyzers.sharpe.get_analysis()
cerebro.plot()
[[<Figure size 640x480 with 5 Axes>]]
假设代码都是正确的(不是发布的格式)
要检查值是否已更改,请使用:
print('Starting Portfolio Value: %.2f' % cerebro.broker.getvalue())
cerebro.run()
print('Final Portfolio Value: %.2f' % cerebro.broker.getvalue())
如果这没有改变,请查看发布的原始示例
也是一个交叉策略,看看它有什么不同。
提炼:
def __init__(self): #indicators created here
sma1 = bt.ind.SMA(period=self.p.pfast) # fast moving average
sma2 = bt.ind.SMA(period=self.p.pslow) # slow moving average
self.crossover = bt.ind.CrossOver(sma1, sma2) # crossover signal
#--init--
def next(self):
if not self.position: # not in the market
if self.crossover > 0: # if fast crosses slow to the upside
self.order = self.buy() #go long
elif self.crossover < 0: # in the market & cross to the downside
self.order = self.sell()
else:
if len(self) >= (self.bar_executed + 5):
self.close() # close long position
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.