首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >运行Cerebro后,我在backtrader中的投资组合价值没有发生任何变化,我如何检查它是否正常工作

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

Stack Overflow用户
提问于 2020-12-26 20:20:05
回答 1查看 336关注 0票数 0

导入backtrader作为bt导入backtrader.feeds作为btfeed导入backtrader.analyzers作为btanalyzer导入talib作为ta导入numpy作为np导入pandas作为pd

从datetime导入datetime

MACross类(bt.Strategy):

代码语言:javascript
复制
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>]]
EN

回答 1

Stack Overflow用户

发布于 2020-12-30 20:06:01

假设代码都是正确的(不是以张贴的格式)

要检查该值是否已更改,请使用以下命令:

代码语言:javascript
复制
print('Starting Portfolio Value: %.2f' % cerebro.broker.getvalue())
cerebro.run()
print('Final Portfolio Value: %.2f' % cerebro.broker.getvalue())

如果这一点没有改变,请看一下最初发布的示例

还有一个交叉策略,看看它的不同之处。

摘录:

代码语言:javascript
复制
    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/

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65456312

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档