数据与算法

金融高频数据微观结构:订单簿背后的流动性博弈逻辑

2025年4月7日,E-迷你标普500期货主力合约成交量较第一季度均值上升超过99%,订单簿深度却较前一周下降68%。…

金融高频数据微观结构:订单簿背后的流动性博弈逻辑

这两个数据同时出现。结论只有一个:成交量增加,不代表流动性改善;账面挂单增加,也不代表订单可以被稳定执行。

高频数据分析的核心,不是读取盘口上有多少数量,而是判断这些数量能否在价格变化前后持续存在。需要区分报价、排队、撤单、成交和价格冲击。否则,回测中的中间价收益率会系统性高估真实结果。

订单簿不是静态表格。它是一个持续更新的事件流。

订单簿的数据分层:L1、L2、L3不是同一类信息

限价订单簿通常分为L1、L2和L3三个层级。三者的数据粒度不同,能够支持的模型也不同。

数据层级主要内容可以分析的问题主要限制
L1最优买价、最优卖价、买卖档量点差、盘口方向、基础报价状态无法还原深层队列和订单事件
L2多档价格、聚合数量、委托笔数盘口不平衡、深度变化、价格压力同一价位的订单身份被聚合
L3逐笔订单事件、订单编号、挂单与撤单排队位置、订单生命周期、撤单行为数据量大,重建成本高,依赖交易所事件规则

L1:只能看到最优报价

L1提供买一价、卖一价,以及对应的数量。由此可以计算:

  • 买卖价差:Ask − Bid;
  • 中间价:\((Ask + Bid) / 2\);
  • 最优档不平衡:\((Q_{bid}-Q_{ask})/(Q_{bid}+Q_{ask})\);
  • 报价更新频率;
  • 买卖价差的短时扩张与收缩。

L1适合构建低复杂度的执行模型。它可以用于估计即时交易成本,也可以用于检测报价是否频繁跳动。

但L1没有深度信息。买一档有100张合约,不代表买方在二档、三档仍然存在足够数量。主动卖单一旦穿透买一,实际成交价格可能迅速滑移。

因此,使用L1计算策略收益时,至少要加入:

1. 半点差成本;

2. 订单方向;

3. 预计成交数量;

4. 报价更新延迟;

5. 未成交订单的撤回规则。

只使用中间价计算收益,得到的是价格观测结果,不是交易结果。

L2:提供深度,但仍然缺少事件顺序

L2展示多个价格档位上的聚合数量和委托笔数。

这能支持订单簿不平衡分析。常见做法是对前几档进行加权:

\[

I_t = \frac{\sum_{i=1}^{n}w_i Q_{bid,i,t}-\sum_{i=1}^{n}w_i Q_{ask,i,t}}{\sum_{i=1}^{n}w_i Q_{bid,i,t}+\sum_{i=1}^{n}w_i Q_{ask,i,t}}

\]

其中,\(Q_{bid,i,t}\)和\(Q_{ask,i,t}\)分别是时刻\(t\)第\(i\)档的买卖数量,\(w_i\)是档位权重。距离最优报价越远,权重通常越低。

L2能回答以下问题:

  • 买方还是卖方在前几档占据更大数量;
  • 深度是否集中在最优价附近;
  • 价格移动前,哪一侧先出现撤单;
  • 点差扩大时,深度是否同步下降;
  • 成交量增加时,盘口是否被快速消耗。

但L2的数量是聚合值。一个价位上的100张委托,可能由一个订单组成,也可能由数百个订单组成。两种结构的排队特征完全不同。

另外,L2通常无法直接区分:

  • 新增委托;
  • 主动撤单;
  • 成交导致的数量减少;
  • 订单修改;
  • 同一订单被拆分后的多次事件。

如果数据没有事件级别,订单簿变化只能被当作结果观察,不能直接解释成交易行为。

L3:事件流才是排队模型的输入

L3提供逐笔订单事件。常见字段包括:

  • 订单编号;
  • 事件类型;
  • 价格;
  • 数量;
  • 时间戳;
  • 买卖方向;
  • 新增、成交、撤单或修改状态。

