跳至正文
全部策略

策略

BTC 永续合约 taker 流量确认动量(单标的 USD-M,多空,1H,主动买卖不平衡门控趋势,流量背离时平仓)

结局: 已放弃

BtcTakerFlowConfirmedMomentumLS

结局总结

BtcTakerFlowConfirmedMomentumLS 完全按设计运行——在完整的 2019-2026 BTC 历史中产生了 2064 笔交易,多头和空头两条腿均有交易,41.6% 敞口合理,且没有爆仓——但经 taker 流量确认的延续论点就是没有优势。回测结果为 -21.1%,Sharpe 为 -1.39(置信区间完全为负),利润因子为 0.797,并且在 2020 之后的每一年都亏损;1H 再平衡则因佣金损失了 22.4% 的毛收益。由于信号处处为负,没有正向区间可供优化,分析师在回测审查关口放弃了该策略,而没有花费数小时进行 walk-forward 优化;未进入优化或优化后分析阶段。记录指出,两侧对称亏损隐约暗示可将其重新构想为反转均值回归策略,但这只是未来的假设,不是对该策略的修复。

假设

一个SHORT做多、SINGLE-INSTRUMENT、单场所方向性策略,使用1-HOUR K线,在BTCUSDT.BINANCE USD-M永续期货上运行,当价格趋势被持续的TAKER AGGRESSOR FLOW所CONFIRMED时,以ONLY方式建立方向性持仓。这是该工厂中ONLY机制类别的第三个成员,带有一条已晋升的幸存者(由加密原生确认信号门控的单条、价格可记入的腿 — 参见已晋升的ETH资金费率确认趋势),但它故意切换至同类未使用的ORTHOGONAL信号:主动买入/卖出量不平衡(主动方抬价吃卖盘 vs 压价吃买盘的方向),不同于资金费率(ETH同类)和持仓量变化(SOL同类)。核心论点:伴随持续主动BUY主导的价格变动反映通过订单簿付出溢价的真实需求(真正的延续);而持续主动SELL主导下的变动反映真实卖盘压价(真正的下行延续);当价格方向与主动成交流DISAGREE时(例如价格上行而卖方主导盘口),该变动缺乏支撑且可能耗尽,因此策略保持空仓。CRITICAL DESIGN NOTES将其与已关闭的家族区分开来:(1)SINGLE可记入价格腿 — 无delta中性配对,无资金费率/基差CARRY(此处资金费率从不记为现金流),因此避免了不可记入的持仓成本和低于费用的基差陷阱;(2)主动成交流仅为SIGNAL,这是加密原生数据经验证的角色;(3)NOT跨场所/HYPERLIQUID,NOT COIN-M,NOT现货-永续基差,NOT横截面,NOT逐笔驱动(读取每根K线聚合的主动成交量,可在K线引擎中完整表示);(4)BTC拥有所有加密资产中最深、最长的主动成交流与价格历史,因此前向验证窗口数据丰富 — 无稀薄数据上限;(5)门控信号在每个趋势区间CONTINUOUSLY触发(非罕见事件),因此OOS窗口密集填充 — 与杀死回撤累积类别的OOS-全零事件稀疏签名相反。刻意保持精简:3个可调参数(trend_lookback、taker_window、taker_threshold),以抗过拟合。

针对 Layer-3 沙箱超时(墙钟时间 >300s)的第 4 次迭代修复。先前代码在每根 bar 上都会 `_flow_over_window` 重建一个切片 `self._taker_ratio_vals[lo:hi]`,并在约 70k 根 1H bar 的每一根上调用 `sum()`——这是 O(window) 工作;合并密集的 5-min `metrics` 流(自 2021 起约 525k 行)后,工作量随之增长。修复方案是在 `_build_taker` 中预先计算累积 PREFIX-SUM 数组 ONCE(与已有的排序时间戳列表一起),因此窗口均值计算变为 `(prefix[hi]-prefix[lo])/(hi-lo)`——O(1),每根 bar 无需分配或求和。回退分支现在会复用已有的 `hi` bisect 索引(`j = hi - 1`),而不是重新计算第二个 `bisect_right`,每根 bar 因此又省去一次 O(log n) 调用。信号逻辑、导入、入场/出场门控或仓位规模均未改变,因此 Layer 1 和 2(已通过)不受影响;仅降低了每根 bar 的计算成本。交易场所仍为 BINANCE 期货(使用空头),杠杆=1.0(仓位规模仅使用 position_pct,因此没有未使用杠杆门控风险)。

