pandas_ta 用于 backtesting.py 使用 bbands 返回 Null

问题描述 投票:0回答:1

我正在尝试使用 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)

现阶段我不确定需要做什么来解决这个问题。 谢谢你

python trading back-testing pandas-ta
1个回答
0
投票

根据发布的源代码,如果

None
升高,则该值可能为
np.asarray(bbands)

© www.soinside.com 2019 - 2024. All rights reserved.