2. 金融行情数据基础

在湖仓架构中处理金融行情数据,第一步不是写 SQL 或搭 Spark 任务,而是把“数据长什么样、为什么长这样”讲清楚。行情数据的类型、频率和复权规则,直接决定了后续的分区策略、存储格式、计算口径与回测结果的可信度。本节从品种、频率、术语三个维度建立统一认知。

一、行情品种:四类资产的数据特征

股票、期货、期权、外汇虽同属行情数据,但字段结构、交易时段和价格含义差异显著,混用会导致严重的数据质量事故。

  • 股票:核心字段为开高低收、成交量、成交额、换手率。存在除权除息,价格序列不连续,必须复权后才能做长周期分析。
  • 期货:合约有到期日,主力合约会切换,存在近月/远月价差。数据需带合约代码与交易所,且要处理换月拼接。
  • 期权:除价格外,还包含行权价、看涨看跌方向、隐含波动率、希腊字母。同一标的对应数百个合约,数据量呈数量级放大。
  • 外汇:近乎 7×24 小时交易,无统一收盘价,通常以 Bid/Ask 报价为主,点差和报价源差异大。
在湖仓中,建议用统一的 asset_type 字段区分品种,但保留各自的扩展字段(如期权的 strike_price),避免为统一而丢失业务语义。

二、行情频率:从 Tick 到日线

频率决定了数据量级与计算模式。同一标的,Tick 数据一天可达数十万条,而日线仅一条,二者在湖仓中的存储与查询策略完全不同。

频率典型粒度数据量级主要用途
Tick / 逐笔每笔成交或每档报价极大(GB/日/标的)微观结构、滑点分析
分钟线1/5/15/30/60 分钟大日内策略、盘中监控
日线每日一根 K 线小趋势回测、因子计算
周线/月线聚合周期极小长期配置、宏观研究

频率之间并非独立,而是聚合关系:Tick 聚合成分钟线,分钟线聚合成日线。湖仓中通常保留原始 Tick 作为 ODS 层,分钟与日线作为 DWD/DWS 层,通过增量聚合任务生成。

-- 分钟线聚合为日线的核心逻辑示意
SELECT
  symbol,
  trade_date,
  FIRST_VALUE(open)  OVER w AS day_open,
  MAX(high)          OVER w AS day_high,
  MIN(low)           OVER w AS day_low,
  LAST_VALUE(close)  OVER w AS day_close,
  SUM(volume)        OVER w AS day_volume
FROM minute_bar
WINDOW w AS (PARTITION BY symbol, trade_date ORDER BY bar_time
             ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING);

三、复权、除权与停牌:最易踩坑的术语

这三个术语是行情数据处理的“高危区”,理解偏差会直接污染回测收益。

  • 除权除息:公司分红送股后,股价按比例下调,形成价格跳空。这是真实发生的价格调整,不是数据错误。
  • 复权:为消除除权造成的跳空,对历史价格进行修正。前复权以当前价为基准调整历史价,后复权以上市价为基准调整后续价。
  • 停牌:标的暂停交易,期间无行情。若简单用前值填充,会在回测中制造“虚假可交易”信号。
常见误区:用前复权价格计算历史某日的真实成交金额,会得到错误结果。复权价只适用于收益率和趋势分析,真实成交与持仓成本必须用未复权价。

四、业务场景与数据流

把上述概念串起来,一个典型的行情数据流是:交易所原始 Tick → 清洗去重 → 复权因子关联 → 分钟/日线聚合 → 湖仓分层存储 → 策略与风控消费。复权因子是连接原始价与复权价的桥梁,必须作为独立维表管理。

行情数据从 Tick 到日线的聚合与复权链路 交易所原始 Tick 逐笔成交/报价 清洗与去重 异常价/重复单过滤 复权因子关联 前复权/后复权 分钟/日线聚合 OHLCV 生成 湖仓分层:ODS(原始 Tick)→ DWD(清洗明细)→ DWS(分钟/日线宽表)→ ADS(策略指标) 复权因子维表独立存储,按 symbol + trade_date 关联 停牌标记:不可交易区间 复权价:仅用于收益率分析 未复权价:成交与成本核算

五、复盘:三个高频错误

  1. 频率混用:用日线信号驱动分钟级下单,忽略盘中价格路径,回测收益虚高。
  2. 复权口径不一致:因子计算用后复权,回测用前复权,导致收益率无法对齐。
  3. 停牌处理粗暴:直接删除停牌日数据,造成时间序列断裂,滚动窗口计算错位。
正确做法:停牌日保留记录并打标 is_suspended=true,价格字段置空而非填零;复权因子单独建表,任何价格使用前先声明复权口径。

掌握品种差异、频率聚合关系与复权停牌规则,是后续设计行情湖仓分区、增量任务与质量校验规则的前提。数据模型可以统一,但业务语义必须逐品种、逐口径地明确下来。