我试图使用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)
在这个阶段,我不确定我需要做什么来解决这个问题。谢谢你
1条答案
按热度按时间zzwlnbp81#
在发布的源代码中,如果
np.asarray(bbands)
提升,则值可能是None
。