You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Breakout Trading Strategy代码运行报错及逻辑排查求助

突破交易策略代码错误排查方案

1. RuntimeWarning与除零错误

  • 这类错误基本是计算指标时碰了除数为0的情况,比如算Sortino Ratio的下行波动率时,如果所有收益都是非负的,下行偏差会变成0,直接触发除零警告。
  • 排查&修复:
    • 检查收益率计算代码,比如returns = df['close'].pct_change(),如果存在连续相同价格会产生0收益,但重点看下行偏差的计算逻辑——是不是过滤掉非负收益后,剩下的样本为空,导致标准差为0?
    • 给除法加保护,比如用numpy的条件判断避免除以0:sortino = np.mean(returns) / np.where(down_std == 0, np.nan, down_std)

2. Sortino Ratio为nan、Profit Factor为inf

  • Sortino为nan:要么是平均收益为nan,要么是下行波动率为0/nan。如果策略根本没触发任何交易,收益序列全是0,下行波动率就会是0,直接出nan。
  • Profit Factor为inf:这个值是总盈利除以总亏损,如果总亏损为0(比如策略只赚不亏,或者压根没亏过),就会出现inf。
  • 排查&修复:
    • 直接输出returns序列、盈利/亏损交易的统计值,确认是不是没亏损交易,或者收益全为0。
    • 检查信号触发逻辑:upper_breakout和lower_breakout真的触发交易了吗?比如突破条件是不是设得太严,导致全程没有开平仓动作?

3. 绘图阶段KeyError(-14)

  • 这个错误是绘图代码在访问不存在的索引(比如-14),大概率是回溯计算指标时窗口参数超过了数据起始长度,或者绘图时硬写了固定索引但数据长度不够。
  • 排查&修复:
    • 检查绘图时的索引访问,比如是不是写了df.iloc[-14]但数据总行数还不到14?
    • 确认计算上下轨的周期参数(比如20日突破),是不是数据开头的前N行因为窗口不够生成了nan,导致绘图时索引错位?

通用排查技巧

  • 加print语句:在信号触发、指标计算、交易执行的关键节点打印变量值,比如每次upper_breakout触发时,打印当前价格、上下轨数值,确认逻辑和预期一致。
  • 缩量测试:先用200行以内的小数据集跑代码,逐行检查指标和信号生成情况,缩小问题范围。
  • 处理空值:所有指标计算后,用df.dropna()或者df.fillna(method='ffill')清理nan值,避免后续运算出错。

内容的提问来源于stack exchange,提问作者driver

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 21:45:22