python backtesting.py的pandas_ta使用bbands返回Null

nfzehxib  于 2023-09-29  发布在  Python
关注(0)|答案(1)|浏览(116)

我试图使用backtesting.py和pandas_ta进行回测,以获得一个简单的布林带策略。当我初始化策略时,我得到一个空的形状。请注意,我不关心下一部分ATM

import pandas as pd
import numpy as np
import pandas_ta as ta
from backtesting import Backtest, Strategy
from backtesting.test import GOOG
import matplotlib.pyplot as plt

class BBandsStrat(Strategy):
    time_period = 20
    dev = 2

    def init(self): 
        print(self.data.Close) 
        self.bbands = self.I(ta.bbands, self.data.Close, length=self.time_period, std=self.dev,append=False)

    def next(self):
        lower_band = self.bbands['BBL_20_2.0']
        upper_band = self.bbands['BBU_20_2.0']

        if self.position:
            if self.data.Close[-1] > upper_band[-1]:
                self.position.close()
        else:
            print(self.data.Close[-1], lower_band[-1])
            if self.data.Close[-1] < lower_band[-1]:
                self.buy()
cash = 10_000
bt = Backtest(GOOG, BBandsStrat, cash=cash)
stats = bt.run()

当我运行它时,我得到以下错误:

ValueError: Indicators must return (optionally a tuple of) numpy.arrays of same length as `data` (data shape: (2148,); indicator "bbands(C,20,2,False)"shape: , returned value: None)

我已经确认了init函数中的self.data.close返回值,并确认在运行时得到输出:
bbands = ta.bbands(GOOG.Close, length=20, std=2, append=False)
在这个阶段,我不确定我需要做什么来解决这个问题。谢谢你

zzwlnbp8

zzwlnbp81#

在发布的源代码中,如果np.asarray(bbands)提升,则值可能是None

相关问题