Nasdaq ITCH、CME MDP 3.0等逐笔市场数据接口,能够支持更细粒度的订单簿重建。具体字段和事件语义由交易所协议决定,不能跨市场直接复用。

L3的核心价值是估计Queue Position,也就是订单在同一价格档位中的排队位置。

假设某价格档位有以下事件:

1. 先进入多个买单;

2. 随后新增订单插入队列末端;

3. 前方订单部分成交;

4. 部分订单被撤回;

5. 主动卖单持续消耗该价位。

如果只有L2,只能看到数量从大变小。使用L3,才能判断数量减少究竟来自成交还是撤单,也才能估计被动挂单的实际成交概率。

被动做市策略的关键不是预测价格方向,而是估计:

\[

P(\text{成交}\mid \text{排队位置、订单流、撤单率、价格状态})

\]

这要求事件顺序正确。任何时间戳排序错误,都会直接污染排队模型。

订单簿的最小有效单位不是价格档位,而是带有时间顺序的订单事件。

流动性幻觉:账面深度为什么会失效

流动性至少包含三个维度:

  • 报价是否存在;
  • 数量是否足够;
  • 成交后价格是否稳定。

账面深度只覆盖第二个维度,而且通常是瞬时观察值。

挂单数量不等于可执行数量

订单在簿上存在,不代表它会等待到成交。高频机构大量使用“限价挂单+主动撤回”的方式调整报价。撤单并不主要由市价剩余转撤回一类指令驱动。限价单在全市场委托结构中占据主导,动态撤单才是盘口快速变化的重要来源。

因此,深度数据至少需要配合以下指标:

  • 委托新增速度;
  • 撤单速度;
  • 成交速度;
  • 委托存活时间;
  • 撤单与成交的比例;
  • 深度在多个时间窗口内的稳定性。

可以将某价格档位的订单存活时间记为:

\[

T_{life}=t_{remove}-t_{add}

\]

如果某一档位的数量很高,但订单存活时间极短,那么这部分深度对被动成交的贡献有限。

相反,数量不高但存活时间稳定、成交占比高的报价,可能具备更高的实际执行价值。

账面深度与有效深度

可以把盘口深度拆成两部分:

\[

D_{book}=D_{stable}+D_{transient}

\]

其中:

  • \(D_{stable}\)表示在观察窗口内持续存在,并且具有成交记录的深度;
  • \(D_{transient}\)表示快速新增、快速撤回,或者在价格跳动前消失的瞬时深度。

实盘执行更接近\(D_{stable}\),而不是直接使用\(D_{book}\)。

一个简单的有效深度估计可以使用存活权重:

\[

D_{effective}=\sum_i Q_i \cdot w(T_{life,i}) \cdot w(P_{fill,i})

\]

这里的权重不应通过单一经验常数固定。需要在不同品种、不同交易时段、不同波动状态下重新估计。

2025年4月的异常样本

2025年4月7日,E-迷你标普500期货出现成交量较第一季度均值上升超过99%、订单簿深度较前一周下降68%的组合。

这不是数据冲突。高成交量与低深度可以同时出现。

逻辑如下:

1. 波动率上升;

2. 主动订单增加;

3. 报价方缩短挂单存活时间;

4. 前几档委托被快速消耗;

5. 订单不断重挂,但实际可承接数量下降;

6. 成交量增加,价格冲击扩大。

在这种状态下,盘口数量会频繁重置。静态快照可能显示深度恢复,但逐笔事件会显示订单快速撤回。两种数据并不矛盾,只是观察层级不同。

深度稳定性比深度绝对值更重要

可以将某档位的深度稳定性定义为观察窗口内的持续比例:

\[

S=\frac{\text{持续存在的有效数量}}{\text{观测到的总挂单数量}}

\]

这不是交易所标准指标,而是建模时可以使用的统计量。需要明确分母、观察窗口和有效数量定义。

