策略
UNI 4H Aroon Oscillator 看涨趋势确认做多策略
结局: 已放弃
UniAroonOscillatorBullishTrendConfirmationLong4H
结局总结
UniAroonOscillatorBullishTrendConfirmationLong4H 是针对一长串先前失败案例设计的——采用纯 OHLCV 以避开补充数据导致的失败,选择新的 DeFi 板块标的(UNI),并采用结构上不同的指标(Chande 的 Aroon Oscillator),衡量距极值出现的时间,而非价格相对于 MA 的位置。实现干净且忠实于假设,在 5.5 年间产生了 431 笔仅做多交易,但其优势从根本上为负:夏普比率 -0.497,盈利因子 0.883,总回报 -28.4%,7 年中有 5 年亏损,最大回撤为 50%。回测审查关卡在优化前就放弃了该策略,认为其前提——Aroon 能在 UNI 4H 上确认可交易的看涨趋势——根本没有优势;它只有一个有意义的参数,而且基准表现为 PF-0.88,最佳 N 次搜索除了噪声之外无物可寻。该策略被标记为单一山寨币上的距极值时间趋势策略失败模式,呼应了被放弃的 ADA 4H Aroon 同类策略。
假设
一种针对 UNIUSDT 永续期货(Binance USD-M)的仅做多单一标的 TREND-CONFIRMATION 策略,在 4 小时 K 线上使用 Aroon Oscillator。CRITICAL DESIGN CHOICES 的驱动因素是连续发生 6+ 次补充数据失败,以及均值回归/逆势做空失败:(a) ZERO 补充数据依赖——纯 OHLCV。(b) NOT 均值回归(在山寨币永续合约上失败),NOT 逆势做空(在 BTC 资金费率下失败)。(c) 4H + Binance USD-M——经验证有效的组合。(d) NEW 标的——UNI(Uniswap)不在现有的 ADA/AVAX/BNB/BTC/DOT/ETH/LINK/LTC/SOL 个标的组合中,且属于独特的 DeFi 板块(DEX 治理代币),与组合中已有的 L1/L2/支付/预言机/迷因币山寨币不相关。(e) NEW 机制——Aroon Oscillator 在结构上有别于流水线中所有其他指标:它NOT是通道指标(Donchian/Keltner),NOT基于成交量,NOT MACD,NOT Supertrend,NOT均线系统(Hull/EMA/SMA 交叉)。Aroon(Tushar Chande 1995)衡量的是TIME-SINCE-EXTREME,而非价格相对于MA的位置:Aroon Up = 100 ×(周期 − bars_since_highest_high)/ 周期。当最近的高点距离当前很近、AND 最近的低点距离当前很远时,趋势强劲向上。这是一个本质上不同的信号来源。(f) MAXIMALLY SIMPLE——只有一个有意义的参数(Aroon 周期 = 14,Chande 的标准默认值)。
第 4 次迭代修复了第 -2 层故障:两个极值索引辅助函数被标为 @staticmethod,但第 -2 层的 _StrategyProxy 会将类方法重新绑定为实例方法,移除了 staticmethod 描述符,导致 `self._idx_last_max(highs_w)` 向一个需要 1 个参数的函数传入了 2 个位置参数(六个合成情景均出现 TypeError)。最小化且不会引入回归的修复是将 `_idx_last_max`/`_idx_last_min` 移至模块级函数,并在调用时不使用 `self.`——这样不可能发生绑定,TypeError 也就不会再次出现。所有信号计算、仓位规模、导入和类结构均与 previous_code 逐字节相同,保留了已通过的第 1 层静态检查,以及连续且未冻结的 Aroon 信号。
优势从根本上为负,并非优化候选。基准策略在 5.5 年间进行了 431 笔交易,夏普比率为 -0.497,profit_factor 0.883(<1,扣除费用后亏损),total_return -28.4%,alpha 为负(-0.06),且在涵盖多个市场状态的 7 年中有 5 年亏损。实现正确且忠实于假设(431 笔仅做多交易、纯 OHLCV、信号未冻结),因此这不是可以继续迭代修复的代码错误——其前提(Aroon 振荡器能够在 UNI 4H 上确认可交易的看涨趋势)根本没有优势。只有一个有意义的参数,且基准表现为 PF-0.88 并处于亏损状态,优化就没有稳健区域可供寻找;2 小时的最佳 N 次搜索只会在负期望机制上对噪声过度拟合。FAILURE PATTERN:单一资产上的 Aroon 仅做多趋势确认策略在山寨币永续合约上产生了真正为负的基准优势(与被放弃的 ADA 4H Aroon 同类策略相呼应)——距极值时间趋势策略系列在单一山寨币上没有产生优势,不应按标的逐一重试。
实现
在 UNIUSDT Binance USD-M 永续合约、4H K 线上仅做多的趋势确认策略。使用 Tushar Chande 的 Aroon Oscillator(在 14 根 K 线窗口内以 Aroon Up 减去 Aroon Down)作为连续的 [-100,+100] 信号,用于衡量距极值出现的时间。振荡器强烈为正(>= entry_osc)时做多;趋势减弱(<= exit_osc)或触发止损/止盈/时间止损时退出。纯 OHLCV,不依赖任何补充数据,按权益相对值确定仓位,杠杆 1.0。
验证结果
验证失败(第 2 层——合成情景): 使用的参数:['tp_pct', 'exit_osc', 'risk_pct', 'stop_pct', 'entry_osc', 'aroon_period', 'min_notional', 'notional_pct', 'max_hold_bars'] 请检查 __init__ 是否设置了来自 self.parameters.get() 的所有属性。 - steady_uptrend: TypeError: UniAroonOscillatorBullishTrendConfirmationLong4H._idx_last_max() 需要 1 个位置参数,但实际给出了 2 个(K 线时间戳:1735691340000) - steady_downtrend: TypeError: UniAroonOscillatorBullishTrendConfirmationLong4H._idx_last_max() 需要 1 个位置参数,但实际给出了 2 个(K 线时间戳:1735691340000) - flat_ranging: TypeError: UniAroonOscillatorBullishTrendConfirmationLong4H._idx_last_max() 需要 1 个位置参数,但实际给出了 2 个(K 线时间戳:1735691340000) - volatility_spike: TypeError: UniAroonOscillatorBullishTrendConfirmationLong4H._idx_last_max() 需要 1 个位置参数,但实际给出了 2 个(K 线时间戳:1735691340000) - zero_volume: TypeError: UniAroonOscillatorBullishTrendConfirmationLong4H._idx_last_max() 需要 1 个位置参数,但实际给出了 2 个(K 线时间戳:1735691340000) - price_gap: TypeError: UniAroonOscillatorBullishTrendConfirmationLong4H._idx_last_max() 需要 1 个位置参数,但实际给出了 2 个(K 线时间戳:1735691340000)
回测评审
- 夏普
- -0.50
- 总收益率
- -28.41%
- 最大回撤
- 50.38%
- 总交易数
- 431
- 胜率
- 35.0%
- 盈利因子
- 0.88
实现干净且符合假设:431 笔仅做多交易,0 笔做空交易,纯 OHLCV,不依赖任何补充数据,Aroon 信号连续且随 K 线变化(没有信号冻结风险)。
交易样本量大(431),覆盖 5.5 年——结果具有统计意义,并非小样本噪声。
入场流程正常:431 个信号已触发,431 个订单已提交,0 个订单因规模/现金/最低名义金额要求而被丢弃。
整个期间优势为负:夏普比率 -0.497,profit_factor 0.883(<1,扣费后亏损),total_return -28.4%,CAGR -10.1%。
alpha 为负(-0.06),Sortino 比率为负(-0.87)——相对于基准所提供的风险敞口,该策略没有增加风险调整后的价值。
在 5 个日历年中有 7 年亏损,且涵盖不同市场状态(2021 -10%、2022 -26%、2023 -12%、2026 -21%)——这不是单一糟糕市场状态,而是结构性地没有优势。
最大回撤 50.4%,水下持续 1,936 天(超过 5 年);胜率仅 35%,最多连续亏损 13 笔。
只有一个有意义的参数(Aroon 周期)以及入场/出场阈值——对于一个亏损的基准策略,没有可供优化利用的丰富稳健区域。
分析
提交的 strategy_code 并未 NOT 实现该假设——附错了文件。假设是“UNI 4H Aroon Oscillator 看涨趋势确认做多策略”(仅做多、单一标的、仅 OHLCV、基于 4H K 线的 UNIUSDT-PERP、Aroon Oscillator 信号)。但代码是 EthBtcRatioZScoreMeanReversionPairs——一种市场中性、双标的、多空 ETH/BTC 比率 Z 分数均值回归配对交易,基于 BTCUSDT+ETHUSDT DAILY K 线。回测配置证实实际运行的正是该策略:instrument_id=BTCUSDT.BINANCE,extra_instruments=[ETHUSDT.BINANCE],1-DAY 根 K 线,做多 53 条腿 / 做空 53 条腿,比例均衡——测试内容中没有 UNI、没有 4H、没有 Aroon,也没有仅做多逻辑。ACTION:重新提交实际的 UNI 4H Aroon Oscillator 仅做多策略代码(单一标的 UNIUSDT.BINANCE-4-HOUR,无额外标的,使用 Aroon Up/Down 振荡器入场,仅做多),并在优化前重新运行回测。另外,NOT 只重新提交 ETH/BTC 比率-MR 代码:该策略系列已被反复证明没有优势(同类策略此前因夏普比率完全为负而被放弃,数值为 CI),而本次运行也亏损(PF 0.95,夏普比率 -0.22,总计 -11.8%)。该假设尚未经过测试——先修正文件不匹配问题。
迭代历史
验证失败(第 2 层——合成情景): 使用的参数:['exit_zscore', 'min_notional', 'max_hold_days', 'stop_loss_pct', 'per_leg_notional', 'profit_target_pct', 'ratio_lookback_days', 'ratio_zscore_threshold'] 请检查 __init__ 是否设置了来自 self.parameters.get() 的所有属性。 - steady_uptrend: 信号被冻结:所有 409 个信号都相同(值=0.0)。calculate_signal() 可能存在错误——信号从未变化。 - steady_downtrend: 信号被冻结:所有 409 个信号都相同(值=0.0)。calculate_signal() 可能存在错误——信号从未变化。 - flat_ranging: 信号被冻结:所有 409 个信号都相同(值=0.0)。calculate_signal() 可能存在错误——信号从未变化。 - volatility_spike: 信号被冻结:所有 409 个信号都相同(值=0.0)。calculate_signal() 可能存在错误——信号从未变化。 - zero_volume: 信号被冻结:所有 409 个信号都相同(值=0.0)。calculate_signal() 可能存在错误——信号从未变化。 - price_gap: 信号被冻结:所有 409 个信号都相同(值=0.0)。calculate_signal() 可能存在错误——信号从未变化。
结局总结
Aroon(距极值时间)仅做多趋势确认策略系列,在单个山寨币永续合约上产生真正为负的基准优势——与被放弃的 ADA 4H Aroon 同类策略如出一辙——因此不应按标的逐一重试;对没有优势的机制进行正确且忠实的实现,也无法通过优化使其盈利。
回测审查关卡在优化前就放弃了该策略:其 alpha、夏普比率、最大回撤、总回报和盈利因子均未达标;而且实现忠实于设计(431 笔仅做多交易、纯 OHLCV、信号未冻结),问题在于前提而非程序错误——Aroon 距极值时间趋势确认在 UNI 上没有可交易优势,因此只有一个有意义的参数且基准策略亏损,没有稳健区域可供优化利用。
一种仅做多、单一标的的趋势确认策略,交易 UNIUSDT.BINANCE USD-M 永续合约(4H K 线,纯 OHLCV),使用 Tushar Chande 的 Aroon Oscillator——当振荡器发出强劲且新近的上升趋势信号(近期高点、远期低点)时做多,并在趋势减弱或触发止损/止盈/时间止损时退出——在反复遭遇补充数据策略和均值回归策略失败后,刻意选择了新标的、新指标类别,并且不依赖任何补充数据。
在约 5.5 年间进行了 431 笔仅做多交易,优势从根本上为负:总回报 -28.4%,CAGR -10.1%,夏普比率 -0.497,盈利因子 0.883(扣费后亏损),alpha 为负(-0.06),Sortino 比率为负(-0.87),胜率为 35%,最大回撤 50.4%,且在 7 个日历年中有 5 年亏损,涵盖不同市场状态。
Stratmill 是研究与模拟交易工具,不提供财务建议,也不是经纪商。回测与模拟结果均为假设性结果。交易存在亏损风险。