2. 行情数据基础

做多源行情交叉校验,第一步不是写比对脚本,而是把“行情数据”本身拆解清楚。只有明确每类数据的产生机制、字段语义、时间口径和复权规则,才能判断两个数据源之间的差异究竟是真实市场差异,还是口径不一致造成的假差异。本节围绕行情数据类型、常见字段、时间戳、复权、快照与逐笔、多市场差异及数据源特点展开,为后续校验与修复建立统一的语义基线。

一、核心原理:行情数据的四种基本形态

从数据产生机制看,行情数据可分为四类:快照(Snapshot)、逐笔成交(Trade/Tick)、逐笔委托(Order)和衍生指标(K线、指标值)。快照是交易所在固定时间间隔(如A股3秒、港股实时、部分源为毫秒级聚合)对盘口买卖档位与最新价的一次“拍照”;逐笔成交记录每一笔撮合成交;逐笔委托记录每一笔报单与撤单;K线则是由前两者按时间窗口聚合而成。

理解这一层,才能理解为什么两个数据源的“最新价”可能不同:一个来自快照的最新成交价,另一个来自逐笔成交的最后一笔,二者在时间切片上天然存在毫秒到秒级的偏移。校验时必须先对齐数据形态,再对齐时间窗口,最后才比较数值。

核心原则:不同形态的行情数据不可直接逐字段比对;必须先归一到同一形态(如都转为逐笔成交或都转为分钟快照),再进入差异检测环节。

二、常见字段与时间戳口径

主流行情字段通常包括:证券代码、交易所、最新价、昨收、开盘、最高、最低、成交量、成交额、买卖五档/十档价格与数量、成交笔数、交易状态等。字段名称在不同数据源中差异很大,例如“最新价”可能叫 last、last_price、trade_price、close(盘中误用),必须建立字段映射表。

时间戳是差异的高发区,常见有四种口径:

  • 交易所时间(Exchange Time):交易所撮合系统打上的时间,最权威。
  • 采集时间(Capture Time):数据商服务器收到报文的时间,含网络延迟。
  • 本地接收时间(Local Time):客户端落库时间,受本地时钟与队列影响。
  • 业务时间(Business Time):如K线所属的分钟/日切时间,用于聚合对齐。

校验时应优先使用交易所时间;若数据源不提供,则需评估采集时间与交易所时间的偏差分布,必要时做时钟校准。下面是一个字段映射与时间口径配置示例:

{
  "source": "vendor_a",
  "field_map": {
    "symbol": "code",
    "last": "last_price",
    "volume": "trade_volume",
    "bid1": "bid_price_1"
  },
  "time_field": "exchange_time",
  "time_format": "yyyy-MM-dd HH:mm:ss.SSS",
  "timezone": "Asia/Shanghai"
}

三、复权、快照与逐笔:三个最容易踩坑的点

复权主要影响日线及以上周期。前复权、后复权、不复权在同一只股票除权日附近会产生显著价格差异。多源校验时,若一方用前复权、另一方用不复权,除权日当天会出现“价格跳变”式差异,这不是数据错误,而是口径不同。修复策略是统一复权方式,或在比对前用复权因子还原为不复权价格。

快照与逐笔的差异常表现为:快照的成交量是累计值,逐笔成交量是单笔值;快照的买卖档位是瞬时状态,逐笔委托是事件流。用逐笔累加去核对快照累计量时,必须注意撤单、集合竞价、盘后固定价格交易等特殊时段的处理规则。

常见误区:直接用两个数据源的“最新价”做等值判断。正确做法是先判断两者是否属于同一数据形态、同一时间切片、同一复权口径,再决定是否进入数值比对。

四、多市场差异与数据源特点

不同市场的交易机制直接决定行情数据的形态与校验重点。A股有集合竞价、连续竞价、涨跌停与停牌;港股有收市竞价、暗盘;有盘前盘后、做市商报价与多交易所合并;期货有夜盘与主力合约切换。这些机制会导致同一时刻不同数据源的“最新价”含义不同。

市场典型数据形态时间戳特点校验重点
A股快照3秒 + 逐笔交易所时间精确到毫秒集合竞价、涨跌停、停牌状态
港股实时快照 + 逐笔含收市竞价时段暗盘、收市竞价、碎股
多交易所合并 + 逐笔微秒级,含盘前盘后交易所标识、合并规则、延迟
期货快照 + 逐笔 + 委托夜盘跨日,时间归属复杂主力合约切换、夜盘日切

数据源方面,交易所直连行情最权威但接入成本高;券商柜台行情稳定但可能做过滤;第三方数据商覆盖广但存在清洗与延迟;开源或免费源便于测试但字段缺失多。校验时应根据业务目标选择“基准源”,通常以交易所或权威数据商为基准,其余源作为待校验对象。

行情数据形态与校验对齐关系 快照 Snapshot 盘口档位 + 最新价 逐笔成交 Trade 单笔撮合事件流 逐笔委托 Order 报单 / 撤单事件 衍生 K线 按窗口聚合 统一形态 + 统一时间窗口 字段映射 · 复权对齐 · 时区校准 差异检测与修复 真实差异 → 告警 / 假差异 → 口径修正 假差异来源 复权 / 时区 / 形态 真实差异来源 延迟 / 漏包 / 错误

五、案例与复盘:一次“最新价不一致”的排查

某策略团队发现A股某标的两数据源最新价相差0.01元,持续数分钟。初步怀疑数据源错误,但排查后发现:源A使用快照最新价,源B使用逐笔成交最后一笔;在成交稀疏时段,快照最新价可能停留在上一笔,而逐笔源已更新到更晚的一笔。二者时间切片不同,属于假差异。修复方式是将两源都归一到“同一时间窗口内的最后一笔逐笔成交价”,差异随即消失。

这个案例说明:多源校验的价值不在于“找出不同”,而在于区分差异性质。建议建立如下排查顺序:

  1. 确认数据形态是否一致(快照/逐笔/K线)。
  2. 确认时间戳口径与时区是否一致。
  3. 确认复权方式与除权日处理是否一致。
  4. 确认字段映射与单位(手/股、元/分)是否一致。
  5. 以上都一致后,再判定为真实差异,进入告警与修复流程。
实践建议:为每个数据源维护一份“口径档案”,记录数据形态、时间字段、复权方式、单位、特殊时段处理规则。这份档案是后续自动化校验规则配置的基础,也是差异修复时快速定位假差异的关键依据。

掌握本节内容后,你已经具备判断“差异是否真实”的基础能力。下一阶段的工作,是把这些口径规则转化为可执行的校验配置与修复策略,让多源行情在统一语义下真正可比、可信、可用。