上交所历史数据接口说明书 1.0.0–1.1.5 (沪市逐笔/快照 CSV 字段口径)
来源
上交所行情业务部编写、上证所信息网络有限公司发布,CSV 格式,UTF-8,逗号分隔,换行 0x0A。
官方渠道 https://www.sseinfo.com/services/assortment/document/。本次收录收到 6 份原件:
| 文件 | 版本 | 完成日期 | 页数 |
|---|---|---|---|
| sh_011 | 0.6 (文件结构说明) | 2017-11-09 | 46 |
| sh_013 | 1.0.2 | 2021-04-23 | 16 |
| sh_014 | 1.0.3 | 2021-11-29 | 18 |
| sh_015 | 1.1.0 | 2022-10-27 | 20 |
| sh_016 | 1.1.3 | 2024-06-21 | 24 |
| sh_017 | 1.1.5 | 2026-03-27 | 24 |
| sh_014b | 1.1.4 ETF统计数据技术开发稿 | 2024-06-24 | 24 (2026-10-13 联网补归档) |
1.1.1 (2023-05-31)、1.1.2 (2023-12-13)、1.1.4 正式版 (2025-12-01) 三版经联网检索确认 官网与全网均无独立原件 (2026-10-13 实测, 见 Shanghai Stock Exchange (上交所) 的可得性表)。 缺失版本的内容已由后继版本完整承载, 不影响解析。
1.1.4 有两份不同文件:官网 develop 栏的技术开发稿 (2024-06-24, 内容是「L2 行情中增加 ETF 统计数据」) 与变动说明表里记的正式版 (2025-12-01, 内容是「调整部分字段以及参考信息说明」)。
官网有两个文档栏目且不同步: 业务文档 document/interface/ 只挂到 1.1.3_20240621,
行情服务 market/hqywwd/wdzsjk/ 挂到 1.1.5_20260327 —— 要最新版看后者。
三条数据线
| 目录 | 品种 | 快照 | 逐笔 | K 线 |
|---|---|---|---|---|
sh1\yyyymmdd\ |
Level-1 | Snapshot.csv (五档) | 无 | Day.csv / Minute.csv |
sh2\yyyymmdd\ |
Level-2 | Auction.csv / Snapshot.csv (十档+队列) / FpTradeSnap.csv | Tick.csv→StockTick.csv / Entrust.csv / FpTradeTick.csv / BondTick.csv | Day.csv / Minute.csv |
sho\yyyymmdd\ |
股票期权 | Snapshot.csv (五档) | 无 | Day.csv / Minute.csv |
快照间隔 3 秒 (个股) 或 5 秒 (指数),相邻快照完全相同则只保留第一幅。收盘集合竞价含在 Snapshot.csv 里;开盘集合竞价在 2018-12-24 前单独发布 Auction.csv (含虚拟匹配量 VirtualAuctionQty、虚拟未匹配量 LeaveQty、匹配情况 Side),之后并入 Snapshot.csv。
关键结论一:沪市逐笔文件只有三代,不是五代
沪市「逐笔」在 12 年里换过两次名字,做长周期回测必须跨三代拼:
| 文件 | 启用日 | 停供日 | 字段数 | 内容 |
|---|---|---|---|---|
Tick.csv |
2020-02-19 (1.0.0) | 2024-07-08 | 7 → 11 (2021-04-26) → 12 (加 SendingTime) | 仅成交 |
Entrust.csv |
2021-04-26 | 2024-07-08 | 10 | 仅委托 |
StockTick.csv |
2023-11-27 | 至今 | 12 | 委托+撤单+产品状态+成交,合并成一个文件 |
1.0.0 (2020-02-19) 之前只有 Tick.csv 且无委托流。sh_011 (2017 版) 第 14 节虽然写着
shorder\yyyymmdd\XXXXXX.csv 逐笔委托(字段 OrderNo/OrderNoOld/OrderPrice/OrderQty/
OrderStatus/Side/OrderType),但该文件在后续所有 CSV 接口书版本中都不再出现——它属于
2017 年那套按证券代码分文件的接口,与后来的 Entrust.csv 不是同一产品。供应商样例包
(百度网盘) 也只有 2015 年起才有沪市委托数据。
委托流在沪市的历史起点是 2021-04-26,且 2024-07-08 就被取消、改由 StockTick 承担。 所以「沪市逐笔委托」这一数据在官方历史库里实际只有 2021-04-26 至 2024-07-08 这 一个窗口是干净的双流 (Tick + Entrust 分离),之后是委托成交混在一个文件里。
关键结论二:StockTick 一个字段承载三种语义
StockTick.csv 用 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 类记录里不是金额而是已成交数量,语义随 Type 变。TradeBSFlag
在 T 类有第三个值 N(未知),BondTick 无此值。CCALL(收盘集合竞价) 是 1.1.3 才加进值集的状态值。
时间精度也不统一:StockTick.TickTime 与 Tick.TradeTime 精确到百分之一秒 (如
2015112309163002,17 位含日期),Entrust.TransactTime 精确到毫秒
(20150803093008000,17 位),BondTick.TickTime 也是毫秒。跨文件按时间戳排序时长度不同,
补位对齐会出错。
关键结论三:Level-2 快照含撤单统计,可直接做撤单率
sh2\Snapshot.csv 除了十档价格/量/总委托笔数,还给出一整组委托簿聚合量:
TotalBidQty/TotalOfferQty (委托总量)、WeightedAvgBidPx/WeightedAvgOfferPx
(加权平均委买/委卖价)、TotalBidNumber/TotalOfferNumber (总笔数)、
BidTradeMaxDuration/OfferTradeMaxDuration (成交最大等待时间)、
NumBidOrders/NumOfferOrders (价位数)、以及撤单四件套
WithdrawBuyNumber/WithdrawBuyAmount/WithdrawBuyMoney (笔数/数量/金额, 金额 2 位小数)。
申买一前 50 笔订单落在 BidOrders[50] / OfferOrders[50],只有买一卖一有队列细节,
买二到买十只给 BidNumOrders[10] 总委托笔数,不给逐笔。
2021-12-01 (1.0.3) 之后快照新增 AvgPx / ClosePx / MsgSeqNum / SendingTime / WarLowerPx /
TradingPhaseCode / NumImageStatus 七个字段,字段总数 194 → 201。NumImageStatus 标快照是
全量还是增量 (1=全量, 2=增量) —— 用它判断快照能否当增量消息拼接。
2025-11-24 起盘后固定价格交易快照 (FpTradeSnap.csv) 的委托队列与撤单类字段全部置 0
(BidNumOrders / BidOrders[50] / WithdrawBuy* / WithdrawSell*),只有 BidOrderQty 与 OfferOrderQty 保留。
关键结论四:精度随版本改,跨年拼接必须按日期读口径
| 生效日 | 变更 |
|---|---|
| 2018-01-02 | Level-1 快照价格 NUMBER(3) → NUMBER(4) |
| 2019-07-22 | 新增 FpTradeSnap.csv / FpTradeTick.csv (科创板盘后固定价格交易), 日 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 在 2023-06-01 前是 2 位小数、后是 3 位,
直接把两段拼起来算日内均价/金额会产生 10 倍量级的错位。1.1.5 是本批最新版本,
按 2026-03-27 完成日计,尚未见 1.1.6。
L2 快照的 ETF 申赎统计来自 1.1.4 技术开发稿 (2024-06-24): ETFBuyNumber/ETFBuyAmount/
ETFBuyMoney 与 ETFSellNumber/ETFSellAmount/ETFSellMoney 六字段。注意这三组 ETF 字段
在 1.1.3 (2024-06-21) 里已经存在,说明交易所把它们提前合进了 1.1.3 正式发布。
关键结论五:交易阶段编码是定长多位置信
Level-1 快照的 PhaseCode 是 8 位定长字符串,每位一个含义,无定义填空格:
- 第 1 位:
S启动 /C集合竞价 /T连续交易 /B休市 /E闭市 /P停牌 /M可恢复熔断(盘中集合竞价)/N不可恢复熔断 /D开集合竞价结束到连续竞价开始之间 - 第 2 位:
0不可正常交易 /1可正常交易 - 第 3 位:
0未上市 /1已上市 - 第 4 位:
0当前时段不接受新申报 /1接受
Level-2 快照的 TradingPhaseCode 语义改引 IS124 的 mktdt00.txt,不走这套编码;盘后固定
价格交易快照的 TradingPhaseCode 又是另一套 (INIT/PCALL/POSMT/ENDPT/POSSP)。
三套编码不通用,跨文件筛时段必须分别映射。
关键 takeaway
- 沪市逐笔委托的干净窗口只有 2021-04-26 – 2024-07-08,之前无委托流,之后并入 StockTick。
StockTick.TradeMoney语义随Type变 (A 类是已成交量, T 类才是金额) —— 这是最容易读错的一列。sh2\Snapshot.csv自带撤单笔数/数量/金额,做撤单率研究不必自己从委托流差分。- 成交金额精度 2023-06-01 变过一次,期权成交金额同日 2→4 位;跨年拼接前先确认。
- 三套交易阶段编码 (Level-1
PhaseCode/ Level-2TradingPhaseCode/ FpTradeTradingPhaseCode) 语义不同,不可混用。
在 wiki 中的位置
- 概念: 沪市逐笔文件演化 (SSE Tick File Evolution) · 逐笔成交的双向委托引用 (Bid-Offer Order Reference) · Level-2 档位与委托队列 (L2 Depth and Order Queue) · 深市高频表结构演化 (SZSE Feed Schema Evolution)
- 实体: Shanghai Stock Exchange (上交所)
- 对照源: 深交所高频行情数据结构 — 两所的字段命名与引用方式不同
- 实测: 供应商样例包实测 (沪市委托-成交配对缺失率
来源文件
raw/refs/sh-csv-interface-spec/ — 7 份 PDF 原件 + 7 份 .extracted.md 全文抽取
(PyMuPDF,表格已拉平成 字段 | 含义 | 类型 | 说明 文本)。