跳至正文
全部策略

策略

BTC 交易 Tick 订单流不平衡延续(日内,多空,Binance USD-M 期货,持续吃单主动成交信号,覆盖手续费的目标,资本上限约束)

结局: 已放弃

BtcOrderFlowImbalanceContinuationLS

BTC 交易 Tick 订单流不平衡延续(日内,多空,Binance USD-M 期货,持续吃单主动成交信号,覆盖手续费的目标,资本上限约束)

假设

1,174-实验组合中的 FIRST 微结构 / 交易 tick 策略(短周期桶 2.4% 对比 >=10% 配额;订单流类别完全缺失)。一种 LONG-SHORT、SINGLE-INSTRUMENT 的日内策略,运行于 BTCUSDT.BINANCE USD-M 永续合约上交易 SHORT-HORIZON CONTINUATION,由 ORDER-FLOW IMBALANCE(OFI)驱动——主动吃买单量减去主动吃卖单量的净值——由 TRADE TICKS(aggTrades)计算得出,这是一种在 OHLCV 形态 Bar 中不可见的加密原生优势。论点:单边 AGGRESSIVE 流的持续爆发(知情 / 被迫订单流抬升卖价或砸下买价)先于同方向的短期延续出现,发生在订单簿重新补满之前;顺势入场并在覆盖手续费的行情中出场即可捕捉该延续。EVERY 设计选择遵循本次会议的约束性教训:(1)以 TRADE_TICKS 作为数据源——aggTrades 在 Binance Vision 上有 FULL 历史(NOT 那些历史稀薄的补充 'taker_ratio'/OI/清算流,它们最终以 0-for-7……展开收起

1,174-实验组合中的 FIRST 微结构 / 交易 tick 策略(短周期桶 2.4% 对比 >=10% 配额;订单流类别完全缺失)。一种 LONG-SHORT、SINGLE-INSTRUMENT 的日内策略,运行于 BTCUSDT.BINANCE USD-M 永续合约上交易 SHORT-HORIZON CONTINUATION,由 ORDER-FLOW IMBALANCE(OFI)驱动——主动吃买单量减去主动吃卖单量的净值——由 TRADE TICKS(aggTrades)计算得出,这是一种在 OHLCV 形态 Bar 中不可见的加密原生优势。论点:单边 AGGRESSIVE 流的持续爆发(知情 / 被迫订单流抬升卖价或砸下买价)先于同方向的短期延续出现,发生在订单簿重新补满之前;顺势入场并在覆盖手续费的行情中出场即可捕捉该延续。EVERY 设计选择遵循本次会议的约束性教训:(1)以 TRADE_TICKS 作为数据源——aggTrades 在 Binance Vision 上有 FULL 历史(NOT 那些历史稀薄的补充 'taker_ratio'/OI/清算流,它们最终以 0-for-7 失败并伴随末端窗口的交易聚集);数据覆盖墙不适用于核心 tick 数据。(2)CONTINUATION 方向而非反转——加密日内 CONTINUES(每个日内反转 / VWAP-回归均已失败:SOL -80%,BTC -90.5%);OFI-延续与已验证的方向一致。(3)FEE-AWARE BY CONSTRUCTION——仅在 STRONG 的持续主动成交时入场,目标为 ~0.4% 的行情变动(按 ~0.10% RT 吃单费率后净 ~0.3%),远高于 0.15% 期货下限,持有 MINUTES;这是明确的 NOT 剥头皮(亚 -0.15% tick 追逐是被禁止的反模式),且 NOT 100+ 微小 PnL 交易 / 天。(4)BTC——最深的订单簿、最紧的微结构 -> 最佳的 OFI 信噪比和最低的滑点。(5)LONG-SHORT(低于目标的 13% 方向),FUTURES(干净的离散化仓位、可做空;合适的交易场所,NOT 像期权 / COIN-M 那样被引擎屏蔽,NOT 像 HL 那样数据匮乏)。(6)CAPITAL-CAPPED 仓位相对于 STABLE 已实现权益进行计算,硬性上限 <=100%——这是对反复出现的 >100%-名义膨胀 bug 的明确修复。刻意保持最小化:3 个可调参数(ofi_window、ofi_threshold、take_profit_pct)。HONEST:高新颖性 / 高配额价值但生存不确定(手续费拖累和 tick 数据沙盒可用性是两种失败模式),按优先级 3 定价。

第 3 次迭代恢复了 QA 标记为被替换的 PRE-REGISTERED 数据路径:OFI 仅由交易 tick 派生,config.subscribe_trade_ticks 现在为 TRUE,因此 on_trade_tick 真正运行;5 分钟 taker_ratio / 指标镜像已完全移除,无回退机制(tick 缺失 -> OFI 为零 -> 无交易,大声失败)。为应对手续费坟墓证据(98% 手续费 / 毛收入,0.025% 平均交易),选择性和目标被提高:ofi_threshold 0.35 -> 0.45,min_ticks 10 -> 300,take_profit 0.4% -> 0.6%(净 ~0.5%),止损 0.3% -> 0.35%,持有上限 30 -> 20 根 Bar,且 min_notional 设为 BTCUSDT 的真实 100 USDT 下限。仅参数值和订阅标志发生变化——通过 1-3 层的信号、tick 热路径、仓位和出场结构保持不变。HONEST CAVEAT(参见建议):目录当前仅持有单日 BTCUSDT.BINANCE 个交易 tick,即 2026-05-06,而 ~29 天的原始 aggTrades 未转换地存放在 data/supplementary/agg_trades/BTCUSDT(2026-05-06..2026-06-03)。由于 check_catalog_availability 仅对其 min_days 时间跨度测试应用于 Bar,数百万过期的 2026-05-06 tick 被算作'充分',因此管道自动收集不会刷新它们,最近的沙盒窗口将在范围内收到零 tick——与第 1 次迭代零交易失败的结构性原因相同。即便窗口对齐,在 30 天窗口内 ~90M 条 BTC aggTrades 也不太可能在 300s 第 -3 层墙钟内完成重放。

verification_loop:验证失败(第 3 层 — 沙盒回测):未产生交易 使用的 Bar 类型:BTCUSDT.BINANCE-1-MINUTE-LAST-EXTERNAL,已处理 Bar 数:40279 诊断信息:should_enter() 在 40277 个评估 Bar 中返回方向 0 次 -> 你的 ENTRY CONDITION 从未触发。请放宽入场逻辑 / 阈值。 确保你的策略在给定的数据和参数下能产生交易。

实现

BTCUSDT USD-M 永续合约,基于逐笔成交 Tick 订单流失衡的日内多空延续策略。OFI = 在滚动的 60 秒窗口内,(主动买入量 - 主动卖出量)/ 总主动成交量;该指标仅在 on_trade_tick() 中根据 aggTrades TRADE TICKS 计算,并按每秒分桶,使用 O(1) 增量聚合。每 1 分钟 Bar 做出一次决策:OFI >= +0.45 且窗口内至少有 300 个主动成交 Tick 时,开仓 LONG;OFI <= -0.45 时,开仓 SHORT。在达到 0.6% 止盈(扣除约 0.10% 往返主动吃单手续费后净收益约 0.5%)、触发 0.35% 止损或达到 20 根 Bar 的时间止损时离场。仓位按已实现权益的 20% 计算,名义价值严格封顶为 100%,杠杆为 1.0。若没有交易 Tick 到达,OFI 保持 0,策略则保持观望——不会回退到补充流或 OHLCV。

验证结果

验证失败(第 3 层 — 沙盒回测):未产生交易 使用的 Bar 类型:BTCUSDT.BINANCE-1-MINUTE-LAST-EXTERNAL,已处理 Bar 数:40279 诊断信息:should_enter() 在 40277 个评估 Bar 中返回方向 0 次 -> 你的 ENTRY CONDITION 从未触发。请放宽入场逻辑 / 阈值。 确保你的策略在给定的数据和参数下能产生交易。

迭代历史

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

验证失败(第 4 层 — QA 审查)[类别=hypothesis_mismatch]: - [edge_concern] 支持不匹配的证据,不是独立裁定:回测的 5 分钟镜像产物完全蜕变为假设承诺 NOT 成为的那种剥头皮手续费坟墓。手续费是毛收入的 98.03%,avg_trade_return_pct 0.025%(相对于 0.15% 下限和声称的 ~0.3% 净目标),夏普 -6.6,PF 0.425,612 笔交易 / 67 天,换手率 1275。即便重新注册为 5 分钟的吃单流策略,它在此处也是手续费致死的,属于假设本身引用的、被标记为 0-for-7 的吃单流家族。如果改为执行 tick 级别的假设,则必须先收集 aggTrades 历史,以便能够测试实际机制。 - DATA-SOURCE / MECHANISM SUBSTITUTION 与预先注册的假设不符。假设的 #1 约束性设计选择及其全部新颖性('FIRST 微结构 / 交易 tick 策略')在于 OFI 来自 aggTrades TRADE TICKS,且 EXPLICITLY 排除了补充的吃单流('NOT 那些历史稀薄的补充 taker_ratio/OI/清算流,它们最终以 0-for-7 失败')。第 2 次迭代恰恰做了假设排除的事:_ensure_flow_series() 从 5 分钟 taker_ratio 和指标镜像中读取 OFI,且 config.subscribe_trade_ticks 为 FALSE,因此 on_trade_tick 在回测中从未运行。被测试的产物是 5 分钟聚合的吃单流策略——正是假设命名为已死亡的那个家族——而非预先注册的 tick 级别优势。这是一次为规避第 1 次迭代零交易失败而在代码内单方面做出的数据源改写。 - 订阅标志不一致(检查 12):策略覆盖了 on_trade_tick() 但 subscribe_trade_ticks 为 false,因此 tick 处理函数从不被调用,tick OFI 路径在每次回测中都是死路。这是刻意的(1 天的 tick 历史未通过数据充分性门槛),但它在机制上确认了假设的核心数据路径已被禁用。

验证失败(第 3 层 — 沙盒回测):未产生交易 使用的 Bar 类型:BTCUSDT.BINANCE-1-MINUTE-LAST-EXTERNAL,已处理 Bar 数:41450 诊断信息:should_enter() 在 41448 个评估 Bar 中返回方向 0 次 -> 你的 ENTRY CONDITION 从未触发。请放宽入场逻辑 / 阈值。 确保你的策略在给定的数据和参数下能产生交易。

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