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
相关产品推荐
相关产品推荐

