2. 金融数据基础
在金融数据工程与实时计算中,第一步不是写代码,而是建立“数据地图”:市场上到底有哪些数据、它们长什么样、从哪里来、更新频率如何、质量风险在哪里。只有把数据类型与特征梳理清楚,后续的采集、清洗、存储、计算与建模才有稳定的输入基础。本节围绕行情数据、交易数据、基本面数据与另类数据展开,并给出可落地的分类框架与工程判断方法。
一、核心原理:按“产生机制”而非“文件格式”分类
很多初学者按 CSV、JSON、二进制等格式区分数据,这在工程上会很快失效,因为同一类数据可以有多种格式。更稳健的分类维度是产生机制与语义:数据是由市场撮合产生的、由公司披露产生的,还是由外部行为间接推断产生的。据此可划分为四类:
- 行情数据(Market Data):描述市场价格与买卖意愿,如快照、盘口、K线、逐笔委托。
- 交易数据(Trade Data):描述实际成交与账户行为,如逐笔成交、委托回报、账户流水。
- 基本面数据(Fundamental Data):描述公司财务与经营状况,如财报、股本、分红、估值指标。
- 另类数据(Alternative Data):非传统来源、需加工才能用于投资判断的数据,如卫星图像、舆情、App活跃度、供应链物流。
工程判断口诀:先问“谁产生、何时产生、是否可回放”,再问“字段、频率、延迟、历史深度”。这四问决定了采集架构与存储选型。
二、四类数据的特征与来源对照
下表从更新频率、典型延迟、历史深度、主要来源与工程难点五个维度进行对照,便于在架构设计时快速定位。
| 数据类型 | 更新频率 | 典型延迟 | 历史深度 | 主要来源 | 工程难点 |
|---|---|---|---|---|---|
| 行情数据 | 毫秒~秒级 | 微秒~秒级 | 数年~十余年 | 交易所、行情商 | 高吞吐、乱序、快照重建 |
| 交易数据 | 事件驱动 | 微秒~毫秒 | 依合规要求 | 交易所、券商柜台 | 精确一次、对账、隐私 |
| 基本面数据 | 季度/年度 | 小时~天 | 数十年 | 公告、财报、数据商 | 口径变更、时点对齐 |
| 另类数据 | 不定 | 小时~天 | 通常较短 | 第三方、网络采集 | 合规、噪声、实体映射 |
三、方法流程:从原始事件到可用数据
以行情与交易数据为例,典型处理链路如下:
- 接入:通过交易所行情网关或券商API订阅,获得原始报文。
- 解析:按协议解码为结构化事件,如逐笔委托、逐笔成交、快照。
- 时间对齐:统一为交易所时间戳,处理乱序与重复。
- 状态重建:用委托簿重建盘口,生成K线或指标。
- 落库:热数据入时序库,冷数据入对象存储,元数据入目录。
# 示例:逐笔成交事件字段(简化)
{
"symbol": "600519.SH",
"ts_exchange": "2024-06-03T09:30:00.123456",
"price": 1680.50,
"qty": 200,
"side": "BUY",
"trade_id": "T2024060300001",
"seq": 10231
}
# 工程要点:seq 用于去重与排序,ts_exchange 用于回放
四、案例/场景:同一时刻的多源数据融合
假设某量化策略在开盘后需要判断某只股票的短期动量。它同时消费三类数据:行情快照给出最新价与盘口;逐笔成交给出主动买卖方向;基本面数据提供昨日收盘后的估值分位。三者时间尺度不同,必须通过事件时间对齐,而不是处理时间。若用处理时间,网络抖动会导致“未来数据”混入,回测与实盘结果严重偏离。
实时计算中,建议为每条数据保留两个时间戳:事件时间(交易所/公告时间)与摄入时间(系统接收时间)。窗口计算以事件时间为准,摄入时间用于监控延迟。
五、误区与复盘
- 误区一:把行情当交易。 行情是报价与意愿,交易是实际成交。用盘口挂单量推断成交量会引入虚假信号。
- 误区二:忽视基本面数据的“时点”。 财报有公告日与报告期,回测必须用公告日,否则产生前视偏差。
- 误区三:另类数据直接入模。 另类数据通常需要实体映射、去噪、标准化后才能与行情对齐,否则噪声远大于信号。
- 复盘建议: 建立数据字典,记录每类数据的来源、频率、延迟、字段含义与质量规则,并定期做对账与抽样校验。
合规提醒:交易数据与另类数据常涉及隐私、授权与交易所协议。采集前必须确认数据许可范围,避免将受限数据用于未授权场景。