沪市逐笔文件演化 (SSE Tick File Evolution)

Definition. 上交所历史数据接口在 2020–2024 的几年里把「逐笔」数据换了两次形态: 最早只有成交 (Tick.csv),2021-04-26 加了独立的委托流 (Entrust.csv), 2024-07-08 把两个文件都停掉、合并成单个 StockTick.csv。 也就是说沪市「委托+成交双流」的干净窗口只有三年多。

三代逐笔文件

文件 启用 停供 字段数 含什么
sh2\...\Tick.csv 2020-02-19 (v1.0.0) 2024-07-08 7 → 11 (2021-04-26) → 12 (加 SendingTime) 仅成交
sh2\...\Entrust.csv 2021-04-26 2024-07-08 10 仅委托 (A 新增 / D 撤单)
sh2\...\StockTick.csv 2023-11-27 至今 12 委托 + 撤单 + 产品状态 + 成交
sh2\...\BondTick.csv 2021-12-01 至今 12 债券逐笔 (布局同 StockTick)
sh2\...\FpTradeTick.csv 2019-07-22 至今 12 科创板盘后固定价格交易 (五档聚合)

2017 年那套 shorder\yyyymmdd\XXXXXX.csv (按证券代码分文件, 字段 OrderNo/OrderNoOld/OrderPrice/OrderQty/OrderStatus/Side/OrderType) 出现在 2017 版结构说明里, 但在后续所有 CSV 接口书版本中都不再出现。它属于早期按代码分文件的接口,与后来的 Entrust.csv 不是同一产品,做长周期回测不要把它当成 Entrust.csv 的祖先。

StockTick 一个字段承载三种语义

Type 字段区分四类记录,字段布局不变但字段含义随类型变:

Type 记录 BuyOrderNo / SellOrderNo TradeMoney TickBSFlag
A 新增委托 只有本方一侧 已成交的委托数量 (3 位小数) B 买单 / S 卖单
D 删除委托 (撤单) 只有本方一侧 无意义 B / S
S 产品状态订单 无意义 无意义 ADD/START/OCALL/CCALL/TRADE/SUSP/CLOSE/ENDTR
T 成交 两侧都有 成交金额 (元, 5 位小数) B 外盘 / S 内盘 / N 未知

TradeMoney 这一列是沪市逐笔数据最容易读错的地方——A 类记录里它不是金额而是已成交数量。 CCALL (收盘集合竞价) 是 1.1.3 版本才加入的状态值,老数据解析器要留意值集扩展。 TradeBSFlag/TickBSFlag 的 N (未知) 值只在成交记录中出现,委托与债券逐笔没有。

时间精度跨文件不一致

文件.字段 精度 示例
StockTick.TickTime 百分之一秒 2015112309163002
Tick.TradeTime 百分之一秒 2015112309163002
Entrust.TransactTime 毫秒 20150803093008000
BondTick.TickTime 毫秒 20150803093008000

数值长度相同 (17 位含日期) 但小数位含义不同,按时间戳全局排序或做同秒内微秒级对齐时, 不先归一化会排错先后。

沪市 Level-2 快照自带撤单统计

sh2\Snapshot.csv 除十档价量外,给出一组委托簿聚合量,做撤单率研究可直接取用:

  • 委托总量 TotalBidQty/TotalOfferQty,加权均价 WeightedAvgBidPx/WeightedAvgOfferPx
  • 总笔数 TotalBidNumber/TotalOfferNumber,价位数 NumBidOrders/NumOfferOrders
  • 成交最大等待时间 BidTradeMaxDuration/OfferTradeMaxDuration
  • 撤单四件套 WithdrawBuyNumber/WithdrawBuyAmount/WithdrawBuyMoney (笔数 / 数量 / 金额, 金额 2 位小数),卖方对称

队列细节只有买一卖一: BidOrders[50] / OfferOrders[50] 是申买一/申卖一前 50 笔订单; 买二到买十只给 BidNumOrders[10] 总委托笔数,不给逐笔。

2021-12-01 (v1.0.3) 快照字段数 194 → 201,新增 AvgPx / ClosePx / MsgSeqNum / SendingTime / WarLowerPx / TradingPhaseCode / NumImageStatus。NumImageStatus 标快照是全量 (1) 还是 增量 (2),可用来判断快照序列能否直接当增量消息拼接。

2025-11-24 起 FpTradeSnap.csv 的委托队列与撤单类字段全部置 0,只有 BidOrderQty / OfferOrderQty 保留。

精度变更清单 (跨年拼接前必查)

生效日 变更
2018-01-02 Level-1 快照价格 NUMBER(3) → NUMBER(4)
2019-07-22 新增 FpTradeSnap / FpTradeTick; 日 K 线加 fp_Volume / fp_Amount
2019-11-14 Level-1 快照、盘后固定价格交易快照、K 线加 AvgPx
2023-06-01 成交金额 2 位小数 → 3 位 (Level-1/2 快照、盘后快照与逐笔成交、日 K 线); 股票期权成交金额 2 位 → 4 位
2026-03-30 新增独立文件 IOPV.csv
2026-07-06 Level-1/2 快照与 K 线的 IOPV 取值调整, NAV 启用 (此前 Level-1 快照 IOPV/NAV 恒为 0)

2023-06-01 那行最容易出事: 同一列 Amount 在该日之前是 2 位小数、之后是 3 位, 不确认直接拼接会让日内均价 / 金额出现 10 倍量级错位。

三套交易阶段编码

场景 字段 编码
Level-1 快照 PhaseCode 8 位定长字符串, 前 4 位有效
Level-2 快照 TradingPhaseCode 语义引 IS124 mktdt00.txt, 不走前一套
盘后固定价格交易快照 TradingPhaseCode 另一套 (INIT/PCALL/POSMT/ENDPT/POSSP)

Level-1 的 PhaseCode 每位含义: 第 1 位 S 启动 / C 集合竞价 / T 连续交易 / B 休市 / E 闭市 / P 停牌 / M 可恢复熔断 (盘中集合竞价) / N 不可恢复熔断 / D 开集合竞价结束到连续竞价开始之间;第 2 位 0/1 能否正常交易;第 3 位 0/1 是否已上市; 第 4 位 0/1 当前时段是否接受新申报。无定义填空格。

三套编码不可互换,跨文件筛时段要分别映射。

对量化研究的直接影响

  1. 可重放订单簿的窗口只有 2021-04-26 – 2024-07-08,且即便如此还有主动方申报行缺失问题 (见 逐笔成交的双向委托引用 (Bid-Offer Order Reference))。
  2. 撤单率研究在沪市不必自己从委托流差分——快照已直接给出撤单笔数/数量/金额。
  3. L1 vs L2 的队列信息不对称: L1 五档无笔数, L2 十档只有买一卖一有逐笔队列。
  4. 做跨 2023-06-01 的面板前先处理金额精度。

与本 wiki 其他概念的连接

引用