繁体   English   中英

运行 Cerebro 后,我在 backtrader 中的投资组合价值没有发生任何变化,我如何检查它是否正常工作

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

https://www.backtrader.com/docu/quickstart/quickstart/

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM