成交之前,先理解你在队列中的位置
把队列假设与撤单/新增消息比转换成可失败的测试:先区分笔数、平均尺寸与总量,再检验前缀不变性和样本外策略排序。
一张限价单的生命,不止是价格
下单决策、请求发送、交易所确认、进入队列、部分成交、撤单请求与撤单确认,是不同的事件。回测如果把它们折叠为同一个时刻,就可能忽略关键执行成本。
本文给出一个事件回放的设计方法。具体撮合优先级应以目标交易所与合约的规则为准,不能默认所有市场都使用相同机制。
先说明你拥有什么数据
逐笔委托数据与聚合档位快照支持的判断精度不同。如果无法恢复真实队列位置,就应在结果中明确使用了估计。尤其不能把所有档位减少都算作自己前面的撤单。
并排运行三种成交假设
- 乐观情形:使用较有利的队列消耗假设,作为敏感性比较。
- 基准情形:依据可观测数据和样本校准队列变化。
- 保守情形:不给不可识别撤单带来优先级改善,并加入延迟压力。
如果一个模型只在乐观情形下成立,下一步研究的重点应是补齐执行证据。平均收益之外,还应比较三种情形的成交数量、持仓时间与成交后价格变化。
撤单也有未决状态
撤单请求发出,并不表示订单立即失效。设计回放时应保留“待撤”状态,并允许在确认前发生成交;随后根据回报调整库存,防止重复计入或遗漏。
新增研究推进 · 把撤单/新增消息比拆成三种量
Yueshen 的队列不确定性模型把“新增后很快撤单”作为可检验的深度过冲机制,并区分撤单/新增的笔数比与平均尺寸比。这两个量不能用一个“撤单量占比”替代;模型是同价位、静态一跳和特定修正时点下的机制预测,不是对所有市场消息的普适解释。
对一个预先登记的同价位、同方向消息簇,令 A、C 为新增与撤单笔数,V+、V- 为对应数量(均只计入定义好的窗口和可链接消息),可同时报告:
r_qbar = (V- / C) / (V+ / A)
r_V = V- / V+ = r_N × r_qbar
其中 r_qbar 是“每笔撤单平均尺寸 ÷ 每笔新增平均尺寸”,不是总撤单量与总新增量;三者的乘法恒等式是账本检查,不是额外的经验结论。分母为零、跨窗口无法链接或消息数量不完整时,保留为缺失并报告原因,不能填零。
在 Yueshen 的同质大市场近似中,设初始新增深度为 yhat、修正后的盈亏平衡深度为 y、队列中使阈值被跨越的订单序号为 k、新增笔数为 n,并令 alpha = yhat / y - 1。其有限样本关系可写为:
r_qbar = [ (yhat - y) / (n - k + 1) ] / (yhat / n)
= [ alpha / (1 + alpha) ] / r_N
r_V = r_N × r_qbar
当同质市场规模趋于大时,r_N -> alpha/(1+alpha)、r_qbar -> 1;存在快慢做市者时,模型预测 r_qbar < 1,且随快流动性提供者占比 psi_F 增加而上升。这里的 k、yhat 与 y 在真实聚合盘口中通常不可直接观测,所以这些式子用于规定可失败的映射和边界,不得当作已校准参数。原始机制与边界见 Yueshen · Queuing Uncertainty of Limit Orders。
将机制变成可证伪的消息事件研究
- 定义簇与窗口:按价格、方向和短时间阈值预先聚合同一层的新增消息;在交易所接受时间或可验证的回报时间上定义
t0,在固定的H内跟踪撤单、成交和改价。能用订单 ID 链接时逐笔核对;只有聚合盘口时,另设“无法链接”类别,不把所有深度减少归为撤单。 - 并列三个结果:对每个簇记录
r_N、r_qbar、r_V,同时给出按簇分布与按总暴露加权的结果。簇内若先发生部分成交,再发生撤单,应按事件顺序拆分剩余量,避免把已成交数量重复当作撤单。 - 检验方向而非套结论:在相同价差、初始深度、波动、OFI、时段、场所、订单年龄和可观测延迟分层后,预先登记“更不利的成交后价格变化是否伴随更低的
r_N”以及“可观测的快延迟占比是否伴随更高的r_qbar”。前者对应模型中更严重逆向选择压低撤单/新增笔数比的方向,后者只在有可靠延迟或参与者标签时才可检验;没有这些数据时只能报告不可识别。 - 反事实与不确定度:使用时间分块或按事件簇聚类的区间,加入伪簇/非重叠窗口作为负控;同时报告盘口缺包、无法链接和跨时段样本比例。若关系在随机伪簇中同样存在,先解释选择和时段混杂,不得称为队列机制证据。
本站没有运行上述消息簇事件研究,也没有观测到真实队列序号、快慢做市者占比或交易所回报来校准 k、yhat、y。当前新增内容的实质是把原始理论的两类可观测预测(笔数比与平均尺寸比)转换成不混淆的三种指标、账本恒等式和失败条件;它不构成国内期货的实证结论或盈利承诺。
研究推进 · 先验证模拟器,再评价策略
以下是本站新增的实验设计,不是已完成的本地实证。原文要求并排比较队列假设,但仍缺少一个前置问题:模拟器是否把未来信息带进过去,或者用自己生成的成交证明自己正确?需要把观察到的市场事件、模型推断的队列状态、模拟成交与真实订单回报分别保存。聚合盘口匹配只能检验盘口层,不能单独证明真实队列位置和成交概率准确。
第一道门:历史前缀不变性
冻结代码、参数、训练结果、随机种子和同时间戳事件顺序。选择截止事件序号 k,构造两条在 k 及以前完全相同、之后不同的数据流。逐一比较两次运行在 k 及以前的特征、动作、队列估计、成交回报和库存,它们应完全相同;数值计算若使用容差,应预先声明。用于评价的未来 Markout 标签不参加这项比较,因为标签本来依赖未来。
O:当时可知的状态、订单动作、成交与库存
这里的等式是因果回放应满足的必要条件,不是充分的真实性证明。只有交易所时间相同而接收顺序不同的事件,不算同一信息前缀。离线标准化、全日统计量、整段插值和预先读取后续快照都可能破坏该条件。测试时既运行截断数据,也替换后缀并维持共同前缀的随机数;禁止借文件总长度改变初始状态。若失败,先定位第一处差异,不再解释策略收益。
第二道门:最小事件样例与账本约束
- 构造前方排队、主动成交、无法定位的撤单、部分成交、档位离开可见深度、待撤成交、确认后失效等最小序列,手算预期状态转换。
- 任何订单的累计成交不得超过有效订单量;撤单确认前仍按有效订单处理,确认之后不得产生新的交易所成交事件。迟到回报应按原成交时刻对账,不能误删。
- 同一份市场成交量不能既完整消耗前方队列,又再次完整分配给自己的订单。多张自有订单共享队列时,也不能各自独占全部可用成交量。
- 固定种子回归用于发现代码变更,不能替代无前视测试和真实订单校准;通过次数、失败次数和跳过次数应分开报告。
第三道门:检验策略排序是否依赖队列假设
预先冻结一个与数据和撮合规则相容的模型集合 Θ,再把候选策略 A 与基线 B 放在相同样本外时段、费用和风险约束下比较。每个队列模型 θ 都要重新运行完整策略,不能只替换成交标签而保留原库存和后续动作。
敏感性区间 = [minθ∈Θ Δ(θ), maxθ∈Θ Δ(θ)]
J 必须是统一成本口径的策略评价量,并与库存路径和退出规则相容。这是所选模型集合上的敏感性区间,不是置信区间,也不是包含真实收益的数学保证。若该区间跨零,说明候选优劣依赖未识别的队列假设;若全为正,也只能说明在所选集合内排序稳定。还需分别报告时间分块或聚类的不确定度,不能把模型差异与抽样误差混为一谈。
并列输出任意成交概率、成交数量、成交条件 Markout、库存尾部和净财富变化。队列变化会改变被选入成交样本的订单,也会改变后续库存与报价,所以“更保守的成交假设”并不必然产生更低收益,不能把少成交自动当作收益下界。相关会计边界见成交率与库存财富研究。
本站尚未运行上述测试,也没有用真实订单回报完成本地队列校准。当前推进是把“队列不确定性”转换成明确的失败条件和实验顺序:先验因果性,再验状态与账本,最后检验样本外排序。它连接成交概率、成交条件质量、库存路径、执行延迟与样本外验证,不构成盈利结论。
参考文献与研究边界
- Huang, Lehalle & Rosenbaum · The queue-reactive model
- DaruFinance quant-mm-simulator · queue state implementation
- DaruFinance quant-mm-simulator · fill logic
- DaruFinance quant-mm-simulator · queue tests and skip condition
- Yueshen (2025) · Queuing Uncertainty of Limit Orders
本文为研究与教学笔记,示意数据不代表实盘表现,未进行实盘绩效验证。