源文件:research/quant_digests/2026-03-30_0354_vpin-jump-sign-continuation-alpha.md
VPIN 处于高分位、且当前 bar 已经出现可识别的方向性 jump 时,下一到数根 bar 更值得先测 jump-sign continuation,而不是无脑把高 VPIN 只当 veto这次主看两份材料:
_Bitcoin wild moves: Evidence from order flow toxicity and price jumps_, *Research in International Business and Finance*,Volume 81,Article 103163,DOI: 10.1016/j.ribaf.2025.103163。
crypto-microstructure,用 Binance 公共 aggTrades 直接计算 VPIN / OFI / Kyle's lambda / spread / TCA,给了一个不依赖私有数据的可复现骨架。这轮选题之所以值得做,不是因为 VPIN 这个词新,而是因为我们之前更常把它当:
但这篇 2025 论文给出一个更值得 desk 立刻单独拉出来测的读法:
> 高 VPIN 不是只能告诉你“这里危险”,它还可能告诉你“这里有单边知情流正在推进 jump,本身就是可交易的方向性 alpha 素材”。
也就是说,这轮不把 VPIN 当 filter 主角,而是把它升级成: high-VPIN × realized jump sign → next-bar / next-few-bar continuation 的 raw alpha 候选。
base alpha = 高毒性订单流驱动的方向性 jump 延续。
更具体说:
按 OpenAlex 可读摘要,这篇 2025 RIBAF 论文明确写了几件事:
VPIN 与 price jumps 的动态关系;一句话压缩:
> 不是“高 VPIN 所以别碰”,而是“高 VPIN 下已经发生的 jump,更可能不是噪音,而是知情流推动的短窗单边推进”。
之前 desk 更自然的读法是:
这当然没错,但这篇 paper 的值钱之处在于它提示了另一面:
因此,这轮最重要的 reframing 是:
VPIN alone:更像 regime / execution warning;VPIN × realized jump sign:可以升级成 raw alpha。这轮 bot7 的默认优先级是: 可独立复现且可直接落地为完整策略的 raw alpha > 只会解释市场结构的 filter/overlay。
这个主题符合要求,原因有四个:
不是“情绪变差可能更危险”这种模糊命题,而是: high-VPIN + signed jump -> short-horizon continuation。
GitHub 仓库直接走 Binance 公共 aggTrades,无需私有逐笔撮合数据,也不需要 API key。
论文虽然只明确写 high-frequency,没在摘要里披露最终 bar 频率;但 repo 已经提供 1min / 5min / 1h 聚合与 TCA 指标,desk 只要把 jump proxy 和 holding horizon 缩到 1~5 bars 就能做最小实验。
我们最近已经把不少 microstructure 因子写成 filter / veto / execution overlay;这次更值得补的是: 把订单流毒性从“不要做”升级为“在特定条件下该顺着做”。
high-VPIN × realized jump sign 的短窗 continuationtime-zone / day-of-week gateeffective spread / taker cost / slippage proxy 过高,则 veto;VPIN quantile × jump strength / realized vol 缩放;如果只读论文标题,很容易把它归到“市场结构解释文献”。 但对 desk 更值钱的不是解释,而是下面这个可立即实验的命题:
把它写成更交易化的语言:
VPIN;jump proxy;1~3 根 bar 的 follow-through;也就是说,高 VPIN 本身不是 entry;高 VPIN 只是告诉你当前方向性 jump 更不该被自动当成“过热就会反转”。
这比“把 VPIN 继续塞回 risk overlay”更值得先测,因为它直接扩充的是 raw alpha 素材池。
/api/v3/aggTrades1m / 3m / 5mcrypto-microstructurecompute_vpin(trades_df, bucket_size=100000, lookback_buckets=20)order_flow_imbalance(trades_df, freq='1min')compute_spreads(...)maker_taker_analysis(...)仓库里默认示例包含两条很有用的复现口径:
VPIN 默认按 $100k notional bucket 演示;scripts/analyze.py 支持直接输出 spread / vpin / kyle_lambda / ofi / tca。先不要上复杂 jump test。第一版直接做一个诚实的 proxy:
Step A:算 VPIN
VPIN;VPIN_q = pct_rank(VPIN, 20d intraday history)。Step B:定义 jump 在 1m 或 3m bar 上,满足任一即可先记为 jump:
abs(ret_1bar) > 2.0 * rolling_sigma_1m;abs(ret_1bar) > 90%~95% rolling intraday percentile;Step C:入场
long:VPIN_q >= 0.90 且 jump_sign > 0 且 OFI > 0short:VPIN_q >= 0.90 且 jump_sign < 0 且 OFI < 0这里 OFI 不是 alpha 本体,而是确认层: 避免出现“bar 收涨,但订单流其实在净卖出”的假 continuation。
第一版不用复杂 trailing:
1 bar / 3 bars / 5 bars 三档平行回测;VPIN_q 回落到 0.70 以下时提前平仓;这类信号的关键不是拿长波段,而是: 只吃高毒性驱动的短窗 follow-through。
base position:按 1 / realized_vol_20d 做波动率归一;signal scaler:size_mult = min(1.0, max(0, (VPIN_q - 0.90) / 0.10))cost veto:effective_spread 或 taker_cost_bps 位于最近分布的高分位,直接 veto;按优先级:
BTCUSDTETHUSDTSOLUSDT原因很简单:
这是最常见误读。
high VPIN 本身只说明订单流毒性高;高毒性时段往往也是:
所以必须把 repo 里的 spread / TCA / OFI 一起带上, 否则很容易做出“方向对,但净值不赚钱”的假 edge。
这张卡更像:
1m / 3m / 5m 的短窗 impulsive continuation;1h / 4h 的慢趋势。如果持有太久,很可能把“毒性推进”变成“尾声追价”。
这轮不是在补一个新 filter,而是在补一个之前容易被误判成 filter 的 raw alpha:
某些高毒性时刻,恰恰是 jump continuation 最该被优先测的时刻。
对当前 desk,这比继续补一个“高 VPIN 就减仓”的 overlay 更值钱, 因为它给的是一条新的、可短持有、可直接在 BTC/ETH 上开跑的 microstructure raw alpha 线。
按顺序做,不要一上来就堆复杂性:
VPIN quantilecurrent jump sign1/3/5 bars 平均收益、胜率、t-stat、平均最大顺行/逆行3 / 5 / 8 bps 三档;effective spread 与 taker cost 做状态化成本扣减。OFI same-sign vs OFI opposite-signUS session overlap vs Asia hoursweekday 分层如果第一轮实验里:
high-VPIN × same-sign jump 在 1~3 bars 上持续为正、那这张卡就应该从 research digest 升级到 replication queue。
10.1016/j.ribaf.2025.103163Matthew-Carlino/crypto-microstructure别再把 VPIN 只当“别做”的风控灯;这篇 2025 paper 更值得 desk 先测的是:当高 VPIN 与已实现 jump sign 同向共振时,下一到数根 bar 的 continuation 本身就是一条可以独立成卡的 microstructure raw alpha。