源文件:research/quant_digests/2026-04-06_1350_l2-10s-drift-aggregation-alpha.md
1m/3m 持仓,而不是逐 tick 硬追,可形成一条可交易的短周期 directional raw alpha。feature_builder.py + model_runner.py + trade_manager.py + Binance Spot WebSocket docs这轮我没有继续补一篇“又一个 pairs / funding / carry 变体”,而是挑了一份 刚更新的、能直接落成完整交易壳 的新 repo:
补充的公开数据/文档口径:
wss://stream.binance.com:9443/ws/btcusdt@depth20@100ms我最后选它,原因很直接:
换句话说,这一轮不是在补“新术语”,而是在补 可直接落回测框架的完整微结构 raw alpha 壳。
---
一句人话:
> 如果买盘/卖盘深度、盘口距离、累积量和短窗 OBI 变化,在连续几个 100ms tick 上都朝同一个方向挤压,那未来 10 秒的 mid-price 更容易朝同向漂移。
repo 里把这件事落成了一个非常直接的预测对象:
BTCUSDTdepth20@100ms L2 流(live)Decrease / Stable / Increase这不是 overlay。 这也不是 regime gate。 它本体就是一条 microstructure directional raw alpha:
因为我们最近已经看过不少:
这些材料多数都告诉你:
> “这个 feature 可能有 edge。”
但 Horizon-10 多走了一步,它直接告诉你:
> “这条 edge 怎么以 10 秒持有期、阈值触发、显式 spread-crossing 的方式被交易出来。”
这对当前 desk 更值钱。因为 bot7 当前优先级本来就不是继续堆“解释型 feature”,而是扩充 可独立复现、可直接落地的策略素材池。
---
feature_builder.py 把实时特征工程写得非常清楚,而且强调 zero allocations per tick。核心是 131 个特征:
[0-39]:20 档 ask/bid 原始量[40]:spread[41]:tick 间时间差(microseconds)[42-121]:每档 price distance + cumulative volume[122-124]:OBI top 5 / 10 / 20[125-130]:短窗时间特征volatility_mid_5svolatility_obi_5sobi_10_delta_1sask_vol_accel_1sbid_vol_accel_1sobi_10_delta_5s翻成人话,它不是只看一个“OBI 大于 0 就做多”的简陋规则,而是在做:
> 盘口厚度、深度距离、失衡、5 秒噪声强度、1~5 秒压力变化的联合读数。
这点很重要,因为它意味着 desk 后续最小实验不一定非得全抄 131 维;也可以先抽出:
OBI_top10spreaddistance_to_mid5s mid volOBI delta 1s / 5s做一版轻量 existence check。
README 写了几组很关键的数据点:
book_snapshot_252025-01 到 2026-0470% train / 10% val / 20% test这些数字不代表它已经被验证成 production alpha;但至少说明:
model_runner.py 不是裸 LightGBM,而是:
LightGBM booster[P(Decrease), P(Stable), P(Increase)]这点对 desk 的价值,比“模型多复杂”更大。
因为短周期方向壳最怕的是:
repo 至少在框架上解决了这个问题:
> 把模型输出变成可设阈值的 calibrated probability。
这让它自然适合做:
trade_manager.py 里最值钱的部分,是把交易落成了一个很诚实的 paper-trade 壳:
P(Increase) >= threshold:LONG,以 asks[0] 入场P(Decrease) >= threshold:SHORT,以 bids[0] 入场这比很多“方向预测论文”更诚实,因为它至少把最基本的成本楔子打进去了:
也就是说,repo 虽然没把 taker fee / 滑点 / queue position 全部算进来,但至少已经避免了最常见的 paper alpha 自欺:
> 拿 mid-to-mid 漂移冒充可交易收益。
---
如果机械照搬 repo 的 100ms 触发,很容易遇到:
所以对我们 desk,更好的读法不是:
> 每个 100ms 有方向就冲。
而是:
> 把连续 10 秒方向概率,聚合成 1m / 3m 的可执行 admission score。
例如:
30s 或 60s 内,统计 P(up) - P(down) 的时间平均;1m bar 执行一次。这一步非常关键。因为它把 repo 的 HFT 壳,翻译成了我们 desk 更能承受的短周期版本。
1m / 3m,5m / 15m 更像聚合或 veto 层我会很诚实地定位:
10s 原生,最适合映射到 1m / 3m5m:可作为持有延展或 regime 聚合层15m:更适合做 execution veto / 交易时段限制,而不是把它硬抬成 15m 主信号所以它是符合用户这轮偏好的:
1m / 3m 的更快高强度 alpha;因为当前素材池里,已经有很多:
但如果你真想把 short-cycle 盘做起来,还差一类材料:
> 从“连续 microstructure pressure”直接映射到“什么时候下单、持有多久、阈值设多高”的完整壳。
Horizon-10 补的就是这一块。
---
先不要全抄 repo 的逐 tick 模式;我会先写成 desk 版最小壳:
depth20@100ms 取 L2 快照;OBI_top10spreadtop-level volume imbalance5s volatility_midobi_delta_1sobi_delta_5s100ms 产出 P(up), P(down);30s~60s 聚合:agg_score = mean(P(up)-P(down))same_sign_share = share(|P(up)-P(down)| > q and sign same)agg_score > thresholdsame_sign_share > thresholdspread < spread_cap才在下一根 1m 或 3m 开仓。
第一版别复杂化,直接做 3 层:
1 bar / 3 barsP(down)-P(up) 明显翻负(或翻正),提前平如果要更贴 repo 原文,可以先保留一个更短的 direct replication 版:
这版适合作为 existence check。
sizing 不应该只按方向概率大小一把梭。第一版建议:
size ∝ clipped(|agg_score|)1 / spread1 / realized_vol_1mliquidity_cap也就是:
> 同样强的方向信号,贵的 spread、小的盘口、炸的短窗波动,都应该自然缩仓。
这条 alpha 最怕的不是“方向错一点”,而是:
所以风控至少要盯:
spread capbook top depth floorsignal age limitno-overlap / cooldownrepo 已经做了最基础的一步:
但 desk 真回测时,至少还要再补:
尤其是 10 秒 alpha,不把 fee / slippage 写进回测,几乎等于没测。
---
repo 训练部分写的是:
book_snapshot_252025-01 到 2026-04这说明作者训练底层使用的是商业归档数据。
但对我们来说,这不构成阻碍。因为它的 live inference 口径本身就是 Binance 公共 WebSocket:
btcusdt@depth20@100ms所以 desk 最小实验完全可以改成:
这条线的数据更新频率就是 100ms,所以它天然服务的是:
10s30s1m3m如果硬往 15m 上套,它更像:
实验对象: BTCUSDT
数据源: Binance public depth20 websocket
更新频率: 100ms
最小特征子集:
最小标签:
10s mid return sign0.5 bps最小回测壳:
1m1~3 bars这已经足够回答:
> “这条 10 秒级微结构方向 edge,能不能翻译成 desk 可用的 1m/3m raw alpha?”
---
目的:先回答“原生壳本身行不行”。
depth20@100msP(up) >= t 做多,ask entryP(down) >= t 做空,bid entry10s 后 mid exitt = 0.45 / 0.50 / 0.55 / 0.60关键看:
目的:回答“如何从 HFT shell 翻译到 short-cycle shell”。
1m30s 聚合开仓60s 聚合开仓如果聚合版的:
那就说明这份 repo 最值钱的,不是 131 个 feature,而是 microstructure persistence admission shell。
目的:别把它锁死成“只对 BTC 有用”。
ETHUSDT / SOLUSDT如果 ALT 上 alpha 更脆弱,那这条线就更适合作为:
---
因为它的本体不是“LightGBM 好不好”,而是:
> order-book pressure 是否能在未来 10 秒给出可交易方向漂移。
模型只是实现方式。 alpha 本体是 短窗盘口压力 → 短窗价格漂移。
因为它满足 bot7 当前优先级里最值钱的那一档:
更重要的是,它不是又一篇“解释为什么市场会动”的材料,而是已经告诉你:
我不会把它吹成“已经验证的 production alpha”,因为 README 没给出足够完整的样本外 PnL / Sharpe / turnover / fee 后归因表。
所以更准确的定位是:
> 一份高信号、可快速复现、能直接变成最小实验的 repo-based raw alpha 候选。
这正符合本轮任务要求。
---
我建议下一步直接分成 两层 verdict:
10s 壳1m / 3m admission scorespread cap / cooldown / no-overlap / fee如果第二层比第一层更稳,说明:
> 这份 repo 对 desk 最值钱的,不是“高频模型”四个字,而是“连续高置信 microstructure pressure 的短周期聚合交易壳”。
<https://github.com/ma8044/horizon-10>
<https://raw.githubusercontent.com/ma8044/horizon-10/main/README.md>
backend/app/engine/feature_builder.py<https://raw.githubusercontent.com/ma8044/horizon-10/main/backend/app/engine/feature_builder.py>
backend/app/engine/model_runner.py<https://raw.githubusercontent.com/ma8044/horizon-10/main/backend/app/engine/model_runner.py>
backend/app/state/trade_manager.py<https://raw.githubusercontent.com/ma8044/horizon-10/main/backend/app/state/trade_manager.py>
<https://developers.binance.com/docs/binance-spot-api-docs/web-socket-streams>