把策略规则、训练流程、样本外回测和每一笔交易数据摊开,看看一个指标策略到底是怎么被验证的。[淘股吧]

为什么这篇直接分享策略、程序和数据


前面几篇更多是在讲系统思路:为什么候选股不能直接处理,为什么单一指标不能当神奇公式。这一篇开始把东西摊开,名字就叫《分享RSI策略,训练和回测》。

这套 RSI 策略不是一个孤立指标公式,而是一个执行回测框架:先由上层候选池给出每日候选,再用 RSI 执行画像决定是否成交,最后按 RSI 离场、持有期到期或止损规则退出。

本次历史回测保留了 3918 条候选记录,其中 2312 条实际成交,成交率 59.01%;成交后的胜率为 56.88%,盈利样本平均涨幅约 2.80%,亏损样本平均跌幅约 3.37%,平均持仓 3.41 个交易日。所有逐笔数据我都单独整理成数据附件。

本文只分享历史研究、训练流程和程序实现,不构成具体标的建议,也不构成账户操作指令。

策略规则:RSI不是一个阈值,而是一组执行画像

很多人讲 RSI,会直接说某个数值以下观察,某个数值以上离场。这样讲很爽,但真正做回测时很粗糙。因为不同形态的股票,适合用的 RSI 周期、等待窗口、持有天数和止损线都不一样。

这套程序把执行画像拆成启动类和埋伏类。启动类更像启动后的回踩处理,埋伏类更像提前观察后的确认处理。每个画像都有明确的 RSI 周期、入场阈值、离场阈值、最长等待 K 线、最长持有天数和止损线。

例如“启动快反三日”使用 RSI6,入场阈值 40,离场阈值 68,最多等待 3 根 5 分钟 K 线,最多持有 3 天,止损线 4.50%。这不是说这个参数未来一定有效,而是说系统必须把规则写清楚,才有资格回测

训练流程:先训练候选排序,再训练执行画像


这个版本不是把全部历史一次性跑完,然后挑一个最好看的结果。程序使用滚动样本外验证方式,把时间切成训练段和测试段。训练段用来拟合候选排序模型,也用来统计不同 RSI 执行画像在历史里的成交率、胜率、回撤和大跌样本比例。

测试段只使用训练段已经学出来的模型和执行画像评分。每天先从候选池里选前十名,再把每个候选分配到当时最合适的执行画像,然后到 5 分钟行情里模拟入场和退出。

这样做的目的,是尽量让回测更接近真实使用:今天的选择不能偷看明天的结果,测试段不能使用未来数据训练出来的画像评分。

核心程序:每一笔交易怎么模拟

我把原始入口程序放到了附件目录:article5-rsi-program/run_layer4_rsi_execution_walkforward.py。画像参数库放在 article5-rsi-program/layer4_rsi_profile_library.py。

核心逻辑可以压缩成几步:找到信号日之后的下一个交易日;在画像定义的前 N 根 5 分钟 K 线里寻找 RSI 触发;如果没有触发,就记录为未触发成交;如果触发,就记录入场价、入场 RSI,然后逐根 K 线检查止损、RSI 离场和持有期到期。

扣费口径使用往返交易成本 20.1 个基点。最终每笔都会落成一行数据,包括入场时间、离场时间、入场价、离场价、扣费后收益率、最大浮亏、最大浮盈、退出原因和分段编号。

核心代码节选:
def simulate_layer4_rsi_trade(signal_row, profile, minute_data_dir, required_periods, minute_cache,
round_trip_cost_bps, sell_cutoff_bar, target_weight=0.0, selected_rank=0):
# 1. 找到信号日之后的下一个交易日
execution_date = next_trade_date(minute_frame, signal_date)

# 2. 只在画像定义的前 N 根5分钟K线里寻找入场触发
entry_window = day_frame[day_frame[ bar_in_day ].le(profile.max_wait_bar)].copy()
entry_window = entry_window[
entry_window[ close ].gt(profile.min_price)
entry_window[f rsi{profile.rsi_period} ].le(profile.buy_threshold)
]

