簡體   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