为什么要对沪市上交所level2逐笔成交数据的重建, 3 步秒变深市格式

1
13310784971
· 更新于 2025年11月22日
136 阅读 0 点赞 0 评论

上交所逐笔数据“重建”手册

(让沪市数据 ≈ 深市格式,一份可直接回测的逐笔流水)


1 为什么要重建?

痛点 上交所原生逻辑 造成的后果
1. 委托数量“缺斤短两” 订单一旦“即时成交”就先发成交、后补委托,委托回报里的 Balance剩余量而非原始申报量。 ① 全成 → 完全没有委托记录
② 部成 → 先看见 200 成交,再看见 800 委托,原始 1000 被拆成两段
③ 根本不知道“最初到底报了多少”
2. 主动方订单号失踪 主动成交时,主动方的 OrderNo 在委托流里不存在(买方主动就缺买方号,卖方主动就缺卖方号)。 无法用 OrderNo 把成交和委托串联起来
3. 撤单只在委托流 撤单仅出现在委托流 (OrdType=D),成交流里没有任何痕迹 与深市不一致,回测时“撤单成交量”丢失

深交所没有以上三条坑,因此要把沪市数据“还原”成深市风格,投研与实盘才能用同一套代码。


2 30 秒看懂“重建”总思路

  1. 补原始委托:把“先成交、后委托”的碎片子单合并,恢复原始申报量
  2. 补撤单成交:把委托流里的撤单记录,转成一笔“价格为 0”的撤单成交插到成交流,保持时间序。
  3. 字段对齐:统一时间、序号、买卖标志等命名,与深市完全一致。

3 Step-by-Step 操作

3.1 在成交流里“造”撤单记录

来源 条件 如何映射成“撤单成交”
委托流 OrdType == 'D' 直接复制字段,按以下规则硬编码:
深市风格成交字段 取值逻辑
TradeTime TransactTime(委托时间)
TradePrice 0(无意义)
TradeQty Balance(撤单量)
TradeIndex 0(无意义,排序用 BizIndex
ChannelNo 与原成交一致
TradeBSFlag 'N'(未知)
BizIndex 原委托 BizIndex(保证时序)
订单号 买方撤单 → BuyOrderNo = BizIndex, SellOrderNo = 0
卖方撤单 → SellOrderNo = BizIndex, BuyOrderNo = 0

结果:撤单像普通成交一样出现在成交流,成交量=撤单量,价格为 0,一眼可识别。


3.2 修正委托流本身

① 新增委托(原单完全找不到)

字段 修正值 说明
TransactTime 对应成交的 TradeTime 用成交时间作为“委托时间”
OrderNo 0 无意义
Price 对应成交的 TradePrice 用成交价当委托价
OrderBSFlag 主动买→'B' 主动卖→'S' 由成交方向反推
OrdType 'A' 明确是新增
OrderIndex 0 无意义,排序用 BizIndex
BizIndex 对应成交的 BizIndex 保证与成交同序号,方便对齐

② 修改委托(已有委托,但数量不对)

  • 保留原字段不动,仅把 BizIndex 与对应成交的 BizIndex 互换,确保后续能一对一关联。

3.3 数量合并算法(流程图文字版)

for  each 即时成交单
    1. 按 OrderNo + 买卖方向 聚合
    2. 找到所有“先成交、后委托”片段
    3. 原始申报量 = 成交qty + 后续委托Balance
    4. 把委托记录的 Balance 改成“原始申报量”
    5. 删除重复的碎片委托,只留一条

4 最终输出格式(与深市 100% 兼容)

成交流(Trade)

字段 说明
TradeTime 成交时间(撤单用委托时间)
TradePrice 成交价(撤单为 0)
TradeQty 成交量(撤单为撤单量)
BuyOrderNo 买方订单号
SellOrderNo 卖方订单号
TradeBSFlag 'B'/'S'/'N'
BizIndex 业务序号(时序关键)

委托流(Order)

| 字段 | 说明 |
|---|---|---|
| TransactTime | 委托时间(即时成交的用成交时间) |
| OrderNo | 订单号(即时成交的填 0) |
| Price | 委托价(即时成交的用成交价) |
| Balance | 原始申报量(已合并碎片) |
| OrderBSFlag | 'B'/'S' |
| OrdType | 'A'新增 / 'D'撤单 |


5 数据源 & 实盘接入

  • 已支持沪市逐笔重建的商用 API:
    stockapi.com.cn (含示例代码,券商实盘权限开通指引)

  • 主流券商均可申请量化终端,门槛从 0 元到 300 万不等,重建后的数据可直接灌入 Python/C++ 策略,投研与实盘零差异

评论 (0)

0 / 1000
钉钉二维码
添加钉钉联系技术
飞书二维码
添加飞书联系技术
公众号二维码
关注微信公众号获取更多资讯