没有优势,而且这不是开发者可以修复的代码错误——策略完全按设计运行(2064 笔干净交易,完整历史,taker 流量门控正确),但在 ENTIRE 个 6.5 年样本中,taker 流量确认的动量延续信号仍具有负期望:Sharpe -1.39(CI 完全为负),profit_factor 0.797,并且在 -2020 之后的每一年都亏损(2022 -5.9%,2023 -10.5%,2024 -3.8%,2025 -7.1%),相对于其 BTC 基准的 information_ratio -0.78。优化无法挽救一个整体持续为负的信号——没有正向参数区间可供调优,因此花费 2 小时进行 walk-forward 优化会白费。多空两条腿持续对称亏损,隐约与反转信号优势相符,但这只是研究负责人的假设级重新构想(对缺乏支撑的走势做均值回归,而非延续),并非参数调整;此处并未证实这一点。不要进行优化。

实现

BTC USD-M 永续合约 1H 多空动量策略:当过去 trend_lookback 小时的价格趋势得到同方向持续 taker 主动方流量确认时建立方向性仓位 ONLY(过去 taker_window 小时的平均 taker 买卖比率越过以 1.0 为中心的对称区间)。上涨趋势且买方主导流量时做多;下跌趋势且卖方主导流量时做空。流量背离(趋势反转或流量转向相反的主导区间)、保护性止损或最长持仓时间限制触发时平仓。Taker 流量仅作为信号,数据合并自独立的 taker_ratio 流和 metrics 流(历史追溯至约 2021 的 taker_long_short_vol_ratio),因此回测覆盖完整历史。

验证结果

验证失败(Layer 3——沙箱回测):冒烟测试超过 300s 墙钟时间限制。这几乎总是意味着每根 bar 的工作量会随历史长度增长——例如重新扫描完整的资金费率/补充序列,或在每根 bar 上于 calculate_signal()/on_bar() 中重建列表并调用 min()/sorted()。在 __init__ 中预先计算排序后的时间戳数组 ONCE 并使用 bisect,或按时间戳缓存查找结果,使每根 bar 的开销为 O(log n) 而非 O(n)。

回测评审

夏普
-1.39
总收益率
-21.15%
最大回撤
27.53%
总交易数
2064
胜率
23.8%
盈利因子
0.80

实现可靠:2064 笔交易顺利触发(没有仓位为零/低于最小名义金额/现金不足导致的丢弃),通过合并 taker_ratio+metrics 流覆盖完整的 2020-2026 历史,41.6% 敞口合理,没有爆仓

信号是真正的多空策略,且两个方向都有交易(1356 笔多头 / 708 笔空头)

NO EDGE:Sharpe -1.39(CI 完全为负,-2.27 至 -0.59),Sortino -2.75,profit_factor 0.797,total_return -21.1%

在 -2020 之后的 EVERY 年中亏损(2022 -5.9%,2023 -10.5%,2024 -3.8%,2025 -7.1%)——这不是市场状态造成的假象,而是持续的负期望

win_rate 23.8%,两条腿表现都差(多头 24.6% / 空头 22.3%);相对于有意义的 BTC 基准,information_ratio -0.78——严格差于买入并持有

commission_pct_of_gross 22.4%——1H 再平衡频率在亏损的毛收益信号之上进一步侵蚀收益

分析

不要进行 NOT 优化——只有 62 笔交易,且全部发生在最近约 2 个月(2026);2020-2025 产生了零笔交易,因此 walk-forward 的 OOS 个窗口和留出集都会是空的。主要原因是 taker 数据覆盖不足,而非(目前尚无法证实的)信号问题。按以下顺序调查:(1) PRINT THE TAKER COVERAGE SPAN:在解析 supplementary_data['taker_ratio'] 得到 BTCUSDT 后,在 _build_taker 中记录 len(self._taker_ts) 和 min/max(self._taker_ts)。确认 2026 之前是否完全没有 taker 行数据。(2) IF ROWS EXIST,但没有对齐:问题在于解析/格式。_parse_taker_ratio 会猜测字段名(buySellRatio/buy_sell_ratio/ratio/...)和时间戳单位(通过 <10^15 启发式区分 ms 与 ns),并有 buyVol/sellVol 回退逻辑——核实传给策略的 ACTUAL Binance Vision“metrics” taker……展开收起

