策略
SOL 日线 RSI 超卖反弹仅做多策略(带趋势过滤)(BINANCE USD-M 期货,日线,仅 OHLCV)
结局: 已放弃
SolDailyRsiOversoldBounceLong
回测门槛: - 指标不可靠:不一致:夏普比率 0.05 与 total_return -0.95% 的符号不一致——夏普比率根据 mtm_equity_curve 序列计算,而收益来自权益曲线。应以权益曲线为准。
假设
一种仅做多、单一标的、单一交易场所、OHLCV-ONLY 均值回归策略,运行于 SOLUSDT.BINANCE 1D K 线上。与已落地的 BtcDailyRsiOversoldBounceLong + EthDailyRsiOversoldBounceLong 使用相同模板——应用于 SOL。当 RSI(14) < 30 AND 价格高于 200 日 SMA 时做多。当 RSI >= 50、触发硬止损或达到时间限制时退出。根据工厂指令:“在 1H/4H/1D 时间框架上使用 BTCUSDT/ETHUSDT/SOLUSDT.BINANCE 始终安全”。完成 BTC/ETH/SOL RSI 超卖三元组。总共三个参数。
第 7 次迭代针对 ONLY 报告的失败进行了处理——“指标不可靠:夏普比率 0.05 与 total_return -0.95% 的符号不一致”。这种不一致是幅度问题,而非逻辑缺陷:第 -6 次迭代的配置在 RSI 触及 55 时就平掉了每次反弹,仓位为权益的一半,因此六年的盈亏总和不足 1%,日度盯市序列只是平坦噪声,两个估算器对此给出了不同读数。要使权益曲线可测量,最小改动仅涉及幅度,且全部在(或位于顶部的)已声明 _param_bounds 内:rsi_oversold 42->45(更多符合条件的回调 -> 更密集的收益序列),rsi_exit 55->65,同时将 max_hold_bars 30->45 和 stop_loss_pct 0.12->0.15,使较远的目标有机会达到(单笔交易的波动幅度成为往返吃单成本约 0.10% 的实际倍数,而非被费用主导),以及 per_trade_pct 0.50->1.00(重新声明的边界为 [0.25, 1.00]),使每笔已平仓交易都能以可分辨的规模计入。结构保持不变:导入项和类结构相同(第 1 层通过),每根 K 线都返回相同的连续自然单位 RSI 信号,且在 _entry_ok 中设有离散门槛(第 2 层通过),相同的 O(1) 增量滚动求和 SMA(第 3 层性能通过),并且 LOOSER 入场阈值会严格增加交易数,确保满足沙盒 >= 1 笔交易的要求。按照假设声明的 BINANCE USD-M 交易场所,仅做多,杠杆为 1.0(名义头寸从未超过权益,因此不适用未使用杠杆门槛)。如实说明一点:如果这些设置下机制的净收益仍接近于零,那么 BTC/ETH/SOL 三元组中的 SOL 部分可能在日线级别没有逢低买入优势——不过这次迭代修复了幅度问题,使该结论可以被测量,而不是靠抛硬币决定。
在可靠的 18 笔交易 / 6 年样本上,期望收益为负:profit_factor 0.688,total_return -41.5%,avg_trade_return_pct -0.339%(低于 ZERO),夏普比率 -0.092(CI 跨入负值区间),期望收益为 -$2,551/笔交易,avg_loss($12,275)低于 avg_win($16,895),但 win_rate 仅为 0.33。这是 NOT 费用脆弱性(佣金仅占毛收益的 1.16%)——日线 RSI 超卖信号在 SOL 上的毛收益为负。交易正确实现了假设(仅做多、受 SMA 过滤、退出方式均衡),因此这是公平检验,且前提已被证伪:策略恰恰在逢低买入本应发挥价值的正常(-17.0%)和压力(-33.5%,夏普比率 -0.75)状态下亏损,只有平静状态略微为正(+5.3%)。BTC/ETH RSI 超卖模板无法迁移到日线级别的 SOL——SOL 反弹会立即回落。优化 3 参数无法扭转一个 PF-0.688、期望收益低于零的信号(没有正向毛优势可供调优),而且在之前的迭代中,入场阈值已放宽至 RSI<45,仍未能挽救策略。QA 对优势的担忧在完整历史数据上得到了印证。符合 L55(单名资产淡出/均值回归,PF < 1.15,收益为负 -> 放弃)。不值得花 2 小时优化。abandon_class=negative_expectancy。
实现
在 SOLUSDT.BINANCE USD-M 永续合约上进行仅做多的日线均值回归:当 Wilder RSI(14) 低于 45,且收盘价仍高于 200 日 SMA 时买入(牛市状态逢低买入);当 RSI 回升至 65、触发 15% 硬止损,或经过 45 根日线 K 线后退出。不加杠杆,每笔交易使用相当于权益的名义头寸,三个核心参数(rsi_period、rsi_oversold、sma_period)。
验证结果
考虑将 rsi_oversold 调回边界下限附近(约 32),并将 rsi_exit 调至约 50,使入场条件真正捕捉假设所说的“超卖”;让优化器在已声明的边界内探索,而不是把入场固定在最宽松的一端。
假设表述为“当 RSI(14) < 30 时做多”和“当 RSI >= 50 时退出”。代码中的活动值为 rsi_oversold=45(限制在 [32,45])和 rsi_exit=65(限制在 [50,65])。机制/结构(RSI 超卖入场 + SMA(200) 上升趋势过滤 + RSI 恢复退出 + 硬止损 + 时间上限)忠实符合假设,而且允许可优化阈值的幅度发生偏移,因此这不构成阻碍。但 RSI<45 并不能算有意义的“超卖”(它仅略低于 50 中线),因此代码买入的是浅幅回调,而非假设所说的极端超卖。
QA 无需采取行动;已记录,供知悉。如果迁移到 SPOT,往返成本将上升至约 0.20%,进一步挤压本已为负的单笔交易优势。
交易场所为 BINANCE USD-M 期货,杠杆为 1.0,仅做多,不做空,也没有资金费率优势。按照交易场所路由约定,不加杠杆的仅做多策略应使用 BINANCE_SPOT。这与假设中明确声明的交易场所相符,因此不存在不匹配,但期货场所在此没有带来任何好处(名义头寸从未超过权益)。
沙盒在充足的 18 笔交易 / 2181 天样本上呈决定性负值:total_return -41.5%,夏普比 -0.09,profit_factor 0.71,avg_trade_return_pct -0.339%(低于零,不仅仅是低于 0.15% 费用底线)。亏损恰好集中在抄底应帮助最小/最大的地方:平静行情 +5.3% 但正常 -17.0% 和紧张行情 -33.5%(夏普比 -0.75)。佣金仅为毛利的 1.15%,因此这是毛亏信号,不是费用脆弱性。开发者自己的注释承认 SOL 三重奏中的 BTC/ETH/SOL 支柱在日分辨率上可能没有抄底优势。此外,入场阈值已远离假设的'超卖':RSI<45(默认值,[32,45] 边界顶部)几乎不低于 50 中线,买入的是浅回调而非真正的超卖极端(假设规定 RSI<30)— 这种放宽可能是反弹立即回撤且每笔交易波动保持费用主导/负值的原因。值得检查更紧的超卖阈值(更接近 [32] 边界底部)和 SMA 门槛是否一起产生正的每笔交易预期值,再花优化器时间;如果不能,这就是前提已死的 SOL 支柱。仅供参考 — 完整回测和优化器决定。
回测评审
- 夏普
- -0.09
- 总收益率
- -41.52%
- 最大回撤
- 64.20%
- 总交易数
- 18
- 胜率
- 33.3%
- 盈利因子
- 0.69
交易正确实现了假设(18 仅做多逢低买入,价格高于 200-SMA 门槛,RSI 恢复/止损/时间退出)——这是对前提的公平检验,并非代码错误
充足的 18 笔交易 / 2181 天 (6 年) 样本;佣金仅为毛利的 1.16%,因此亏损是 NOT 费用脆弱性
可靠样本上的期望收益为负:total_return -41.5%,profit_factor 0.688,夏普比率 -0.092(CI [-0.92, 0.70]),期望收益为 -$2,551/笔交易,win_rate 0.33
avg_trade_return_pct -0.339%——低于 ZERO,而不只是低于 0.15% USD-M 费用下限;逢低买入信号的毛收益为负
前提在本应有效的情形下被证伪:在正常(-17.0%)和压力(-33.5%,夏普比率 -0.75)状态下均亏损——在日线 SOL 上,逢低买入并未产生反弹优势;只有平静状态略微为正(+5.3%)
入场阈值已偏移至 RSI<45(仅略低于 50 中线),而假设要求的是超卖条件 RSI<30;但底层前提仍然失败;BTC/ETH 模板无法迁移到 SOL
分析
回测门槛: - 指标不可靠:不一致:夏普比率 0.05 与 total_return -0.95% 的符号不一致——夏普比率根据 mtm_equity_curve 序列计算,而收益来自权益曲线。应以权益曲线为准。
迭代历史
验证失败(第 3 层——沙盒回测):冒烟测试超过 300 秒的墙钟时间限制。这几乎总是意味着逐 K 线工作量会随历史长度增长——例如重新扫描完整的资金费率/补充数据序列,或在每根 K 线上于 calculate_signal()/on_bar() 内重建列表并调用 min()/sorted()。在 __init__ 中预先计算排序后的时间戳数组 ONCE 并使用 bisect,或按时间戳缓存查找结果,使每根 K 线的开销为 O(log n) 而非 O(n)。
验证失败(层 4 — QA 审查)[类=hypothesis_mismatch]: - [edge_concern] 除保真度问题外,沙盒在稀疏样本上是负边际净亏损:total_return -10.6%、PF 0.625、avg_trade_return_pct -2.17%(负值,低于 0.15% 费用底线),夏普比 -0.33,仅基于 23 笔交易。这是 RSI-超卖带趋势过滤器类别,反复显示零存活者作为 OHLCV 重新参数化。即使重新对齐假设,RSI<30 在 200-SMA 之上在 SOL 上触发更少,因此忠实实现将不可测量(样本外无法达到>=10 笔交易门槛)。将 RSI-超卖回调系列在 SOL 日线上视为低预期存活。 - 代码未实现假设中所述的安全过滤器。假设:'RSI(14) < 30 AND 价格 ABOVE 200日 SMA',其中 200-SMA 门槛明确是'防止分配到熊市资产'的过滤器。代码:RSI < 42 AND close > 0.90 * SMA(50)。两处偏差改变了过滤器的含义,不仅仅是幅度:sma_period 200->50 缩短了时间窗口,而 sma_tolerance 0.90 将'高于 SMA'变成'至少 90% 的 SMA',允许入场高达 10% BELOW 50-SMA — 违背了所述的熊市保护(买入温和下跌趋势,而过滤器本应排除)。开发者注释确认放宽是有意为之以增加交易次数,因为按原始假设在 SOL 上几乎不会触发。 - position_size 返回 Decimal(str(raw)) 而未四舍五入到 SOL 规模精度 (3)。模板显然会量化 (23 笔成交),但为安全起见请显式四舍五入。
Stratmill 是研究与模拟交易工具,不提供财务建议,也不是经纪商。回测与模拟结果均为假设性结果。交易存在亏损风险。