在低波动阶段,较厚的盘口通常意味着较低的即时冲击成本。但这不是普遍规则。极端行情中,报价方的风险约束改变,订单存活时间下降,深度的预测能力会降低。

因此,不应把盘口厚度直接作为流动性代理变量。至少还要加入撤单率、点差、成交强度和价格冲击。

高频撤单博弈:限价单如何改变订单簿状态

快速撤单不是一个单独的策略标签。它可能对应多种行为:

  • 价格移动前撤回旧报价;
  • 重新平衡买卖两侧库存;
  • 避免被主动订单成交;
  • 更新报价位置;
  • 维持更优价位;
  • 响应其他市场的价格变化。

不能仅凭撤单速度推断交易目的。数据只能证明事件发生,不能直接证明主观意图。

撤单率的统计定义

设某时间窗口内新增限价单数量为\(A\),撤单数量为\(C\),成交数量为\(F\)。可以定义一个基础撤单比例:

\[

R_{cancel}=\frac{C}{A+C}

\]

也可以将数量替换为合约数:

\[

R_{cancel}^{vol}=\frac{V_C}{V_A+V_C}

\]

两种定义反映不同问题:

  • 订单笔数适合分析订单生命周期和事件频率;
  • 委托数量适合分析盘口容量变化;
  • 成交数量适合分析真实消耗速度。

不能混用。

如果一个机构把大订单拆成大量小订单,笔数口径会放大事件频率。若只看数量,又可能忽略拆单行为和排队结构。

五秒窗口的含义

高频订单簿分析中,5秒是常见的短时窗口。它足够短,可以观察报价撤回和重建;又比单个撮合事件稳定,适合计算局部统计量。

在5秒窗口内,可以计算:

  • 新增挂单数量;
  • 撤单数量;
  • 主动买成交量;
  • 主动卖成交量;
  • 点差均值与最大值;
  • LOB不平衡的变化;
  • CVD的增量;
  • 价格变动幅度;
  • 有效深度变化。

但5秒不是固定自然常数。对于不同市场,事件频率差异很大。股票、股指期货和加密资产的订单更新机制不同。窗口应通过自相关、成交密度和策略持仓周期确定。

撤单与价格跳跃的顺序关系

研究撤单是否具有预测能力,不能只计算撤单率和未来收益的相关系数。需要保留事件顺序。

一个基础事件序列可以拆成:

1. 某侧深度下降;

2. 另一侧出现主动成交;

3. 最优价位被消耗;

4. 点差扩大;

5. 中间价移动;

6. 新报价重新进入订单簿。

如果先发生主动成交,再发生价格移动,说明盘口可能是被成交消耗。如果先发生大量撤单,再发生价格移动,说明价格变化可能与可见深度撤回有关。

这两种路径的执行含义不同。

可以定义事件到价格移动的时间差:

\[

\Delta t=t_{\text{price move}}-t_{\text{event}}

\]

然后按事件类型分组统计。不要把所有撤单合并后再计算收益。聚合会破坏因果顺序。

CVD与盘口不平衡必须结合使用

CVD,即累积成交量差,通常表示主动买成交量与主动卖成交量的累计差值:

\[

CVD_t=CVD_{t-1}+V_{buy,t}^{aggressive}-V_{sell,t}^{aggressive}

\]

LOB不平衡描述挂单结构。CVD描述已发生的主动成交。两者是不同变量。

常见组合有四类:

LOB不平衡CVD变化可观察状态
买方增加主动买持续增加买方挂单和主动成交同时占优
买方增加主动卖持续增加买方挂单可能被动承接,需观察消耗速度
卖方增加主动卖持续增加卖方深度与主动卖成交同步扩大
卖方增加主动买持续增加卖方挂单可能吸收主动买单,价格反应取决于成交后的深度

不能把第一类直接等同于上涨,也不能把第四类直接等同于下跌。价格结果取决于订单簿的补充速度、成交位置和后续撤单。

VPIN与订单流毒性:识别逆向选择风险

