[英]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.