跳至正文
全部策略

策略

Hyperliquid 大盘币 4H 双-EMA 时间序列(绝对)趋势多空组合(ATR-跟踪、3-参数、管理期货风格)

结局: 已放弃

HyperliquidMajors4hDualEmaTrendLongShortAtrBasket

回测门槛: - 指标不可靠:636 笔交易 / 956 个数据日,证据不足(需要在 >= 10 天内有 >= 5 笔交易)——提高信号频率或扩大时间窗口

假设

一个 LONG/SHORT、多品种的绝对动量(时间序列趋势)篮子,标的为流动性 HYPERLIQUID 永续合约(BTCUSD、ETHUSD、SOLUSD,以及 2-3 个其他主流品种如 AVAXUSD/BNBUSD/ARBUSD,这些品种均具备完整的 ~2.3 年 4H 历史数据)。每种资产依据其自身趋势状态独立交易 INDEPENDENTLY,通过在 4-HOUR bar 上的简单双 EMA 交叉实现:快速 EMA 高于慢速 EMA 时做多,低于时做空,仓位按 ATR 进行配置,以使每条腿承担相同的波动率风险。该策略有针对性地同时瞄准 THREE 个最欠缺的桶位——HYPERLIQUID 场所(实际 5.1% vs 目标 20% ——且分析师明确将 HL-4H 标记为未来非 VWAP HL 假设的唯一可靠 ~2.3 年 OHLCV 数据通路)、long_short DIRECTION 桶(12.6% vs 55% 上限;long_only 严重超配,达 87.4%),以及多品种范围。CRITICAL DESIGN CHOICE ——这是 TREND-FOLLOWING,即本会话中失败 9+ 次的均值回归机制的结构性 OPPOSITE。趋势跟踪本身就具有 NON-INVERTED 的收益结构(在 ATR/交叉翻转止损处截断亏损者,让盈利者顺势奔跑),直接治愈了分析师所指的、导致每次 VWAP-偏移-MR 放弃的反向 avg_win<avg_loss 特征。它同时规避了:接刀问题(我们交易 WITH 偏移,从不逆势)、协整假设(每个资产根据其自身趋势评判,不存在配对比率)、资金费率/溢价/OI/L-S 补充数据(杀死资金费率 carry 与溢价指数假设的 2023-截止数据工程阻塞器——本策略使用 OHLCV ONLY),以及 tick 数据覆盖空白。与现有 HyperliquidMajorsCrossSectionalMomentumRotationLS 同类策略的区别在于:后者是按周/1D 节奏的 CROSS-SECTIONAL 排名轮动;本策略是 4H 节奏的 ABSOLUTE 个资产的趋势。仅保留 3 个核心参数,以抵抗反复出现的过拟合失败。

迭代 4 修复了 ONLY 已报告的 Layer-3 sandbox_timeout 问题。原有代码在每根 bar 上通过遍历整个 500-bar 缓冲区的方式,在 calculate_signal()/on_extra_bar() 内重算两条 EMA 以及 ATR,在 ~72,000 个 bar 事件中每事件产生约 1,500 次重型的 .as_double() 操作(共涉及五条 4H 腿),从而突破了 300 的挂钟时间限制。指标现已 INCREMENTAL:每个合约的状态保存两个 EMA 值、一个 maxlen=atr_period 的真实波幅 deque(含运行总和)以及上一根收盘价;它被一次性初始化(在某条腿首次拥有 min_bars 时执行一次 O(len(buffer)) 遍历),之后每根新 bar 以 O(1) 推进,并由 bar 时间戳保护,以确保对同一 bar 的重复调用不会双重更新。ATR 仍然是最近 atr_period 个真实波幅的相同简单均值;EMA 由一次性初始化收敛到相同的值。信号逻辑、开/平仓规则、仓位配置、配置项、导入以及类结构等其他部分保持不变,因此 Layer 1/1.5/2 测试得以保留。

