我正在尝试使用 Backtesting.py 回测动量策略。我已经使用 pandas_ta 收集了数据并计算了指标值。我已经定义了空头和多头交易条件。现在我只需要 Backtesting.py 来运行回测,以便我可以确定我的策略在历史数据上的表现。
此笔记本包含所有代码以及我遇到的错误:
最新的错误是这个:
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
我用谷歌搜索了这种类型的错误,并尝试使用括号、按位(与)和逻辑(与)来解决它。我不认为我的真相陈述在 Python 中是非法的,但我可能是错的。 我还阅读了 Backtesting.py 的文档,以尽可能地了解该框架。
如有任何帮助,我们将不胜感激。
self.close
和self.ema
都是DataFrame
系列。比较两个系列(例如 self.close > self.ema
)会产生布尔系列:
a = pd.Series([1, 2, 3, 4])
b = pd.Series([3, 1, 4, 2])
print(a > b) # Outputs pd.Series([False, True, False, True])
在 if 语句中使用布尔系列(例如
if a > b:
)是不明确的,因为 Pandas 不知道你的意思:如果所有项都为 True,则该表达式的计算结果是否应该为 true?如果至少一项为 True,则其评估结果应为 true?
因此,您需要将其与
.any()
或 .all()
一起使用:
if (a > b).all():
pass