不要进行 NOT 优化——只有 62 笔交易,且全部发生在最近约 2 个月(2026);2020-2025 产生了零笔交易,因此 walk-forward 的 OOS 个窗口和留出集都会是空的。主要原因是 taker 数据覆盖不足,而非(目前尚无法证实的)信号问题。按以下顺序调查:(1) PRINT THE TAKER COVERAGE SPAN:在解析 supplementary_data['taker_ratio'] 得到 BTCUSDT 后,在 _build_taker 中记录 len(self._taker_ts) 和 min/max(self._taker_ts)。确认 2026 之前是否完全没有 taker 行数据。(2) IF ROWS EXIST,但没有对齐:问题在于解析/格式。_parse_taker_ratio 会猜测字段名(buySellRatio/buy_sell_ratio/ratio/...)和时间戳单位(通过 <10^15 启发式区分 ms 与 ns),并有 buyVol/sellVol 回退逻辑——核实传给策略的 ACTUAL Binance Vision“metrics” taker 数据模式是否符合其中一种,并确认时间戳转换正确;单位不匹配会导致除最近数据外的所有行都无法使用。(3) IF TAKER HISTORY GENUINELY STARTS ~2026:Binance 的实时 takerlongshortRatio 接口只提供约 30 天的数据,但 data.binance.vision 的“metrics”归档将 taker 买入/卖出量追溯到约 2021——确认采集器是否将 BTCUSDT taker metrics 回补至完整回测起点;如果没有足够久远的数据,多年周期的前提就不可行,应将该假设判定为 ABANDONED(数据壁垒),或仅重新界定为足以进行 3 窗口 walk-forward 加留出测试的时段(>= 约 18 个月)。(4) SECONDARY(修复数据后观察,不要忽视):即使在 2026 窗口中,该策略也严重亏损(PF 0.50,胜率 25.8%,连续亏损 13 笔),且在 1H 下有 37.6% 的佣金拖累。动量-CONFIRMATION信号只有 26% 的胜率,这表明流量背离退出可能在截断盈利交易、让亏损交易继续持有——重新检查 should_exit 逻辑(流量一越过 1.0 就立即退出可能过于敏感)。如果在完整覆盖 taker 数据后优势仍为负,或 1H 费用占主导,就应放弃,不要再反复迭代。保留没有价格回退的 fail-loud 设计——正是它让问题表现为零笔交易,而不是悄然测试仅依赖价格的动量优势。

迭代历史

验证失败(Layer 2——合成场景): 使用的参数:['min_notional', 'position_pct', 'taker_window', 'stop_loss_pct', 'trend_lookback', 'taker_threshold', 'max_holding_bars'] 检查 __init__ 是否设置了 self.parameters.get() 中的所有属性。 - steady_uptrend: TypeError:BtcTakerFlowConfirmedMomentumLS._ts_to_ns() 接收 1 个位置参数,但实际传入了 2 个(bar 时间戳:1735691100000) - steady_downtrend: TypeError:BtcTakerFlowConfirmedMomentumLS._ts_to_ns() 接收 1 个位置参数,但实际传入了 2 个(bar 时间戳:1735691100000) - flat_ranging: TypeError:BtcTakerFlowConfirmedMomentumLS._ts_to_ns() 接收 1 个位置参数,但实际传入了 2 个(bar 时间戳:1735691100000) - volatility_spike: TypeError:BtcTakerFlowConfirmedMomentumLS._ts_to_ns() 接收 1 个位置参数,但实际传入了 2 个(bar 时间戳:1735691100000) - zero_volume: TypeError:BtcTakerFlowConfirmedMomentumLS._ts_to_ns() 接收 1 个位置参数,但实际传入了 2 个(bar 时间戳:1735691100000) - price_gap: TypeError:BtcTakerFlowConfirmedMomentumLS._ts_to_ns() 接收 1 个位置参数,但实际传入了 2 个(bar 时间戳:1735691100000)

结局总结

即便一个干净、正确实现的加密原生确认信号,仍可能携带持续的负期望值,因此BTC 1H上的主动成交流确认动量延续策略不应按原样再次尝试 — 两条腿上的对称亏损暗示,均值回归重构将是研究主管级别的假设,而非参数微调。

该策略在优化前的回测审查关口被放弃,分析师给出了“放弃”的结论:信号在整个 6.5 年样本中始终为负,并且在 -2020 之后的每一年都亏损(2022 -5.9%,2023 -10.5%,2024 -3.8%,2025 -7.1%),因此没有正向参数区间可供优化。

只有在价格趋势得到同方向持续 taker 主动方流量确认时,才对 BTCUSDT USD-M 永续合约(1H bar)建立多头或空头仓位;当价格与 taker 买卖不平衡方向不一致时,则保持空仓。

在约 1600 天内(2019-2026),策略触发了 2064 笔干净交易(1356 笔多头 / 708 笔空头),但没有优势:Sharpe -1.39(CI 全部为负,-2.27 至 -0.59),总收益 -21.1%,利润因子 0.797,胜率 23.8%,相对于其 BTC 基准的信息比率为 -0.78,佣金则吞噬了毛收益的 22.4%。

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