订单流毒性描述流动性提供者被信息更充分的交易者持续成交的风险。常见测量工具是VPIN,即基于成交量同步的订单流毒性概率指标。

VPIN的核心不是时间分桶,而是成交量分桶。

为什么使用成交量分桶

固定时间窗口存在一个问题:不同时间段的成交量差异很大。

在低成交时段,1分钟内可能几乎没有成交;在高波动阶段,同样的1分钟可能包含大量订单。使用固定时间桶,样本的市场活动强度不一致。

成交量同步分桶的基本步骤是:

1. 设定每个成交量桶的目标数量;

2. 按成交顺序累计成交量;

3. 达到目标数量后形成一个完整桶;

4. 判断桶内主动买卖成交量;

5. 计算订单流失衡;

6. 对多个成交量桶进行滚动聚合。

单个成交量桶的不平衡可以写为:

\[

O_i=\left|V_{buy,i}-V_{sell,i}\right|

\]

归一化后:

\[

I_i=\frac{|V_{buy,i}-V_{sell,i}|}{V_{buy,i}+V_{sell,i}}

\]

VPIN通常对连续桶的不平衡进行平均或滚动处理。具体实现存在不同版本,不能把所有软件输出视为同一指标。

VPIN的解释边界

VPIN高,表示成交量同步后的订单流失衡较高。它可以提示流动性提供者面临更高的逆向选择风险。

但VPIN不是方向预测指标。它不能单独回答:

  • 下一根K线涨还是跌;
  • 哪个价格会成为支撑;
  • 订单流来自哪一类交易者;
  • 交易者是否掌握私人信息;
  • 交易成本一定会扩大多少。

它反映的是成交流的毒性状态,而不是价格方向。

高VPIN状态下,做市模型通常需要重新处理:

  • 报价宽度;
  • 挂单数量;
  • 两侧库存约束;
  • 撤单阈值;
  • 最大持仓;
  • 被动订单的成交概率;
  • 主动对冲的冲击成本。

如果仍然使用低波动阶段的固定报价参数,模型可能持续接收不利成交。

订单流毒性与成交方向分类

VPIN依赖主动买卖分类。分类错误会直接污染指标。

常见分类依据包括:

  • 成交价相对于买一卖一的位置;
  • 成交价相对于中间价的位置;
  • Tick Rule;
  • 交易所提供的主动方向字段;
  • 逐笔成交和盘口事件的联合判断。

当点差扩大、盘口快速跳动或存在跨价成交时,简单的Tick Rule可能失效。高频数据清洗必须保留:

  • 原始时间戳;
  • 交易所事件时间;
  • 本地接收时间;
  • 成交价格;
  • 成交数量;
  • 当时的买卖报价;
  • 事件序列号。

否则,成交方向分类会受到数据延迟和排序误差影响。

VPIN可以测量订单流状态,不能替代价格模型,也不能替代成交成本模型。

从回测到实盘:市场冲击成本的真实测算

回测中的收益通常先从价格序列开始。实盘执行则从订单开始。

两者之间至少存在四类差异:

1. 买卖价差;

2. 成交延迟;

3. 市场冲击;

4. 逆向选择。

中间价收益不等于可实现收益

假设策略在时刻\(t\)生成买入信号,回测以中间价成交:

\[

P_{mid,t}=\frac{P_{ask,t}+P_{bid,t}}{2}

\]

如果实际使用市价买入,成交价格更接近卖一价;如果使用被动买单,则可能无法成交,或者在价格即将不利变化时被动成交。

因此,真实执行价格需要包含成交方式:

\[

P_{exec}=P_{mid}+C_{spread}+C_{slippage}+C_{impact}+C_{latency}

\]

对于卖出,成本方向相反,但绝对成本仍然存在。

回测中不能同时假设:

  • 以中间价立即成交;
  • 始终获得完整数量;
  • 不产生排队;
  • 不引起价格变化;
  • 不遭遇逆向选择。

这组假设在高频策略中通常不成立。

Kyle模型与市场冲击

