简体   繁体   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

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

from datetime import datetime从日期时间导入日期时间

class MACross(bt.Strategy): 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>]]

Assuming the code is all correct (not in the format posted)假设代码都是正确的(不是发布的格式)

To check if the value has changed use:要检查值是否已更改,请使用:

print('Starting Portfolio Value: %.2f' % cerebro.broker.getvalue())
cerebro.run()
print('Final Portfolio Value: %.2f' % cerebro.broker.getvalue())

If this doesnt change have a look at the original example posted thats如果这没有改变,请查看发布的原始示例
also a crossover strategy and see where it differs.也是一个交叉策略,看看它有什么不同。
Extract:提炼:

    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/ https://www.backtrader.com/docu/quickstart/quickstart/

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

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