backtest_failed:data: 完整回测无法运行 3 次 — test_agent.py”,第 424 行,在 _ensure_funding_for_perp_legs raise RuntimeError( RuntimeError: 永续合约交易腿“AVAXUSD.HYPERLIQUID”的资金费率数据不可用 — 按需采集失败,或该交易场所没有资金费率历史(为保证准确性,回测已阻止;设置 SF_DISABLE_ONDEMAND_FUNDING=1 可绕过) 这是流水线/数据故障,不是对策略的评判;修复原因后再恢复运行。

实现

在五种流动性较高的 Hyperliquid 永续合约(BTCUSD、ETHUSD、SOLUSD、AVAXUSD、BNBUSD)上,以 4-HOUR bars 运行多空绝对动量(时间序列趋势)组合。每个交易腿独立交易:当 20-EMA 高于 50-EMA 时做多,低于时做空;在 EMA 交叉反转,或价格相对入场价出现 ATR(14) x 3 的不利变动时退出。各交易腿按波动率风险相等来确定仓位(权益 * risk_frac * 价格 / (atr_stop_mult * ATR)),每个交易腿的仓位上限为权益的 18%。仅使用 OHLCV,不使用补充数据。

验证结果

如果预期使用跟踪止损,应跟踪持仓期间最有利价格的峰值,并在价格从该峰值回撤 atr_stop_mult*ATR 时止损,而非以入场价为基准。

假设标题称其为“ATR-Trailing”止损,但退出逻辑实现的是相对成交价衡量的 FIXED ATR 止损(入场价 - 价格 > atr_stop_mult*ATR),而非跟踪最高价止损。配置说明准确称其为“从入场价起算的 'ATR(14) x 3 不利变动'”,因此意图已有记录。假设名称中规定的结构性风险控制措施(ATR 止损 + EMA 交叉反转退出)均已具备,因此这不构成阻断性不匹配——但真正的跟踪止损会锁定更多趋势盈利,也更符合标题。

验证 base_template 是否将预热流程路由到该重载;如果没有,请将其重命名为策略私有辅助方法,以避免静默遮蔽。

min_bars_required() 重载了框架方法(静态分析器 base_shadow 警告)。该重载返回有效整数(>= ema_slow + 5),并用于预热门控;其行为看起来符合预期且正确,但请确认基础模板在预热门控中使用了此重载,而不是自行计算。

沙盒烟测结果呈脆弱正:profit_factor 1.002,Sharpe 0.497,win_rate 29%,max_drawdown 45.8%。归因显示仅 'calm'(平静)分位盈利(+53%),而 'normal'(正常)(-31%)和 'stressed'(承压)(-27%)均亏损——优势集中于单一波动率分位。容量较低(capacity_usd ~$109K,impact_cost_pct 95.7%,impact_folded),由 ATR-仓位配置驱动,五条腿各至多 18%(avg_position_pct ~19.6%,敞口 ~487%);在流动性较差的主流品种(AVAX/BNB)上,冲击成本可能在完整回测中侵蚀原本微薄的逐笔优势。avg_trade_return_pct 0.44% 已超出费用下限,因此值得进行一次真实回测——但 PF 仅略高于 1 以及分位集中,是分析师在完整历史上首先应进行压力测试的两个要素。

分析

回测门槛: - 指标不可靠:636 笔交易 / 956 个数据日,证据不足(需要在 >= 10 天内有 >= 5 笔交易)——提高信号频率或扩大时间窗口

迭代历史

验证失败(Layer 2 — 合成场景): 使用的参数:['ema_fast', 'ema_slow', 'min_notional', 'atr_trail_mult'] 检查 __init__ 是否从 self.parameters.get() 设置了所有属性。 - steady_uptrend:TypeError: HlMajorsDualEmaTrendLongShortBasket._ema() 接受 2 个位置参数,但收到 3 个(bar 时间戳:1735692480000) - steady_downtrend:TypeError: HlMajorsDualEmaTrendLongShortBasket._ema() 接受 2 个位置参数,但收到 3 个(bar 时间戳:1735692480000) - flat_ranging:TypeError: HlMajorsDualEmaTrendLongShortBasket._ema() 接受 2 个位置参数,但收到 3 个(bar 时间戳:1735692480000) - volatility_spike:TypeError: HlMajorsDualEmaTrendLongShortBasket._ema() 接受 2 个位置参数,但收到 3 个(bar 时间戳:1735692480000) - zero_volume:TypeError: HlMajorsDualEmaTrendLongShortBasket._ema() 接受 2 个位置参数,但收到 3 个(bar 时间戳:1735692480000) - price_gap:TypeError: HlMajorsDualEmaTrendLongShortBasket._ema() 接受 2 个位置参数,但收到 3 个(bar 时间戳:1735692480000)

验证失败(Layer 1 — 静态分析): - 未找到继承 FactoryStrategy 的类(第 None 行) - 未实现必需方法:should_enter(第 None 行) - 未实现必需方法:calculate_signal(第 None 行) - 未实现必需方法:position_size(第 None 行) - 未实现必需方法:should_exit(第 None 行)

sandbox_timeout:验证失败(Layer 3 — 沙盒回测):冒烟测试在约 20000 根 bar 的窗口(BTCUSD.HYPERLIQUID-4-HOUR-LAST-EXTERNAL 的 2400 天)上超出 300s 墙钟时间限制。这几乎总是意味着每根 bar 的工作量随历史长度增长,例如反复扫描完整的资金费率/补充数据序列,或在每根 bar 上于 calculate_signal()/on_bar() 内重建列表并调用 min()/sorted()。在 __init__ 中预先计算已排序的时间戳数组 ONCE 并使用 bisect,或按时间戳缓存查找结果,使每根 bar 的开销为 O(log n) 而非 O(n)。

验证失败(Layer 2 — 合成场景): 使用的参数:['ema_fast', 'ema_slow', 'risk_frac', 'atr_period', 'max_leg_frac', 'min_notional', 'atr_stop_mult'] 检查 __init__ 是否从 self.parameters.get() 设置了所有属性。 - steady_uptrend:TypeError: HyperliquidMajors4hDualEmaTrendLongShortAtrBasket._ema_from_bars() 接受 2 个位置参数,但收到 3 个(bar 时间戳:1735692840000) - steady_downtrend:TypeError: HyperliquidMajors4hDualEmaTrendLongShortAtrBasket._ema_from_bars() 接受 2 个位置参数,但收到 3 个(bar 时间戳:1735692840000) - flat_ranging:TypeError: HyperliquidMajors4hDualEmaTrendLongShortAtrBasket._ema_from_bars() 接受 2 个位置参数,但收到 3 个(bar 时间戳:1735692840000) - volatility_spike:TypeError: HyperliquidMajors4hDualEmaTrendLongShortAtrBasket._ema_from_bars() 接受 2 个位置参数,但收到 3 个(bar 时间戳:1735692840000) - zero_volume:TypeError: HyperliquidMajors4hDualEmaTrendLongShortAtrBasket._ema_from_bars() 接受 2 个位置参数,但收到 3 个(bar 时间戳:1735692840000) - price_gap:TypeError: HyperliquidMajors4hDualEmaTrendLongShortAtrBasket._ema_from_bars() 接受 2 个位置参数,但收到 3 个(bar 时间戳:1735692840000)

回测评审

夏普
0.24
总收益率
-4.11%
最大回撤
46.38%
总交易数
636
胜率
28.3%
盈利因子
0.95

Stratmill 是研究与模拟交易工具,不提供财务建议,也不是经纪商。回测与模拟结果均为假设性结果。交易存在亏损风险。