Kyle在1985年提出了经典的市场冲击与知情交易模型。模型的核心思想是:订单流与价格变化之间存在统计关系,流动性提供者需要根据不平衡订单流调整价格。

实践中通常会估计:

\[

\Delta P_t=\lambda Q_t+\epsilon_t

\]

其中:

  • \(\Delta P_t\)是价格变化;
  • \(Q_t\)是带方向的订单流;
  • \(\lambda\)是市场冲击系数;
  • \(\epsilon_t\)是无法由订单流解释的部分。

\(\lambda\)越高,表示单位订单流带来的价格变化越大。它不是永久常数。低成交时段、波动扩大时段、数据发布时段和流动性切换时段,\(\lambda\)可能显著变化。

平方根冲击模型

对大额订单而言,市场冲击常使用成交量平方根模型:

\[

I(Q)=Y\sigma\left(\frac{Q}{V}\right)^{1/2}

\]

其中:

  • \(Q\)是订单规模;
  • \(V\)是参考成交量;
  • \(\sigma\)是波动率;
  • \(Y\)是经验系数。

该模型表达的是非线性关系:订单规模增加,冲击增加,但不一定按线性速度增加。

模型能作为成本估计的基线,但不能直接用于所有高频订单。高频交易的执行成本还受到以下因素影响:

  • 订单是否分散在多个价格档位;
  • 下单速度;
  • 订单簿补充速度;
  • 同向订单流;
  • 对手方撤单;
  • 交易所撮合规则;
  • 订单队列位置。

平方根模型解决的是规模和波动率问题,不解决排队问题。

被动成交的两种成本

被动订单看似没有支付半点差,但会承担两类隐性成本。

第一类是未成交成本。

信号出现后,订单没有成交。价格向有利方向移动,策略错失机会。

第二类是逆向选择成本。

订单成功成交,但成交后价格继续向不利方向移动。这个订单获得了成交,却承担了信息劣势。

可以定义一个简单的被动执行结果:

\[

R_{passive}=R_{\text{markout}}-C_{\text{inventory}}-C_{\text{cancel}}

\]

其中:

  • \(R_{\text{markout}}\)是成交后固定时间的价格标记收益;
  • \(C_{\text{inventory}}\)是库存持有成本;
  • \(C_{\text{cancel}}\)是撤单和重新挂单成本。

Markout窗口可以设置为成交后若干毫秒、若干秒或若干成交量桶。窗口不同,结论不同。

短窗口主要衡量微观结构逆向选择。长窗口会混入策略方向和市场状态变化。

数据清洗:错误排序会制造错误信号

高频策略首先是数据工程问题。算法复杂度排在后面。

时间戳不能直接当作事件顺序

常见时间字段包括:

  • 交易所生成时间;
  • 数据供应商转发时间;
  • 本地接收时间;
  • 本地处理时间。

这些时间不等价。

如果使用本地接收时间排序,网络延迟可能导致事件顺序错误。某次成交可能先到达系统,但交易所实际上先处理了撤单。订单簿重建结果因此发生偏移。

正确做法通常是:

1. 优先使用交易所事件时间;

2. 使用事件序列号处理同一时间戳;

3. 记录本地接收时间用于延迟分析;

4. 区分数据缺口和真实无事件区间;

5. 对重复事件进行去重;

6. 对异常价格和数量做协议级检查。

合约滚动需要单独建模

期货数据存在到期和换月问题。主力连续合约不是天然可交易的合约。

如果直接拼接不同合约,会产生:

  • 价格跳变;
  • 成交量断层;
  • 订单簿深度不可比;
  • 点差统计失真;
  • 市场冲击参数错误。

高频执行回测应尽量使用具体合约的逐笔数据。若必须构建连续序列,需要明确滚动规则,并将价格连续化与可交易价格分开保存。

连续价格适合研究收益序列。具体合约价格适合执行模拟。两者不能混为一谈。

订单簿重建的基本校验