# 3. 成交后逐根K线检查止损、RSI离场和持有期到期
for _, row in candidate_exit.iterrows():
if row[ close ] <= entry_price * (1.0 - profile.stop_loss_pct):
exit_reason = stop_loss
break
if row[f rsi{profile.rsi_period} ] >= profile.sell_threshold:
exit_reason = rsi_take_profit
break
if holding_days >= profile.max_hold_days and row[ bar_in_day ] <= sell_cutoff_bar:
exit_reason = horizon_exit
break

net_return = exit_price / entry_price - 1.0 - round_trip_cost_bps / 10000.0
return trade_record

样本外回测:三段结果要分开看

这次样本外分成三段。第一段 2024-08-30 到 2025-03-20,共 1298 条候选、712 条成交,成交率 54.85%,成交后胜率 59.41%,阶段资金曲线约上涨 25.79%,最大回撤约 14.41%。

第二段 2025-03-21 到 2025-09-26,共 1310 条候选、766 条成交,成交率 58.47%,成交后胜率 55.61%,阶段资金曲线约上涨 6.29%,最大回撤约 17.60%。

第三段 2025-09-29 到 2026-04-20,共 1310 条候选、834 条成交,成交率 63.66%,成交后胜率 55.88%,阶段资金曲线约上涨 22.31%,但最大回撤扩大到约 40.20%。这说明系统并不是一路稳定,后续必须继续加入市场环境和极端风险过滤。

资金曲线:不能只看最终净值

完整逐日资金曲线一共 392 个样本日。最终累计净值为 1.5903,过程中最高到过 2.3811,随后经历了明显回撤。最好单日约上涨 17.65%,最差单日约下跌 5.74%。

这组数据比单独说“最终上涨”更有价值。因为它能告诉你,策略不是每天都舒服,也不是任何行情都适应。策略真正需要继续优化的地方,往往藏在回撤区间,而不是藏在最终结果里。

所以我不会把这套 RSI 策略包装成万能公式。它更像是第一代可解释执行模块,价值在于把候选、成交、退出和复盘全部打通。

退出原因:每一笔都要知道为什么离开

2312 条实际成交里,1300 条是 RSI 达到离场阈值后退出,694 条是持有期到期退出,312 条是止损退出,还有 6 条是数据结束退出。

这四类退出原因非常重要。RSI 离场说明策略抓到了一部分修复;持有期到期说明信号没有在规定时间内兑现;止损退出说明判断失败;数据结束退出则是样本边界问题。

做系统最怕只记录结果,不记录原因。没有退出原因,就不知道亏损来自入场问题、持有时间问题、止损问题,还是市场状态问题。

逐笔数据:3918条候选记录全部保留

这篇文章最重要的附件,是 article5-rsi-each-trade-data.csv。它不是汇总表,而是 3918 条逐笔候选/成交记录。每一行都有信号日期、股票代码、候选排名、执行画像、是否成交、入场时间、入场价、入场 RSI、离场时间、离场价、离场 RSI、退出原因、持有交易日、毛收益率、扣费后收益率、最大浮亏、最大浮盈和分段编号。

我还额外导出了 article5-rsi-filled-trades-only.csv,只保留 2312 条实际成交记录,方便复盘成交后的胜率、盈亏分布和退出原因。
如果读者只看文章,可以理解策略框架;如果读者看附件,就能检查每一笔历史回测记录。这比只放一张资金曲线更真实,也更容易建立信任。

盈利最多的20笔:先看哪里真正贡献弹性

只看总曲线不够,还要把贡献最大的交易拆出来。本文新增 article5-rsi-top20-profit-trades.csv,按扣费后收益率从高到低列出历史盈利最多的 20 笔。

这 20 笔不是拿来证明未来也会重复,而是用来反推系统抓到历史弹性的条件:当时是什么画像、候选排名靠不靠前、持有了几天、最大浮亏多深、最后是按 RSI 离场还是到期退出。

