策略
Hyperliquid SOL 永续合约资金费率极端反向 — 多空,单标的:FADE 当滚动资金费率 Z 分数达到极值时的拥挤持仓 (资金费率显著为正 = 多头过度杠杆 → SHORT; 显著为负 = 空头投降 → LONG),以价格未确认加以确认,在资金费率回归 / ATR 止损 / 时间止损时退出 (SOLUSDT.HYPERLIQUID,4 小时,3 参数)
结局: 已放弃
HyperliquidSolFundingExtremeContrarian
机制运行顺畅并产生了充足的样本量(201 笔交易,跨越 953 天),没有出现超时——O(log n) 的资金费率实现按预期正常工作
假设
一个在 Hyperliquid SOL 永续合约上运行的LONG-SHORT、单标的、由 POSITIONING 驱动的反向策略,围绕一个NON-OHLCV的机械信号构建——永续合约 FUNDING——以OPPOSITE的方式区别于工厂中已失败的现金套利族。这既不是NOTdelta中性套利(该策略因资金费率盈亏相对基差噪声过小而失败),也不是NOT价格动量(HL 动量组合是 0/84)。相反,资金费率被用作拥挤度/持仓度量,用以择时进行 DIRECTIONAL 淡化:即有充分文献支持的结论——当永续合约资金费率极高时,多头过度加杠杆并支付高额资金费用,这一状态历史上先于LOWER的未来永续合约收益(存在逼空/清洗风险);对称地,极端负资金费率标志着空头投降,往往先于反弹。选择该策略是为了同时填补三个代表性不足的类别:HYPERLIQUID(6.8% 对比 20% 目标)、long_short(14.2%),以及一个不在 OHLCV 过拟合坟场之列的、数据安全的非OHLCV优势。刻意采用单标的和 3 参数设计,以保持可实现性(多标的 HL 组合在编码阶段因超时而失败)并抵抗过拟合。IMPLEMENTATION NOTE:将资金费率基线维护为一个增量更新的滚动双端队列(每次更新 O(1))——NEVER在 on_bar 内重新扫描整个资金费率序列(该模式曾导致反复出现的 300 沙箱超时问题)。
第 2 次迭代修复了唯一的 Layer-2 失败问题(`FactoryStrategy._bar_ts() takes 1 positional argument but 2 were given`,全部六个场景)。Layer-2 `_StrategyProxy` 通过 `types.MethodType` 将策略的每个可调用属性重新绑定到一个纯包装器上,这会把基类中单参数的 `_bar_ts` 静态方法转换为绑定方法——导致 `self._bar_ts(bar)` 接收到两个参数。最小化的修复方案是将该调用替换为一个模块级的 `_bar_timestamp_ns(bar)` 辅助函数,该函数直接读取 `bar.ts_event`(回退到 `ts_init`)——行为完全一致,且不受该代理重新绑定的影响。其他部分均未改变:导入、类结构、资金费率解析、信号逻辑、入场、出场以及仓位规模与通过 Layer 1 的 previous_code 逐字节相同,因此不会导致之前的任何检查回退。注意 `_bar_interval_ns` 仍然从 `__init__` 中被调用,而该调用在代理重新绑定任何内容之前就已在真实实例上运行,因此不受影响。杠杆 2.0 在 `position_size` 中通过 `self.config.leverage` 被用于总名义敞口上限的计算。
负期望的单标的资金费率极值反向淡化策略——没有可优化的边际。PF 0.60,total_return -33.7%,夏普比率 -0.42,每笔交易期望值为 -$156,且 avg_trade_return_pct -0.37%(为负,低于 0.15% Hyperliquid 手续费下限,L22)。每一年都是亏损的(2024 -14.8%、2025 -13.8%、2026 -6.5%),多头和空头两条腿的胜率均低于 -43%,且 avg_loss > avg_win —— 反向淡化策略系统性地站在了行情走势的错误一边,唯一的正收益月份来自单个 +10.77% 异常交易日(峰度 9.8)。该机制实现良好(无超时、资金费率已计入),但落入两个零存活策略族:单标的均值回归/淡化类(L55)以及单永续合约辅助(资金费率)门控方向性策略类(L73)。价格未确认门控并未带来真正的优势。每笔交易期望值的符号为负,任何参数调整都无法扭转这一点。不值得投入 2 小时进行优化。失败模式:fee_edge/no_edge 单永续合约资金费率门控反向淡化策略。
实现
在 Hyperliquid SOL 永续合约(4 小时 bar)上进行的多空单标的反向策略。资金费率被用作拥挤度度量:每根 bar 都会返回 hl_funding_rates 数值相对其自身滚动分布的滚动 Z 分数,作为连续信号。极端正 Z 值(拥挤、过度支付的多头)通过 SHORT 进行淡化;极端负 Z 值(投降式平仓的空头)通过 LONG 进行淡化,但仅当价格未能确认该拥挤方向时才触发(收盘价未创出新的 confirm_bars bar 高点/低点)。离场条件为资金费率回归(|z| <= exit_z)、入场时快照记录的 ATR 止损,或从 position.ts_opened 起计算的日历时间止损。仓位规模以风险优先原则确定:ATR 止损的成本约为权益的 risk_frac,并设有独立的总名义敞口上限。
验证结果
CLEAN RESTART 2026-09-04 —— 本次运行的判定历史和学习记录已被移除,并从验证阶段重新开始。此前被放弃的原因来自流水线本身,而非市场:Layer-2 测试框架错误地绑定了 @staticmethod 辅助方法(已修复)、QA 在一个未优化的冒烟测试上出具了最终的绩效判定(已移除——QA 现在仅判断正确性)、沙箱超时源于回测槽位资源饥饿(已修复)。假设和策略代码均未改变。请仅就代码本身的优劣进行验证;绩效将由后续的完整回测和优化器来决定。
将 _param_bounds 缩窄至 3 个核心可调参数(entry_z、exit_z、funding_lookback_prints);将风险/管道相关参数锁定为常量。
假设的卖点是一个'刻意采用 3 参数以抵抗过拟合'的设计,但 _param_bounds 却暴露了 11 个可优化参数。机制本身是正确的,但 11 维的前向滚动搜索与所声称的反过拟合理由相矛盾,并提升了 PBO 风险。不构成阻塞项。
无需处理;供分析师留意。
Layer-2 的合成信号全部冻结在 0.0(未注入资金费率),因此交易路径仅由沙箱环境(在真实资金费率下交易了 65 次)进行了验证。不构成致命问题。
回测评审
- 夏普
- -0.42
- 总收益率
- -33.71%
- 最大回撤
- 40.24%
- 总交易数
- 201
- 胜率
- 42.3%
- 盈利因子
- 0.60
机制运行顺畅并产生了充足的样本量(201 笔交易,跨越 953 天),没有出现超时——O(log n) 的资金费率实现按预期正常工作
单标的、单一辅助数据源(hl_funding_rates),无数据/验证方面的病理问题;资金费率已计入盈亏
负期望值:profit_factor 0.60,total_return -33.7%,每笔交易期望值为 -$156
avg_trade_return_pct -0.37% —— 为负值,且远低于 0.15% Hyperliquid 手续费下限(L22)
三年均为亏损(2024 -14.8%、2025 -13.8%、2026 -6.5%)——这是一种持续存在的无优势状态,而非衰减中的优势
多空两条腿均亏损(多头胜率 42%,空头胜率 42%),且 avg_loss > avg_win —— 资金费率极值淡化策略站在了行情走势的错误一边
唯一的正收益月份来自单个 +10.77% 异常交易日(峰度 9.8);底层行情整体一致为负收益
单标的资金费率门控方向性淡化策略——属于均值回归(0/174)和单永续合约辅助门控方向性策略(L73)这两个零存活类别
迭代历史
验证失败(Layer 2 —— 合成场景): 使用的参数:['exit_z', 'entry_z', 'atr_bars', 'risk_frac', 'min_prints', 'confirm_bars', '_param_bounds', 'atr_stop_mult', 'max_hold_bars', 'max_lag_seconds', 'max_notional_frac', 'funding_lookback_prints'] 请检查 __init__ 是否从 self.parameters.get() 设置了所有属性。 - steady_uptrend:TypeError: FactoryStrategy._bar_ts() takes 1 positional argument but 2 were given(bar 时间戳:1735690500000) - steady_downtrend:TypeError: FactoryStrategy._bar_ts() takes 1 positional argument but 2 were given(bar 时间戳:1735690500000) - flat_ranging:TypeError: FactoryStrategy._bar_ts() takes 1 positional argument but 2 were given(bar 时间戳:1735690500000) - volatility_spike:TypeError: FactoryStrategy._bar_ts() takes 1 positional argument but 2 were given(bar 时间戳:1735690500000) - zero_volume:TypeError: FactoryStrategy._bar_ts() takes 1 positional argument but 2 were given(bar 时间戳:1735690500000) - price_gap:TypeError: FactoryStrategy._bar_ts() takes 1 positional argument but 2 were given(bar 时间戳:1735690500000)
Stratmill 是研究与模拟交易工具,不提供财务建议,也不是经纪商。回测与模拟结果均为假设性结果。交易存在亏损风险。