跳至正文
全部策略

策略

BTC 流动性扫单延续策略,多空(单一标的 BTCUSDT.BINANCE Perp,TRADE-TICK 驱动——检测扫过挂单流动性的大额主动成交量 BURST,沿扫单方向 WITH 进行短期延续交易;考虑手续费,仅交易大事件,紧止损 / 时间止损,3 参数)

结局: 已放弃

BtcLiquiditySweepContinuationTickDriven

BTC 流动性扫单延续策略,多空(单一标的 BTCUSDT.BINANCE Perp,TRADE-TICK 驱动——检测扫过挂单流动性的大额主动成交量 BURST,沿扫单方向 WITH 进行短期延续交易;考虑手续费,仅交易大事件,紧止损 / 时间止损,3 参数)

假设

一个LONG-SHORT、单品种、EVENT-DRIVEN的微观结构策略,运行于BTCUSDT.BINANCE USD-M永续合约,从trade tape(trade_ticks)交易离散的LIQUIDITY-SWEEP事件——结构上区别于两个待审的连续不平衡微观结构探针(BtcOrderFlowImbalanceContinuation读取数分钟的滚动CVD不平衡;EthOrderBookDepthImbalance读取静态挂单深度偏斜)。本策略读取DISCRETEEVENT:一次性大规模的单边主动成交量burst,在数秒内扫穿静态流动性——紧迫/知情参与者或stop-run级联的足迹。迫使采用微观结构的证据:主流品种上每个bar级方向性edge均已在手续费边界被证伪为噪声(双TF共振族ALL已放弃,Sharpe 0.3-0.45/PF~1.19;趋势篮子Sharpe约0.3),fade/反转已被证伪(横截面反转−48%,VWAP/wick/周末失效),而横截面动量——唯一的真实edge——已耗尽且被execution诅咒。Bar通过聚合破坏sweep信号。机制按WITHsweep方向交易(延续),而非反向(避免已死的fade族):当大规模主动SELLburst扫bids时,近期价格倾向于CONTINUE(该档位曾被防守,现已失守,且级联/stop-run延续);主动买入sweep则镜像。唯一决定性的设计选择是通过EVENTSELECTIVITY实现FEE-AWARENESS:仅burst成交量超过正常HIGH倍的sweep(罕见、大事件)被交易——这些是历史上先于超过约0.10%往返成本的延续出现的事件——因此策略在大行情上低频交易而非scalp(经典微观结构fee-death)。事件驱动设计也使参数保持极简(3),直接攻击overfit这一#1号杀手。填补了未被充分代表的SHORThorizon(9.0%对比10%)以及long_short方向(13.5%)。单品种、单venue(无跨venue基建陷阱)。BTC在Binance上拥有最深、最干净的多年tick tape → 可计量的事件数。增加了过度代表的BINANCE——已接受;tick tape深度是原因,且这是对被鼓励的大单/流动性扫货niche的探索性探针。

已根因定位 Layer-3 零成交问题,并非阈值问题:on_trade_tick 从未被调用,因此不可能有任何阈值触发。沙盒窗口的目录审计(最近约 28 天,2026-08-08..2026-09-05):trade_tick/BTCUSDT.BINANCE 持有 4 个文件 ALL,日期为 2026-05-06(约 1 天,距窗口约 120 天);quote_tick/BTCUSDT.BINANCE 持有 2 条记录(12 KB);唯一带有 ANY Aug/Sep-2026 tick 文件的 *USDT.BINANCE 或 *USD.HYPERLIQUID 永续合约为 PONSUSD.HYPERLIQUID,含 10 秒的成交;目录中最深的行情带(SOLUSDT.BINANCE,8.5M 条成交)于 2026-07-17 终止;且无 BINANCE:BTCUSDT:aggTrades 缓存,回测时不按需采集 ticks(runner.py 仅查询窗口的 catalog.trade_ticks)。故 _volume_sum 保持 0,_intensity() 每次评估返回 0.0,should_enter 正确返回 None 共 40,574 次——这是所设计的「无行情 -> 无成交」契约,模块 docstring 坚守此契约,而非以基于 K 线的影线/成交量代理替代(属于不同的策略边缘)。相较于完全相同的重提交,做了两项诚实的修改,皆非代理:(1)修复了一个真实的潜在缺陷——SIGNAL_VALID_SECONDS 为固定 60 秒,而决策 K 线为 60 秒,因此在一根 K 线早期锁定的扫单在该 K 线收盘时已老约 60 秒,被 '>' 过期测试丢弃;仅在一根 K 线最后几秒内的扫单才可能被交易。有效期现为 max(60 秒, 2 x 观察到的 K 线间隔),由连续 K 线时间戳测量,在任何含 ticks 的窗口上严格提升事件到成交的转化率。(2)一次性 'NO TRADE TAPE' 警告,当过去 NO_TAPE_WARN_BARS 根 K 线且 ticks 为零时触发,置于热路径之外(_roll_bucket 中),因此每 tick 成本不变,iteration-3 超时修复保持完好。配置现显式将 subscribe_trade_ticks 设为 true。Layers 1-2 通过的所有内容保持不变:导入、分桶行情核算、单向性闸门、极性(成交 WITH 扫单)、费率感知括号、时间戳锚定的时间止损、仓位规模。

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

