Backtesting.py 回测统计仅显示 nans 和 0

Backtesting.py backtest statistics only shows nans and 0

提问人:kbs 提问时间:11/13/2023 最后编辑:kbs 更新时间:11/16/2023 访问量:106

问:

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

我期待统计数据向我显示值而不是 0。bt.run()nan

我正在使用这个笔记本:https://github.com/kbs-code/algo_trader/blob/master/backtests/backtestingdotpy_SPY_weekly_vortex.ipynb

编辑:此笔记本的名称现在已 https://github.com/kbs-code/algo_trader/blob/master/backtests/debugging_example_backtestingdotpy.ipynb

谢谢

Python 算法交易 回测

评论

0赞 kbs 11/13/2023
我稍微修改了我的代码,以使用涡旋值作为策略的唯一条件。我做了一个 for 循环来遍历数据帧并验证是否生成了正确的买入和卖出信号。该问题似乎源于与数据帧 backtesting.py 交互。
0赞 kbs 11/15/2023
我修改了交易逻辑,使其仅使用涡旋指标。如果我与回溯测试器一起实施买入持有策略,则按预期进行一笔交易。如果我实现一个简单的涡旋交叉,回溯测试器不会进行任何交易。self.close
0赞 karlphillip 11/17/2023
您至少应该做的是处理 NaN 条目:从数据中替换或删除它们。

答:

0赞 Daan 11/15/2023 #1

在您的策略中,如果满足基于涡流的条件,您似乎会下达买入订单。但是,您永远不会平仓(使用 )。如果您不平仓,您的交易将永远不会结束,这不会为第二次交易腾出空间。self.position.close()

要解决这个问题,您需要实施退出策略或使用止盈(以及可选的止损)。

希望这会有所帮助。

评论

0赞 kbs 11/15/2023
你的前提不正确;在错误示例中从未下过买入订单,backtesting.py 不需要 .在我的示例中,我能够在没有的情况下进行 1 笔交易,因为当回测结束时,该头寸会自动平仓。self.close()BuyAndHoldself.close()
1赞 kbs 11/16/2023 #2

回溯测试器必须使用“self.data.foo”而不是“self.foo”才能使用任何列中的值。请参阅更新的笔记本和故障排除证明。