Backtesting.py Backtest 中的真相模糊性错误

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

我正在尝试使用 Backtesting.py 回测动量策略。我已经使用 pandas_ta 收集了数据并计算了指标值。我已经定义了空头和多头交易条件。现在我只需要 Backtesting.py 来运行回测,以便我可以确定我的策略在历史数据上的表现。

此笔记本包含所有代码以及我遇到的错误:

https://github.com/kbs-code/algo_trader/blob/master/backtests/backtestingdotpy_broad_market_ema_vortex.ipynb

最新的错误是这个:

ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

我用谷歌搜索了这种类型的错误,并尝试使用括号、按位(与)和逻辑(与)来解决它。我不认为我的真相陈述在 Python 中是非法的,但我可能是错的。 我还阅读了 Backtesting.py 的文档,以尽可能地了解该框架。

如有任何帮助,我们将不胜感激。

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

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
© www.soinside.com 2019 - 2024. All rights reserved.