盈利最多的 20 笔,平均扣费后结果为 16.09%,平均最大浮盈 17.74%,平均持有 2.75 个交易日。

画像分布上,埋伏慢确认十日出现 12 次;退出原因上,指标离场 出现 18 次,说明这些样本多数不是靠长期硬扛,而是在规则内等到修复后离场。

候选排名平均为 3.90,其中第 3 段出现 13 次、强势环境出现 9 次,提示高弹性样本更集中在特定阶段和市场环境里。
盈利最多20笔精简卡片:

1. 600735 |2025-12-29|排名 1|埋伏慢确认十日
结果 41.98%,最大浮亏 -3.09%,最大浮盈 45.68%,退出:指标离场
2. 002582 |2025-04-07|排名 2|埋伏慢确认十日
结果 21.55%,最大浮亏 -2.73%,最大浮盈 26.67%,退出:到期离场
3. 301209 |2025-11-10|排名 1|埋伏慢确认十日
结果 19.85%,最大浮亏 -0.69%,最大浮盈 21.25%,退出:指标离场
4. 300290 |2025-10-29|排名 6|埋伏慢确认十日
结果 19.37%,最大浮亏 -0.22%,最大浮盈 20.46%,退出:指标离场
5. 002947 |2024-10-15|排名 3|启动深回踩五日
结果 17.72%,最大浮亏 -1.79%,最大浮盈 18.04%,退出:指标离场
6. 688622 |2025-12-05|排名 1|埋伏慢确认十日
结果 17.07%,最大浮亏 -1.63%,最大浮盈 18.10%,退出:指标离场
7. 688622|2025-12-09|排名 4|埋伏慢确认十日
结果 16.21%,最大浮亏 -0.42%,最大浮盈 17.23%,退出:指标离场
8. 688359 |2025-12-29|排名 3|埋伏慢确认十日
结果 15.83%,最大浮亏 -0.12%,最大浮盈 17.94%,退出:指标离场
9. 600745 |2025-11-06|排名 7|启动深回踩五日
结果 15.00%,最大浮亏 -2.64%,最大浮盈 15.88%,退出:指标离场
10. 000078 |2026-01-12|排名 1|埋伏慢确认十日
结果 14.83%,最大浮亏 -0.82%,最大浮盈 16.67%,退出:指标离场
11. 300175 |2025-04-08|排名 4|埋伏慢确认十日
结果 13.55%,最大浮亏 -3.03%,最大浮盈 14.45%,退出:指标离场
12. 688388 |2025-12-03|排名 4|埋伏慢确认十日
结果 13.21%,最大浮亏 -0.64%,最大浮盈 13.53%,退出:指标离场
13. 300672 |2025-04-08|排名 3|埋伏均衡五日
结果 13.03%,最大浮亏 -1.02%,最大浮盈 14.21%,退出:指标离场
14. 688776 |2025-09-26|排名 9|启动深回踩五日
结果 12.55%,最大浮亏 -3.48%,最大浮盈 12.95%,退出:指标离场
15. 688205 |2025-10-10|排名 2|埋伏慢确认十日
结果 11.91%,最大浮亏 -4.90%,最大浮盈 12.80%,退出:到期离场
16. 002861 |2026-01-26|排名 6|启动深回踩五日
结果 11.87%,最大浮亏 -1.54%,最大浮盈 14.25%,退出:指标离场
17. 688268 |2025-12-26|排名 10|启动深回踩五日
结果 11.85%,最大浮亏 -2.43%,最大浮盈 13.88%,退出:指标离场
18. 688323 |2025-04-08|排名 1|埋伏耐心十日
结果 11.80%,最大浮亏 -2.52%,最大浮盈 13.09%,退出:指标离场
19. 688110 |2025-10-22|排名 5|埋伏慢确认十日
结果 11.79%,最大浮亏 -1.70%,最大浮盈 12.40%,退出:指标离场
20. 002155 |2024-09-27|排名 5|启动深回踩五日
结果 10.94%,最大浮亏 -0.72%,最大浮盈 15.27%,退出:指标离场

