上交所历史数据接口说明书 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

  1. 沪市逐笔委托的干净窗口只有 2021-04-26 – 2024-07-08,之前无委托流,之后并入 StockTick。
  2. StockTick.TradeMoney 语义随 Type 变 (A 类是已成交量, T 类才是金额) —— 这是最容易读错的一列。
  3. sh2\Snapshot.csv 自带撤单笔数/数量/金额,做撤单率研究不必自己从委托流差分。
  4. 成交金额精度 2023-06-01 变过一次,期权成交金额同日 2→4 位;跨年拼接前先确认。
  5. 三套交易阶段编码 (Level-1 PhaseCode / Level-2 TradingPhaseCode / FpTrade TradingPhaseCode) 语义不同,不可混用。

在 wiki 中的位置

来源文件

raw/refs/sh-csv-interface-spec/ — 7 份 PDF 原件 + 7 份 .extracted.md 全文抽取 (PyMuPDF,表格已拉平成 字段 | 含义 | 类型 | 说明 文本)。