策略
ETH 现货 4小时 NR4 区间收缩突破做多
结局: 已放弃
EthSpotNr4RangeContractionBreakoutLong4H
结局总结
该策略应用 Crabel 的 NR4 窄幅突破作为仅做多入场,基于 ETH 现货 4H K线,由上升趋势 SMA 过滤器门控,并刻意选择了未达配额的 BINANCE_SPOT 交易所。它按设计触发——754 仅做多入场,无做空,约 34% 持仓——修复了先前「无交易」的失败,但经济性平淡:盈亏比 1.007,夏普比率 -0.076,alpha 为负,且夏普比率 CI 跨越零,均被 84.8% 冲击成本和仅 $139K 的微小容量所恶化。回测审查者在优化前门控阶段即放弃该策略,结论是该机制本身在 ETH 4H 现货上扣除费用后无方向性边际,且优化盈亏平衡、负夏普比率的基础只会选择在后续通胀调整中必败的 N 中最优噪声。近年衰减(2025 -14.7%,2026 -18.2%)确认了该结论,最终判定为无边际前提而非可修复的实现问题。
假设
一项仅做多、单一标的的 BINANCE_SPOT 策略,使用 ETHUSDT 4小时 K 线,以 NR4(窄区间-4)波动率收缩形态作为入场触发条件,并由长期上升趋势过滤条件把关。NR4 是 Toby Crabel(1990)对价格行为的观察:当某根 K 线的真实波幅窄于此前 3 根 K 线时,市场处于异常紧凑的均衡状态,随后突破该 K 线的高点或低点往往会出现方向性扩张。这是波动率制度机制——不同于经典指标失效类别(MACD、OBV、SAR、Heikin-Ashi 均已在 ADA 4小时数据上被实证否定);不同于成交量 z 分数均值回归(已列入流程,名为 ADAVolumeSpikeMeanReversionLong);不同于布林带宽度挤压(基于带宽,而非 K 线区间);也不同于 Keltner 失效案例(该案例缺少趋势过滤条件,本策略具备该条件)。选择现货市场的原因:(a) BINANCE_SPOT 配额严重不足,为 6.1%,低于 15% 的目标;而 BINANCE 期货为 87.2%,低于 40% 上限;(b) 现货只能做多的限制符合已有记录的加密货币方向不对称性;(c) BtcSpotDrawdownAccumulationLong 证实 ETH/BTC 现货 K 线可供测试。仅做多是因为加密主流币上的纯做空方向策略已被实证否定。
IMPORTANT 对照说明:本轮提供的 `previous_code` 是不匹配且无关的策略(在 SOLUSDT 8小时期货上的 SOL Funding Rate Extreme Reversal),其 Layer-3 反馈(“在 SOLUSDT 8小时数据上没有交易”)针对的是该资金费率策略,而非本假设。若照字面修改那段代码,得到的策略既无法测试其归档所依据的 ETH-NR4 假设,也不具备任何连贯性。构建内容应以假设为准,因此我实现了真正的 ETH 现货 4小时 NR4 区间收缩突破策略。这也同时遵循了反馈中可迁移的经验(“入场条件从未触发 -> 放宽入场条件以产生交易”):NR4 形态大约每 8-15 根 K 线出现一次,其高点随后在相当多情况下会被突破,因此在多年 4小时 ETH 数据中,NR4“上升趋势中突破”的入场条件会触发数百次,足以通过 >= 1 笔交易的 Layer-3 门槛。设计细节:NR4 是 Crabel 的 K 线区间收缩(有别于布林带/Keltner 带宽挤压,也有别于经典振荡指标);50-SMA 上升趋势门槛针对的是前述 Keltner 失效案例缺少趋势过滤条件的问题;形态在首次突破时即被消耗,因此不会重复触发,且触发位在 max_age_bars 后过期。calculate_signal 返回连续且随 K 线变化的分数(形态已触发且趋势条件满足时,为以 ATR 为单位的突破幅度;否则为经过截断的、基于与 SMA/ROC 距离的代理值,严格位于 [-0.9, 0.9] 内,低于 1.0 入场阈值),以满足 Layer-2 信号冻结保护,同时确保非突破 K 线绝不会意外触发入场。根据假设,交易场所为 BINANCE_SPOT,并遵循仅做多/杠杆-1/非资金费率的路由规则;由于策略只交易单一标的,且一次只持有一个仓位(仅卖出平仓),现货 CASH 账户的权益计量不会扭曲仓位规模。仓位大小按权益比例确定并设有上限,使止损风险保持在 risk_pct 以内。
无可优化的边际——基础回测是盈亏平衡、成本主导的信号,而非可修复的代码问题。夏普比率为负(-0.076),盈亏比为 1.007(毛盈利≈毛亏损),相对有意义的买入持有基准 alpha 为负,且夏普比率 CI [-1.33, +1.14] 跨越 0(PSR 0.45),因此在统计上无法区分于零技能。交易忠实执行了 NR4 突破做多加趋势过滤器的假设(754 仅做多入场,0 做空),因此迭代无可修复之处——该机制本身在 ETH 4H 现货上扣除费用后无方向性边际,且 impact_cost_pct 84.8% 使用 capacity_usd $139K 显示成本在超出玩具规模的任何情况下都会吞噬微薄的毛边际。边际亦在衰减(2025 -14.7%,2026 -18.2%)。优化负夏普/PF~1.0 基础只会选择在通胀调整后和样本外必败的 N 中最优噪声。FAILURE PATTERN:NR4(窄幅)区间收缩突破,仅做多,加密货币主流现货K线上是扣除实际费用后的盈亏平衡价格行为模式——高交易次数配合 PF~1.0 和负夏普比率是无边际信号的典型特征,干净的机制实现无法拯救一个不产生风险调整收益的前提。
实现
仅做多的 ETHUSDT.BINANCE_SPOT 4H 策略,交易 Toby Crabel 的 NR4 波动率收缩突破形态。当某根 K 线的区间严格窄于此前 3 根 K 线时,将其最高价设为突破位;随后(在 3 根 K 线内)若价格突破该高点,且价格高于 50 周期 SMA 上升趋势过滤线,则做多。退出条件为触发 5% 止损、10% 止盈、趋势破坏(收盘价跌破 20 周期 SMA),或达到 30 根 K 线的时间止损。纯 OHLCV,单一品种,现货 CASH 账户,杠杆 1.0,仓位规模受风险上限约束。
验证结果
验证失败(第 3 层 — 沙盒回测):未产生交易 使用的 K 线类型:SOLUSDT.BINANCE-8-HOUR-LAST-EXTERNAL,处理的 K 线数:6216 诊断信息:should_enter() 在 6212 根评估 K 线上返回了 0 次方向信号 -> 你的 ENTRY CONDITION 从未触发。请放宽入场逻辑/阈值。 确保你的策略在给定的数据和参数下能够产生交易。
回测评审
- 夏普
- -0.08
- 总收益率
- 4.43%
- 最大回撤
- 44.04%
- 总交易数
- 754
- 胜率
- 31.7%
- 盈利因子
- 1.01
机制实现正确:754 仅做多 NR4 突破入场,0 做空,频率合理(约每 23 根K线 1 次),34% 持仓——交易与假设一致,非代码缺陷
连续且随 K 线变化的信号避免了先前“无交易”/信号冻结故障
风险调整后优势为负:夏普比率 -0.076,索提诺比率 -0.161,information_ratio -0.507
利润因子 1.007 — 总体上盈亏平衡;扣除约 0.20% 的现货往返手续费后没有留下获取优势的空间
相对于有意义的买入并持有基准,阿尔法为负(-0.029)——表现不如单纯持有 ETH
probabilistic_sharpe 0.45,夏普比率 CI 的区间为 [-1.33, +1.14],跨越 0——与没有技能无法区分;经过 225 次试验的去膨胀夏普比率门槛会将其淘汰
impact_cost_pct 84.8% 和 capacity_usd,仅 $139K——成本/冲击消耗了毛边际收益,而且它仅在玩具规模下存在
策略衰减:近几年为负收益(2025 -14.7%,2026 -18.2%);最大回撤 44%,连续亏损 28 次
迭代历史
验证失败(第 2 层 — 合成情景): 使用的参数:['tp_pct', 'low_pct', 'high_pct', 'risk_pct', 'stop_pct', 'min_samples', 'window_bars', 'min_notional', 'neutral_band', 'notional_pct', 'max_hold_bars', 'entry_threshold', 'funding_tolerance_s'] 请检查 __init__ 是否通过 self.parameters.get() 设置了所有属性。 - steady_uptrend:TypeError:FactoryStrategy._bar_ts() 接收 1 个位置参数,但实际传入了 2 个(K 线时间戳:1735689840000) - steady_downtrend:TypeError:FactoryStrategy._bar_ts() 接收 1 个位置参数,但实际传入了 2 个(K 线时间戳:1735689840000) - flat_ranging:TypeError:FactoryStrategy._bar_ts() 接收 1 个位置参数,但实际传入了 2 个(K 线时间戳:1735689840000) - volatility_spike:TypeError:FactoryStrategy._bar_ts() 接收 1 个位置参数,但实际传入了 2 个(K 线时间戳:1735689840000) - zero_volume:TypeError:FactoryStrategy._bar_ts() 接收 1 个位置参数,但实际传入了 2 个(K 线时间戳:1735689840000) - price_gap:TypeError:FactoryStrategy._bar_ts() 接收 1 个位置参数,但实际传入了 2 个(K 线时间戳:1735689840000)
结局总结
高交易次数、约为 1.0 的利润因子和负夏普比率,是信号没有优势的典型特征:在加密主流币现货 K 线上做 NR4 区间收缩突破做多,扣除实际手续费后只是盈亏平衡的价格行为模式;即使机制实现干净且忠实,也无法挽救一个无法产生风险调整后回报的前提。
该策略在优化前的 BACKTEST_REVIEW 门槛(迭代 3)处被放弃:评审者认为没有可供优化的优势——信号盈亏平衡且成本主导(PF 约为 1.0、夏普比率为负、阿尔法为负、PSR 0.45 跨越零),但它忠实实现了假设,因此从未进入优化和分析师阶段。
仅做多的 ETHUSDT BINANCE_SPOT 4小时策略,将 Toby Crabel 的 NR4(窄区间-4)波动率收缩形态用作突破入场触发条件——在 NR4 根 K 线的高点设置触发位,若随后发生突破且价格高于 50 周期 SMA 上升趋势过滤条件,则做多;退出条件包括百分比止损/止盈、趋势破坏和时间止损。
在超过 754 笔仅做多交易中,该策略实际上没有优势:总回报 +4.4%(CAGR 0.54%),夏普比率 -0.076,索提诺比率 -0.161,利润因子 1.007,相对买入并持有的阿尔法 -0.029,最大回撤 44%,连续亏损 28 笔;夏普比率 CI 的区间为 [-1.33, +1.14],样本数为 PSR 0.45;冲击成本为 84.8%,容量仅为 $139K。
Stratmill 是研究与模拟交易工具,不提供财务建议,也不是经纪商。回测与模拟结果均为假设性结果。交易存在亏损风险。