最大浮亏的20笔:真正要优化的是这些交易

盈利样本能吸引人,但决定系统能不能长期迭代的,是回撤样本。本文新增 article5-rsi-top20-drawdown-trades.csv,按单笔最大浮亏从深到浅列出 20 笔压力最大的历史交易。

这里我用的是每笔交易路径里的最大浮亏,而不是最后扣费后结果。因为有些交易最后可能修复,但过程中承受过很深的回撤;这种样本对风控迭代更有价值。

为了方便阅读,正文不再把完整长原因塞进大表格,而是先做原因分组,再给 20 笔精简明细。完整逐笔原因仍保留在数据附件里,方便需要深挖时查看。

最大浮亏最多的 20 笔,平均最大浮亏为 -16.48%,平均扣费后结果为 -15.46%,平均最大浮盈 2.55%。

画像分布上,埋伏慢确认十日出现 13 次;退出原因上,止损离场 出现 20 次,说明回撤样本往往来自持有窗口内未能及时修复或触发风控。

这些样本在第 2 段出现 12 次、弱势环境出现 7 次,说明后续不能只调 RSI 阈值,还要加市场环境、流动性、异常波动和单票承压过滤。

先看原因分组:
隔日急跌:8 笔
入场后很快下探,指标还没来得及修复就触发风控。
代表样本: 300779 (2025-12-30)、 300472 (2025-03-26)、 301325 (2025-04-02)

环境拖累:8 笔
弱势或震荡环境里,低位指标更容易变成弱势延续。
代表样本: 688631 (2025-03-28)、 600302 (2025-03-31)、 000404 (2025-03-31)

持有承压:2 笔
持有窗口内没有兑现修复,浮亏随着时间扩大。
代表样本: 603516 (2026-02-27)、603516(2026-02-26)

数据异常:1 笔
离场价或行情口径异常,先核查数据,再决定是否纳入策略评价。
代表样本: 688646 (2025-04-28)

反抽不足:1 笔
入场后几乎没有有效反抽,说明买点缺少承接。
代表样本:603516(2026-03-02)