重建L2或L3订单簿后,至少执行以下检查:

  • 买价不能高于卖价,除非事件正在处理且协议允许短暂交叉;
  • 价格跳变必须能由事件序列解释;
  • 数量不能无原因出现负值;
  • 撤单数量不能超过对应订单剩余数量;
  • 成交数量不能超过可用队列数量;
  • 订单编号生命周期应闭合;
  • 交易日切换时要清空旧状态;
  • 数据缺失区间不能被填充为虚假盘口。

任何一项失败,都可能导致后续不平衡指标、VPIN和冲击模型失真。

建立一个可执行的订单簿分析框架

高频微观结构模型不需要从深度学习开始。先建立可解释的基线。

第一层:行情状态

输入L1和L2,计算:

  • 买卖价差;
  • 中间价;
  • 前N档深度;
  • LOB不平衡;
  • 深度变化率;
  • 点差变化率;
  • 报价更新频率。

这一层回答:当前报价环境是否稳定。

第二层:事件状态

输入L3或尽可能细的逐笔事件,计算:

  • 新增订单强度;
  • 撤单强度;
  • 主动成交强度;
  • 委托存活时间;
  • 队列消耗速度;
  • 队列补充速度;
  • 订单事件的时间聚集性。

Hawkes过程可以用于描述事件自激励:

\[

\lambda(t)=\mu+\sum_{t_i<t}\alpha e^{-\beta(t-t_i)}

\]

其中:

  • \(\mu\)是基础事件强度;
  • \(\alpha\)是历史事件对未来事件的影响;
  • \(\beta\)是影响衰减速度。

可以分别对新增、撤单和成交事件建模。若撤单事件具有明显自激励,说明撤单并非独立发生,而可能在短时间内形成聚集。

Hawkes模型的参数不能跨品种直接复用。不同市场的撮合规则、最小跳动单位和参与者结构不同。

第三层:成交状态

使用CVD、VPIN和主动成交方向,计算:

  • 成交方向不平衡;
  • 成交量同步订单流失衡;
  • 主动成交对盘口的消耗比例;
  • 成交后的短时Markout;
  • 价格冲击系数;
  • 成交量与深度的比值。

这一层回答:当前订单流是否正在消耗可见流动性。

第四层:执行状态

将信号转换为交易结果,加入:

  • 报价延迟;
  • 排队位置;
  • 成交概率;
  • 部分成交;
  • 撤单延迟;
  • 对冲路径;
  • 实际成交价格;
  • 库存约束;
  • 交易费用。

最终回测收益应使用执行价格,而不是理论信号价格。

可以将一次交易拆成完整日志:

1. 信号生成时间;

2. 当时L1和L2状态;

3. 下单时间;

4. 交易所接收时间;

5. 订单进入队列时间;

6. 部分成交时间;

7. 撤单时间;

8. 价格Markout;

9. 总成本;

10. 订单结束状态。

没有这份日志,策略收益无法定位来源。

参数优化:不要让模型学习数据缺陷

高频数据维度高,过拟合风险高。参数数量越多,回测结果越容易被局部市场状态解释。

不要同时优化所有变量

可以按模块分层:

1. 先固定订单簿重建规则;

2. 再估计成交方向;

3. 再确定深度统计窗口;

4. 再估计撤单和成交的事件强度;

5. 最后优化执行和风控参数。

如果数据清洗、特征计算和交易规则同时优化,样本外验证很难判断收益来自哪里。

使用状态分层,而不是单一均值

至少区分以下状态:

  • 低波动、低成交;
  • 高波动、高成交;
  • 点差稳定;
  • 点差扩张;
  • 深度稳定;
  • 深度快速收缩;
  • VPIN低;
  • VPIN高。

在不同状态中,订单簿指标的含义可能不同。

例如,LOB不平衡在深度稳定时可能具有一定解释能力;在深度快速撤回时,同样的不平衡值可能只是瞬时快照。

样本外评估必须包含执行成本

只比较毛收益没有意义。评估结果至少包含:

  • 毛收益;
  • 买卖价差成本;
  • 滑点;
  • 市场冲击;
  • 取消未成交机会成本;
  • 逆向选择成本;
  • 手续费;
  • 成交率;
  • 平均持仓时间;
  • 订单数量;
  • 单位成交量收益。

