0

进口 backtrader 作为 bt 进口 backtrader.feeds 作为 btfeed 进口 backtrader.analyzers 作为 btanalyzers 进口 talib 作为 ta 进口 numpy 作为 np 进口 pandas 作为 pd

从日期时间导入日期时间

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>]]
4

1 回答 1

0

假设代码都是正确的(不是发布的格式)

要检查值是否已更改,请使用:

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/

于 2020-12-30T12:06:01.297 回答