策略
跨主流币种的多元化日内冲量K线延续组合(多空、币安USD-M、1H、事件驱动离散入场、单仓位加总仓位上限、可覆盖费用的ATR目标)
结局: 已放弃
DiversifiedImpulseBarContinuationPortfolioLS1H
真正修复了交易稀疏性和单一事件集中的问题: 13,644笔交易分布在10个名称上,密集填满每个窗口,具有引擎安全的离散入场及单仓位/总仓位上限(无名义价值膨胀假象,无强平)
假设
一个LONG-SHORT、MULTI-INSTRUMENT的日内CONTINUATION策略,运行工厂的EXPLICITLY-SANCTIONED,将冲量K线延续信号泛化为一个DIVERSIFIED PORTFOLIO,覆盖约10个具有深度历史的币安USD-M主流币种(BTC、ETH、SOL、BNB、XRP、ADA、DOGE、AVAX、LINK、LTC),使用1-HOURK线。每个资产独立监控;当任一资产出现异常大、高成交量的方向性冲量K线时,策略在冲量方向开立一个离散仓位,以捕捉随之而来的短周期延续行情。这是分析师认可的创新方向(冲量延续系列被反复标记为'具有泛化能力';存在单资产的ETH-1H、SOL-1H和BTC-1H-HL实例),被泛化为一个PORTFOLIO,专门用于修复近期几乎所有放弃案例中导致失败的两种模式: (1) LOW BREADTH / 单一事件集中风险(3名HL组合的68% DD作为杠杆化beta敞口;单一名称突破行情2021集中)— 已修复,因为冲量事件在不同、相关性不完美的多个资产上于不同时间触发,分散了TRADE STREAM,而不是堆叠相关的方向性beta;以及 (2) TRADE-SPARSITY(26笔交易的CoinM Donchian策略无法填满walk-forward窗口;OOS窗口为空)— 已修复,因为约10个资产 × 频繁的1H冲量事件每年产生数百笔交易,密集填满每个walk-forward/holdout窗口。它NOT不是被禁止的动量篮子的改进版(信号类别不同:离散的日内冲量延续,而非SMA/追踪收益趋势状态),NOT不是单资产TSM(已失效),NOT不是慢速突破(机制已破坏),NOT不是回归策略(已失效),NOT不是期权/现货(已被禁止)。在构造上对引擎安全:离散的一次性入场/一次性出场事件驱动入场,每个资产最多一个仓位,单仓位名义价值上限加上组合层面GROSS敞口上限 — 绝不使用连续的波动率缩放/净额翻转(正是这种构造导致了名义价值膨胀的假象)。几何结构为宽目标/紧止损(TP >= SL),以避免插针反弹的收益风险陷阱。共三个核心参数。
迭代 4 修复了 Layer-3 300 的冒烟测试超时问题,WITHOUT 改动任何交易逻辑。此前的版本会针对所有 10 个标的、在每根 EVERY 上,从 bar 列表切片中重新计算 ATR、平均成交量和 thrust(其中包含 numpy 数组分配以及多次 .as_double() FFI 调用)——这是一项沉重的逐 bar 常数开销,在深度历史中乘以约数十万根 1H bar 后被放大。热路径现在是每根 bar O(1):滚动 TR 和成交量 SUMS 通过有界双端队列(deque)增量维护,在 _roll_update 中对每个资产的每根新 bar 仅更新一次(按时间戳去重),管理逻辑直接从这些运行中的累计和读取 _atr_of/_avg_vol_of/_thrust_of。numpy 已从热路径中移除(纯 Python 数学运算)。主要标的的 RETURNED 信号保留了其原有的、基于 bar 的精确计算方式(_thrust_direct),因此这一已经通过 Layers 1-2 测试的连续、变化的信号在行为上保持逐字节一致;未受门控限制的 _touch 更新也在缺少 order_factory/缓存的 Layer-2 代理中让该信号保持实时更新。滚动 ATR 等于同一批 TR 的均值,滚动 avg-vol 等于同一批成交量的均值,因此进出场和交易产出保持不变——每根 bar 的开销仅从 O(窗口 x 标的数) 降至 O(标的数),且常数因子小得多。
多元化的日内冲量延续组合是明确的净亏损者,其优势低于交易成本 — 不值得花费2小时进行优化。在13,644笔交易中: total_return -95.05%, CAGR -45.6%, max_drawdown 96.24%(CI 至 100%,超过L19硬性放弃线,平静行情区间-100%),profit_factor 0.87,期望值 -$7.20/交易,avg_trade_return_pct 0.045%(低于0.15%币安USD-M费用下限,L22,佣金占毛利的12.4%)。夏普比率为-0.088(CI [-1.02, 0.61] 跨越零值),PSR 0.41,且在7年中有6年亏损(仅2022年为正)。该组合设计DID修复了其针对的两种失败模式 — 交易稀疏性(每年数百笔交易)和单一事件集中风险,具有引擎安全的离散入场且无强平——但多元化并未驯服尾部风险(峰度246,月度波动为+365%/-78%/-50%,连续亏损37次),且关键的是,并未创造出正的单笔交易净优势。这是L30/L63纯OHLCV方向性延续类别(0-幸存者);将单一名称冲量信号泛化到10个名称提高了交易数量,但单笔交易优势仍低于费用。对冲量/止损/止盈乘数的任何调整都无法将0.045%的单笔交易优势提升至费用下限之上,也无法修复96%的回撤。失败模式: fee_edge/no_edge多品种OHLCV延续,50% DD以上。
实现
以多元化组合形式在10个具有深度历史的币安USD-M主流币种上运行的多空日内冲量K线延续策略,使用1H K线。每个资产独立监控;高成交量方向性冲量(|实体|/ATR >= impulse_atr_mult 且 成交量 >= AND vol_mult)在冲量方向开立一个离散仓位,通过紧凑的ATR止损、更宽的ATR止盈目标,或最大持仓时限兜底出场。设有单仓位名义价值上限及组合总敞口上限;每个资产最多一个仓位。
验证结果
CLEAN RESTART 2026-09-04 — 该运行的裁定历史和学习记录已被移除,并从验证阶段重新开始。其先前的放弃源于流水线问题,而非市场本身: Layer-2 测试框架错误绑定了 @staticmethod 辅助函数(已修复),QA 在未经优化的冒烟测试上发出了终局性能裁定(已移除 — QA 现在只判断正确性),沙箱超时是由回测资源槽位争抢导致的(已修复)。假设与策略代码均未改变。请依据代码本身进行验证;性能将由后续完整回测和优化器决定。
回测评审
- 夏普
- -0.09
- 总收益率
- -95.05%
- 最大回撤
- 96.24%
- 总交易数
- 13644
- 胜率
- 38.6%
- 盈利因子
- 0.87
真正修复了交易稀疏性和单一事件集中的问题: 13,644笔交易分布在10个名称上,密集填满每个窗口,具有引擎安全的离散入场及单仓位/总仓位上限(无名义价值膨胀假象,无强平)
净亏损: total_return -95.05%, CAGR -45.6%, max_drawdown 96.24% (CI 至 100%) — 已超过 50% 硬性放弃线 (L19)
低于费用的优势: avg_trade_return_pct 0.045% (低于 0.15% 费用下限, L22), profit_factor 0.87, 期望值 -$7.20/交易, 佣金占毛利的 12.4%
无显著的风险调整后优势: 夏普比率 -0.088(CI [-1.02, 0.61] 跨越零值),PSR 0.41;在7年中有6年亏损(仅2022年为正)
多元化未能驯服尾部风险: 峰度246,月度波动+365%/-78%/-50%,连续亏损37次 — 由异常值主导,而非平滑的优势
L30/L63 纯OHLCV方向性延续类别 (0-幸存者); 组合泛化提高了交易数量但未提升单笔交易的优势
迭代历史
验证失败(Layer 2 — 合成场景): 使用的参数: ['assets', 'vol_mult', 'atr_period', 'vol_window', 'tp_atr_mult', 'min_notional', 'max_hold_bars', 'qty_precision', 'stop_atr_mult', 'gross_cap_frac', 'impulse_atr_mult', 'per_position_frac', 'default_qty_precision'] 请检查__init__是否从self.parameters.get()设置了所有属性。 - steady_uptrend: TypeError: super(type, obj): obj必须是type的实例或子类型(K线时间戳: 1735689600000) - steady_downtrend: TypeError: super(type, obj): obj必须是type的实例或子类型(K线时间戳: 1735689600000) - flat_ranging: TypeError: super(type, obj): obj必须是type的实例或子类型(K线时间戳: 1735689600000) - volatility_spike: TypeError: super(type, obj): obj必须是type的实例或子类型(K线时间戳: 1735689600000) - zero_volume: TypeError: super(type, obj): obj必须是type的实例或子类型(K线时间戳: 1735689600000) - price_gap: TypeError: super(type, obj): obj必须是type的实例或子类型(K线时间戳: 1735689600000)
验证失败(Layer 3 — 沙箱回测): 冒烟测试超过了300秒的墙钟时限。这几乎总是意味着存在随历史长度扩展的逐K线运算 — 例如在每根K线上重新扫描完整的资金费率/补充数据序列,或在每根K线调用calculate_signal()/on_bar()时重建列表并调用min()/sorted()。请在__init__中预先计算排序好的时间戳数组ONCE并使用bisect,或使用以时间戳为键的缓存查找,使每根K线的开销为O(log n)而非O(n)。
验证失败(Layer 2 — 合成场景): 使用的参数: ['assets', 'vol_mult', 'atr_period', 'vol_window', 'tp_atr_mult', 'min_notional', 'max_hold_bars', 'qty_precision', 'stop_atr_mult', 'gross_cap_frac', 'impulse_atr_mult', 'per_position_frac', 'default_qty_precision'] 请检查__init__是否从self.parameters.get()设置了所有属性。 - steady_uptrend: TypeError: DiversifiedImpulseBarContinuationPortfolioLS1H._bar_ts() 接受 1 个位置参数,但传入了 2 个(K线时间戳: 1735689600000) - steady_downtrend: TypeError: DiversifiedImpulseBarContinuationPortfolioLS1H._bar_ts() 接受 1 个位置参数,但传入了 2 个(K线时间戳: 1735689600000) - flat_ranging: TypeError: DiversifiedImpulseBarContinuationPortfolioLS1H._bar_ts() 接受 1 个位置参数,但传入了 2 个(K线时间戳: 1735689600000) - volatility_spike: TypeError: DiversifiedImpulseBarContinuationPortfolioLS1H._bar_ts() 接受 1 个位置参数,但传入了 2 个(K线时间戳: 1735689600000) - zero_volume: TypeError: DiversifiedImpulseBarContinuationPortfolioLS1H._bar_ts() 接受 1 个位置参数,但传入了 2 个(K线时间戳: 1735689600000) - price_gap: TypeError: DiversifiedImpulseBarContinuationPortfolioLS1H._bar_ts() 接受 1 个位置参数,但传入了 2 个(K线时间戳: 1735689600000)
Stratmill 是研究与模拟交易工具,不提供财务建议,也不是经纪商。回测与模拟结果均为假设性结果。交易存在亏损风险。