还要报告不同成交量分位数下的结果。策略可能在小订单规模下有效,规模增加后被冲击成本完全抵消。

参数建议

订单簿模型的参数不应只给一个最优值。更合理的做法是报告稳定区间:

  • 观察窗口;
  • 成交量桶大小;
  • LOB档位数量;
  • 订单生命周期截断值;
  • VPIN滚动桶数量;
  • Markout时间窗口;
  • 最大允许点差;
  • 最大允许撤单率;
  • 单笔订单规模;
  • 最大库存。

如果收益只出现在单一参数点,且相邻参数迅速失效,通常存在过拟合风险。

模型的边界

金融高频数据微观结构模型有明确边界。

第一,L3数据不一定完整。部分市场只提供聚合深度,无法严格重建队列。

第二,订单方向分类存在误差。错误的主动买卖标签会同时影响CVD、VPIN和冲击估计。

第三,交易所规则会改变事件解释。订单修改、优先级调整、隐藏数量和撮合优先级不能使用统一模板处理。

第四,过去的深度稳定性不保证未来仍然稳定。极端波动阶段,报价行为会快速切换。

第五,Hawkes过程可以描述事件聚集,但不自动提供交易信号。自激励参数是统计描述,不是收益保证。

第六,市场冲击系数依赖订单规模、波动率和时间状态。固定成本参数会在高波动阶段失效。

第七,VPIN反映订单流失衡,不等于方向预测。将其直接转成买卖信号,容易把流动性风险指标误用为价格预测指标。

结论:先还原事件,再讨论策略

金融高频数据微观结构的核心,不是寻找一个指标预测下一跳价格。

更可靠的路径是:

1. 使用L1确认最优报价和点差;

2. 使用L2观察多档深度和聚合结构;

3. 使用L3还原订单事件和排队状态;

4. 用撤单、成交、存活时间区分账面深度与有效深度;

5. 用CVD和LOB不平衡分离主动成交与被动报价;

6. 用VPIN监控订单流毒性和逆向选择;

7. 用Kyle模型与平方根冲击模型估计规模成本;

8. 在回测中加入排队、延迟、滑点和部分成交;

9. 按市场状态进行样本外验证;

10. 用稳定参数区间替代单点最优参数。

订单簿是事件系统,不是静态表格。深度是状态变量,不是流动性结论。成交量是结果变量,也不是执行质量证明。

最后需要保留一个限制:即使完整重建L3订单簿,也不能消除数据延迟、交易规则差异和未公开订单信息带来的不确定性。模型可以降低回测偏差,不能把统计估计转换成确定性执行。

参数优化应优先处理三项:成交方向分类、排队位置估计、冲击成本校准。预测模型放在后面。

相关阅读: 交易员决策疲劳应对策略:减少日内无效交易的系统化方案.

常见问题

为什么L2订单簿数据无法准确反映流动性?
L2数据仅展示聚合后的数量,无法区分订单的真实身份、排队位置及存活时间,且无法识别撤单与成交的具体因果关系。
如何区分账面深度与有效深度?
账面深度是瞬时观察值,包含大量快速撤回的挂单;有效深度则通过订单存活时间、成交记录及稳定性权重进行筛选,剔除了瞬时无效的挂单。
VPIN指标高意味着什么?
VPIN高表示成交量同步后的订单流失衡较高,提示流动性提供者面临更高的逆向选择风险,但不代表价格必然上涨或下跌。
为什么回测中不能直接使用中间价计算收益?
中间价仅为价格观测结果,未考虑买卖价差、排队延迟、市场冲击及逆向选择成本,直接使用会导致收益被系统性高估。
高频交易中撤单行为的主要目的有哪些?
撤单可能用于调整报价、重新平衡库存、避免被主动订单成交、响应其他市场价格变化或维持更优价位,不能仅凭撤单速度推断单一交易目的。