再看20笔精简卡片:
1. 688646|2025-04-28|排名 6|埋伏慢确认十日
结果 -100.20%,最大浮亏 -100.00%,最大浮盈 1.77%,退出:止损离场,原因:数据异常,离场价为零,优先核查行情、停牌或复权口径。
2. 300779|2025-12-30|排名 2|埋伏慢确认十日
结果 -22.34%,最大浮亏 -22.90%,最大浮盈 1.98%,退出:止损离场,原因:隔日急跌,入场后隔日快速下探,修复时间不足。
3. 300472|2025-03-26|排名 7|埋伏慢确认十日
结果 -20.09%,最大浮亏 -19.89%,最大浮盈 2.29%,退出:止损离场,原因:隔日急跌,入场后隔日快速下探,修复时间不足。
4. 301325|2025-04-02|排名 4|埋伏慢确认十日
结果 -12.64%,最大浮亏 -14.93%,最大浮盈 0.90%,退出:止损离场,原因:隔日急跌,入场后隔日快速下探,修复时间不足。
5. 688631|2025-03-28|排名 3|埋伏慢确认十日
结果 -11.60%,最大浮亏 -12.95%,最大浮盈 1.71%,退出:止损离场,原因:环境拖累,弱势环境下低位指标容易继续走弱。
6. 300061 |2025-04-03|排名 7|埋伏耐心十日
结果 -8.46%,最大浮亏 -12.25%,最大浮盈 2.54%,退出:止损离场,原因:隔日急跌,入场后隔日快速下探,修复时间不足。
7. 600302|2025-03-31|排名 4|埋伏慢确认十日
结果 -12.12%,最大浮亏 -11.92%,最大浮盈 5.77%,退出:止损离场,原因:环境拖累,弱势环境下低位指标容易继续走弱。
8. 605255 |2026-03-02|排名 1|埋伏慢确认十日
结果 -11.09%,最大浮亏 -11.71%,最大浮盈 2.84%,退出:止损离场,原因:隔日急跌,入场后隔日快速下探,修复时间不足。
9. 000404|2025-03-31|排名 10|启动深回踩五日
结果 -10.19%,最大浮亏 -11.67%,最大浮盈 1.30%,退出:止损离场,原因:环境拖累,弱势环境下低位指标容易继续走弱。
10. 603429 |2026-03-02|排名 5|埋伏耐心十日
结果 -9.92%,最大浮亏 -11.57%,最大浮盈 3.48%,退出:止损离场,原因:隔日急跌,入场后隔日快速下探,修复时间不足。
11. 000550 |2025-04-02|排名 9|启动深回踩五日
结果 -9.24%,最大浮亏 -11.44%,最大浮盈 0.89%,退出:止损离场,原因:隔日急跌,入场后隔日快速下探,修复时间不足。
12. 603516|2026-03-02|排名 4|埋伏慢确认十日
结果 -11.42%,最大浮亏 -11.22%,最大浮盈 1.20%,退出:止损离场,原因:反抽不足,入场后反抽不足,最大浮盈很小。
13. 603516|2026-02-27|排名 2|埋伏慢确认十日
结果 -11.31%,最大浮亏 -11.11%,最大浮盈 4.23%,退出:止损离场,原因:持有承压,持有期内反弹没有兑现,路径压力扩大。
14. 603667 |2025-04-02|排名 8|埋伏慢确认十日
结果 -11.18%,最大浮亏 -10.98%,最大浮盈 0.21%,退出:止损离场,原因:隔日急跌,入场后隔日快速下探,修复时间不足。
15. 603221 |2025-01-02|排名 1|埋伏耐心十日
结果 -7.19%,最大浮亏 -9.70%,最大浮盈 3.38%,退出:止损离场,原因:环境拖累,震荡环境下低位指标容易继续走弱。
16. 603516|2026-02-26|排名 2|埋伏慢确认十日
结果 -9.67%,最大浮亏 -9.46%,最大浮盈 6.16%,退出:止损离场,原因:持有承压,持有期内反弹没有兑现,路径压力扩大。
17. 002771 |2024-11-14|排名 7|埋伏慢确认十日
结果 -9.36%,最大浮亏 -9.16%,最大浮盈 2.71%,退出:止损离场,原因:环境拖累,震荡环境下低位指标容易继续走弱。
18. 301288 |2025-04-23|排名 2|埋伏耐心十日
结果 -8.11%,最大浮亏 -9.13%,最大浮盈 1.51%,退出:止损离场,原因:环境拖累,弱势环境下低位指标容易继续走弱。
19. 688136 |2025-09-03|排名 1|埋伏慢确认十日
结果 -6.79%,最大浮亏 -8.84%,最大浮盈 3.95%,退出:止损离场,原因:环境拖累,震荡环境下低位指标容易继续走弱。
20. 000759 |2025-04-03|排名 1|埋伏耐心十日
结果 -6.21%,最大浮亏 -8.81%,最大浮盈 2.14%,退出:止损离场,原因:环境拖累,弱势环境下低位指标容易继续走弱。

附件说明
完整逐笔交易数据文件:article5-rsi-each-trade-data.csv,共 3918 条候选/成交记录。
仅成交交易数据文件:article5-rsi-filled-trades-only.csv,共 2312 条实际成交记录。
盈利最多20笔文件:article5-rsi-top20-profit-trades.csv。
最大浮亏20笔文件:article5-rsi-top20-drawdown-trades.csv。
程序附件目录:article5-rsi-program,包含原始训练回测入口、RSI画像参数库和运行说明。