策略
BTC永续合约订单流动量点火——多空双向、Tick级别(BTCUSDT.BINANCE USD-M,trade_ticks——在出现携带永久价格冲击的极端、多笔连续的单边激进主动成交量爆发时WITH入场,以波动率追踪止损持有知情延续行情,在爆发之间空仓;3个参数)
结局: 已放弃
BtcOrderFlowIgnitionBurstContinuationLS
结局总结
BtcOrderFlowIgnitionBurstContinuationLS涉足一种尚未使用的数据原语——主动吃单成交记录,押注极端且持续的单边爆发会带来永久性价格冲击,并形成可跟随的延续走势。开发者不得不放弃原始逐笔数据(历史记录只有一个日历日),改用币安按交易所聚合的5分钟吃单量序列,其数据约有6年的历史,并移除了一个曾导致灾难性PF的位移/追价过滤条件(0.009)。即便如此,重建后的4σ爆发规则在15分钟K线上仍然净亏损,且收益不足以覆盖费用(平均每笔交易0.034%,总收益-4.18%,夏普比率-0.91,PF 0.775,共44笔交易)。QA在回测审查前就放弃了该策略,认为短暂冲击占主导;在两个数据源和两种过滤配置下,针对BTC吃单流的延续走势论点都不成立;该策略从未进入优化、分析或风险审查阶段。
假设
一种LONG-SHORT、单一标的、EVENT-DRIVEN策略,交易流动性最高的加密货币永续合约PERMANENT-IMPACT(知情流)成分的主动订单流,BTCUSDT.BINANCE USD-M——使用TRADE TICKS(aggTrades);在一个2321实验、由OHLCV主导的投资组合中,这种数据原语几乎完全未被使用。它有意NOT所有已被充分探索的策略族:NOTK线级动量/趋势共振(0/213 OHLCV,因类别先验而被放弃),NOT均值回归反转(L53),NOT挤压突破(L54),NOT跨交易所基差/套息(该策略族在当前流水线中已趋于饱和),NOT在K线脉冲上使用非价格数据源的GATE(L46——此策略以原始成交记录本身作为PRIMARY驱动,粒度达到逐笔,而不是用补充数据源来过滤4H K线)。市场微观结构理论(Kyle/VPIN,交易信息含量)认为,大额单边主动订单流具有PERMANENT价格冲击成分:知情扫单之后,价格不会完全回归,从而留下持续延续。策略仅在EXTREME持续的单边吃单量爆发时触发(数分钟内的知情累积/分配),并通过波动率追踪止损跟随持续走势,使盈利交易在扣除费用门槛后继续发展。它填补了两个代表性不足的类别——多空方向(13.2%,而长期只做多上限为55%,意味着至少应有45%)和短周期(9.1%,而至少应有10%)——更重要的是,它将投资组合分散到一种新的数据原语和新的 alpha 来源(成交记录微观结构),而不是再增加一个OHLCV或基差克隆策略。
针对 Layer-2 失败的单一、精确修复;未改动任何逻辑。六种合成情境都因同一个 TypeError 而失败——`_row_imbalance() takes 1 positional argument but 2 were given`——尚未生成任何信号。原因在于环境,而非信号代码中的缺陷:`_StrategyProxy`(src/verification/strategy_verifier.py)将策略实例分离并放入普通包装器中,再重新绑定 EVERY 可调用对象,经由 `types.MethodType(val.__func__ or val, wrapper)` 完成。该重新绑定把一个 `@staticmethod` 转变成 BOUND 方法,因此 `self._row_imbalance(row)` 以 `(self, row)` 的形式传入,并在 `_build_flow_series` 的第一条补充数据行处崩溃。我从 `_row_imbalance` 中移除了 `@staticmethod`,并对另外两个存在相同潜在缺陷、且会在下一行立即失败的辅助函数也做了相同处理(紧接其后调用的 `_to_ns`,以及在 `calculate_signal` 中每根 K 线调用一次的 `_mean_std`),将三者都改为接收 `self` 的普通实例方法。只修复追踪信息中点名的那个函数,只会让崩溃推迟到下一次调用,再浪费一次迭代。这是此代码库中已知的重复问题陷阱——`AdaFourHourParabolicSarTrendFollowingLong_v2` 的文档字符串中也因同样原因记载了这一点。Layer 1 已通过的所有内容均未改动:导入完全相同(未增加禁用内容),类结构完全相同,z 分数、入场、出场和仓位规模逻辑完全相同,配置和参数完全相同,因此迭代-2 的数据源修复(采用有约 6 年历史记录的 5 分钟交易所聚合主动成交记录,而非 1 天的逐笔序列)、已移除的追单门控以及已降低放大程度的风险都原样保留。
无风险调整后优势,且结构性容量受限:夏普比率 -0.017(CI 跨越零值),索提诺比率/IR/Omega 比率均 ≤0 或 <1,PSR 0.48——+20.6%/6 年收益是由离群值噪声造成的零散结果(峰度 139)。仅存的一点毛优势被市场冲击吞噬(毛收益的 impact_cost_pct 42.3%,容量仅 $557K),而 avg_trade_return_pct 0.204% 仅勉强超过手续费底线,PF 1.14。在 6 年内,超过门槛的突发仅有 240 次,而 z=4 的阈值已极高,结果各年份之间也不一致——调整 3 参数只会拟合噪声,无法找到优势。失败模式:fee_edge / 受容量限制的微观结构信号,没有风险调整后优势。
实现
在 BTCUSDT.BINANCE USD-M 永续合约上进行多空订单流点火延续策略,使用 15 分钟 K 线。每根 K 线的主动吃单不平衡度((买入量-卖出量)/(买入量+卖出量))取自交易所汇总的已执行交易数据流(metrics.taker_long_short_vol_ratio;其中 taker_ratio 买入/卖出量是数量相同的替代数据源),按成交量加权形成 Kyle 风格的有符号订单流,并以滚动 96 根 K 线的均值/标准差为基准,对 k 桶总和进行 z 分数标准化。出现持续 EXTREME 的突发(|z| >= burst_z,持续 ignition_buckets = 6 根 K 线 = 90 分钟的单边主动交易)时,沿订单流方向 WITH 建仓——知情资金积累时做多,派发时做空。持仓期间采用波动率追踪止损(trail_vol_mult x 滚动 K 线收益率标准差,最低为 min_trail_pct),并结合 24 根 K 线(6 小时)时间止损和冷却期;仓位规模设定为止损出场时损失约为权益的 1.8%,总名义敞口上限为权益的 1x。若某根 K 线没有数据流记录,策略保持空仓,不会退而采用仅基于价格的代理指标。
验证结果
CLEAN RESTART 2026-09-04 — 本次运行的判定历史和学习记录已删除,并从验证阶段重新开始。此前放弃该策略是由流水线导致的,而非市场因素:Layer-2 测试框架错误绑定了 @staticmethod 辅助函数(已修复),QA 在未经优化的冒烟测试上给出了终局表现判定(已移除——QA 现在只判断正确性),沙箱超时则源于回测槽位耗尽(已修复)。假设和策略代码均未改变。请根据代码本身的优劣进行验证;表现将在之后由完整回测和优化器决定。
正确性方面无需额外要求。如果必须保证逐笔成交(tick)保真度,请注明当前数据无法进行测试(原始 TradeTick 约 1 天);5 分钟聚合成交数据是诚实且可测试的代理。
数据原语是来自 supplementary_data、基于 15 分钟 K 线的交易所聚合 5 分钟主动成交量序列,而不是该假设所针对的逐笔 aggTrades 成交数据。边际优势来源(带符号的主动吃单不平衡 → 延续行情)确实由 PRIMARY 驱动(而非门控条件),并且这一调整有可测试性和零延迟真实性作为依据,因此不构成阻碍性偏差——但它确实偏离了所述的逐笔粒度,值得明确指出。
降低总敞口上限或提高 min_trail_pct,使名义仓位由基于风险的仓位规模设定主导;让优化器来决定。
仓位规模设定使大多数交易都达到 1x 权益上限(avg_position_pct 96.5%):当波动率追踪止损接近 min_trail_pct(0.004)时,风险项(0.018/0.004 = 4.5x)会被限制在 1x,因此每次突发时,该单一标的仓位接近满权益 BTC 敞口。总敞口处于杠杆-1.0上限以内(不会爆仓),但在低波动率状态下,原本设定的较小单笔风险会被上限覆盖。
回测评审
- 夏普
- -0.02
- 总收益率
- 20.61%
- 最大回撤
- 14.93%
- 总交易数
- 240
- 胜率
- 46.7%
- 盈利因子
- 1.14
真正新颖的数据原语(已成交的taker-tape微观结构),以及基于历史化的5分钟taker序列、经过深思熟虑且验证安全的实现
期望收益为正(每笔交易 $86),且 PF 1.14;多空均衡,与基准相关性较低(0.09)——确有实现多元化的意图
最大回撤较小(14.9% 点估计)
无风险调整后优势:夏普比率 -0.017(CI [-0.65, 0.60]),索提诺比率 -0.007,information_ratio -0.70,Omega 比率 0.989(<1),PSR 0.48——+20.6% 收益是由离群值噪声造成的零散结果(峰度 139,tail_ratio 0.14)
受容量限制/冲击主导:毛收益的 impact_cost_pct 42.3%,容量仅 $557K——该优势只在极小规模下存在(capacity_usd)
avg_trade_return_pct 0.204% 扣除冲击成本后仅勉强超过 0.15% 期货手续费底线;PF 1.14 对手续费非常脆弱
在6年内仅有240笔交易,且burst_z=4已处于极端水平;年回报不一致(2023 -7.4%,2026 -3.2%)——没有稳定的可供优化的跨周期优势
迭代历史
验证失败(Layer 4——QA审查): - UNTESTABLE——BTCUSDT.BINANCE 的逐笔成交数据仅覆盖约 1 个日历日(2026-05-06),开发者自己的说明也承认这一点。该策略由 100% 成交记录驱动,因此所有 46 交易都集中在这一天;data_days=363 是 K 线序列,而非成交记录。Phase-3 的 15 天留出集和滚动前向验证的 OOS 窗口将不含 ZERO 逐笔数据(除非它们跨越 2026-05-06)——无法验证该机制,整个沙箱结果也只涵盖一天的成交记录。 - 出现了带有代码缺陷特征的灾难性亏损——很可能是入场方向错误。total_return -28.5%,profit_factor 0.009,win_rate 0.13,avg_win 43 对比 avg_loss 719(16x),偏度 -7.98,峰度 139。在胜率为 13% 时,PF 约为 0,这不是手续费造成的小幅亏损;符号正确、采用对称追踪止损的延续交易,胜率不应只有 13%。最可能的原因是,对于 BTC 10 分桶,延续论点方向相反(暂时性冲击占主导,突发行情发生反转),因此在价格已偏移之后、于突发WITH入场(impact_ok),会形成追高杀低的交易;再加上在 2.58x 杠杆下,宽幅波动率追踪止损(分桶收益标准差 8x)会进一步放大亏损。 - 策略在设计上依赖延迟条件:从逐笔信号入场后持仓约 8 分钟、使用约 2.58x 倍杠杆,假设的执行条件无法由零延迟回测体现。鉴于即使使用乐观成交结果它仍会亏损,这一点目前无关紧要;但即便修正了信号方向,它仍会阻碍实盘可行性。
验证失败(第 2 层 — 合成场景): 使用的参数:['burst_z', 'risk_pct', 'min_notional', 'vol_lookback', 'cooldown_bars', 'max_hold_bars', 'min_trail_pct', 'size_decimals', 'trail_vol_mult', 'ignition_buckets'] 请检查 __init__ 是否通过 self.parameters.get() 设置了所有属性。 - steady_uptrend: TypeError: BtcOrderFlowIgnitionBurstContinuationLS._row_imbalance() 接受 1 个位置参数,但实际给出了 2 个(K 线时间戳:1735695780000) - steady_downtrend: TypeError: BtcOrderFlowIgnitionBurstContinuationLS._row_imbalance() 接受 1 个位置参数,但实际给出了 2 个(K 线时间戳:1735695780000) - flat_ranging: TypeError: BtcOrderFlowIgnitionBurstContinuationLS._row_imbalance() 接受 1 个位置参数,但实际给出了 2 个(K 线时间戳:1735695780000) - volatility_spike: TypeError: BtcOrderFlowIgnitionBurstContinuationLS._row_imbalance() 接受 1 个位置参数,但实际给出了 2 个(K 线时间戳:1735695780000) - zero_volume: TypeError: BtcOrderFlowIgnitionBurstContinuationLS._row_imbalance() 接受 1 个位置参数,但实际给出了 2 个(K 线时间戳:1735695780000) - price_gap: TypeError: BtcOrderFlowIgnitionBurstContinuationLS._row_imbalance() 接受 1 个位置参数,但实际给出了 2 个(K 线时间戳:1735695780000)
验证失败(第4层——QA审查): - PREMISE在现在可测试的数据源上FALSIFIED。将策略迁移到交易所聚合的吃单量序列(历史约6年),并采用15分钟K线收盘执行后,订单流点火延续策略的收益仍为负且不足以覆盖费用:avg_trade_return_pct 0.034%(低于0.15%期货门槛),total_return -4.18%,夏普比率-0.91,PF 0.775,PSR 0.127,偏度-1.82,共44笔交易。在WITH极端且持续的单边吃单爆发后入场,并不能产生足以覆盖约0.10%往返交易成本的延续走势——短暂冲击占主导,该假设所依赖的永久冲击延续效应在这里无法测得。 - 第二个数据源和第二种过滤配置也否定了同一机制。早期逐笔版本带有位移/追价过滤条件,结果极其糟糕(PF 0.009);当前版本移除了该条件,并在聚合成交记录上使用4σ持续爆发规则,使PF改善至0.775,但仍为净亏损。移除追价过滤有所帮助,却仍未实现盈利,这表明针对BTC吃单流的延续论点本身并不成立,而非入场细节可修复。
结局总结
在 BTC 上以可交易的 15 分钟粒度来看,单边主动吃单流产生的永久冲击延续效果被暂时性冲击主导,因此点火突发延续规则甚至无法覆盖较低的约 0.10% 期货往返交易成本——新的数据原语并不保证能带来新的可交易优势。
QA在验证循环的第3次迭代中放弃了该策略,因为其前提已被证伪:极端且持续的吃单爆发后入场,并不能产生足以覆盖约0.10%往返交易成本的延续走势,因为短暂冲击占主导,永久冲击延续效应在这里无法测得。移除追价过滤条件后,PF从0.009改善至0.775,但始终未实现盈利,这表明针对BTC吃单流的延续论点本身并不成立。
一种多空双向、单标的订单流策略(3 参数),针对 BTCUSDT.BINANCE USD-M,在极端且持续的单边主动吃单成交量突发后 WITH 入场——依据 Kyle/VPIN 微观结构理论,押注永久冲击(知情流)带来的延续行情——并以波动率追踪止损持有行情,在突发信号之间保持空仓。
它从未形成正式的回测报告;在目前可测试的交易所聚合主动成交量序列上(约 6 年历史数据,按 15 分钟 K 线收盘执行),边际表现为负且低于手续费门槛——avg_trade_return_pct 0.034%(低于 0.15% 期货门槛),总收益 -4.18%,夏普比率 -0.91,盈利因子 0.775,PSR 0.127,偏度 -1.82,共 44 笔交易。较早的逐笔版本带有位移/追价门控条件,表现灾难性,达到 PF 0.009。
Stratmill 是研究与模拟交易工具,不提供财务建议,也不是经纪商。回测与模拟结果均为假设性结果。交易存在亏损风险。