实现

在BTCUSDT.BINANCE USD-M永续合约上的多空、事件驱动型微观结构策略。从其维护的trade tape中,以约1秒为bucket,维护最近burst_window_seconds内成交的taker volume及其有符号(买入减卖出)不平衡。LIQUIDITYSWEEP是指某次burst的成交量超过正常每窗口volume burst_volume_mult倍的EWMAbaseline,且AND至少80%为单边。自上一bar以来最极端的sweep被锁定,并在仍fresh时于下一1分钟bar边界按其方向WITH交易(主动卖出扫bids → SHORT;主动买入 → LONG)。出场包括0.25%止盈目标(约2.5x的0.10%往返)、紧的0.15%止损(0.6x目标,约1.67:1盈亏比)以及锚定bar时间戳的30分钟时间止损。每tick的工作仅为纯算术;所有评估在每个bucket中至多发生一次。无trade tape时其刻意不进行任何交易——不存在OHLCVsweep代理。

验证结果

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

迭代历史

验证失败(第4层 — QA评审): - DATA STARVATION — 策略所需的原始数据(trade_tick)缺失,因此无法被验证。开发者在提交前立即重新核实了覆盖:BTCUSDT.BINANCE trade_tick仍为ONE DAY(2026-05-06,4个文件),上游agg_trades仍仅29天,且on_demand.py仅确保bars,因此tape不会自愈。假设的前提('最深、最干净的多年tick tape')在本目录中不成立。沙盒证实了这一点:29次交易ALL来自唯一的2026-05-06日,附带单日退化artifact(PF 0.08,Sharpe -1.04,偏度-17.0,峰度303,PSR 0.003),而非edge。无代码改动可解决此问题;需由数据工程师执行aggTrades->trade_tick回填——即SAME任务,该任务阻塞了兄弟order-flow假设。 - 代码CORRECT,忠实实现了真正的DISTINCT机制(离散sweep事件,而非兄弟策略的滚动CVD)。on_trade_tick维护一个10秒的burst窗口及运行总和;intensity = volume_sum/baseline,以净方向加符号;当|intensity| >= burst_volume_mult(8x)且AND单边性 >= 0.80时锁定sweep(正确剔除高volume的双向churn)。锁定逻辑合理(10秒的burst在1分钟bar收盘前老化失效;60秒后过期,使用即消耗)。baseline是来自bar volume的EWMA(仅作规模参考;edge仍源自tape,因此无tape即无事件)。延续方向性正确(净主动卖出 → SHORT,净买入 → LONG;WITHsweep方向)。手续费感知出场(0.25%目标,紧的0.6x止损约1.67:1,30分钟bar时间戳时间止损),subscribe_trade_ticks=true与on_trade_tick正确匹配,固定分数仓位带min-notional,NO OHLCV代理。NO代码缺陷。

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

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

验证失败(Layer 1.5 — 假设/配置一致性)[类别=hypothesis_mismatch]: - config.instrument_id 为 SOLUSDT.BINANCE,但假设声明的是 BTCUSDT.BINANCE——这是不同的资产。请按假设所述实现(或由 Research Lead 修订假设)。

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