策略
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 再平衡频率在亏损的毛收益信号之上进一步侵蚀收益
分析
迭代历史
验证失败(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 是研究与模拟交易工具,不提供财务建议,也不是经纪商。回测与模拟结果均为假设性结果。交易存在亏损风险。