2. 金融市场数据基础

做公司行动与复权因子还原,第一步不是写算法,而是把“原始行情数据长什么样”彻底搞清楚。复权因子的计算依赖价格、成交量、成交额、除权除息日等字段,如果对行情数据结构理解有偏差,后续因子推导会出现系统性错误。本节从数据结构、价格类型、量额关系和数据源字段四个角度,建立后续实战所需的数据基础。

一、核心原理:一行行情记录到底描述了什么

股票行情数据本质上是“时间 × 标的 × 状态”的观测记录。每一行通常包含:交易日期、证券代码、开盘价、最高价、最低价、收盘价、前收盘价、成交量、成交额、复权因子(部分数据源提供)等。理解这些字段的关键,是区分“当日实际成交形成的价格”与“跨日衔接所需的参考价格”。

其中,前收盘价是连接两个交易日的桥梁。在无公司行动时,前收盘价等于上一交易日收盘价;发生除权除息时,交易所会给出一个调整后的前收盘价(即除权参考价),它已经隐含了分红、送转、配股等事件的影响。复权因子还原的核心,正是围绕“实际收盘价”与“理论前收盘价”之间的比例关系展开。

关键认知:行情表中的“收盘价”是当日真实成交结果,而“前收盘价”在除权日是被调整过的参考值。两者之比,往往就是复权因子的直接来源。

二、价格类型:不复权、前复权、后复权

同一只股票在同一交易日,可能同时存在三种价格口径,它们描述的是同一天的不同“观察视角”:

  • 不复权价格:交易所原始行情,除权日会出现价格跳空,历史价格不连续。
  • 前复权价格:以当前最新价格为基准,向前调整历史价格,使走势连续,适合技术分析与近期收益计算。
  • 后复权价格:以上市首日为基准,向后调整后续价格,适合长期收益回测与因子研究。

三者的关系可以用一个比例链条表达:后复权价格 = 不复权价格 × 累计复权因子;前复权价格 = 后复权价格 ÷ 最新累计复权因子。理解这一点,就能明白为什么复权因子是“可推导、可校验”的,而不是只能依赖数据商直接提供。

价格口径与复权因子关系 不复权价格 交易所原始行情 后复权价格 以上市首日为基准 前复权价格 以最新价格为基准 ×累计因子 ÷最新因子 复权因子 = 前收盘价 ÷ 除权参考价(或累计价格调整比) 公司行动事件 → 因子变化 → 价格口径转换

三、成交量与成交额:量额关系与复权处理

成交量与成交额是行情数据的另一条主线。成交量通常以“股”或“手”为单位,成交额以“元”为单位。二者关系为:成交额 ≈ 成交量 × 成交均价。在复权处理中,价格会被调整,但成交量是否调整取决于数据源口径。

常见做法是:价格复权时,成交量通常不做复权,因为成交量反映的是实际交易股数;但在计算换手率、量价因子时,若使用前复权价格与未复权成交量,需要注意口径一致性。部分数据源会提供“复权成交量”,其本质是按复权因子反向调整,用于保持量价关系的内部一致。

字段 含义 复权处理建议
open/high/low/close 当日开盘、最高、最低、收盘价 按复权因子调整
pre_close 前收盘价(除权日已调整) 用于推导复权因子
volume 成交量(股/手) 通常不调整,注意单位
amount 成交额(元) 通常不调整
adj_factor 复权因子(部分数据源提供) 用于校验与还原

四、常见数据源与字段说明

不同数据源的字段命名和口径存在差异,实战中必须做字段映射与口径对齐。以下是常见来源的典型特征:

  • 交易所原始数据:字段最权威,包含除权除息信息,但格式多样,需自行解析。
  • Wind/Choice:提供不复权、前复权、后复权及复权因子,字段规范,适合研究。
  • Tushare/AkShare:开源或社区数据接口,字段清晰,适合快速验证与教学。
  • 聚宽/米筐:量化平台内置行情,复权处理已封装,需注意其默认口径。

以 Tushare 的日线接口为例,典型返回字段如下:

ts_code, trade_date, open, high, low, close, pre_close,
change, pct_chg, vol, amount

其中 vol 单位为“手”,amount 单位为“千元”,pre_close 在除权日已被调整。若直接使用 close / pre_close - 1 计算涨跌幅,得到的是“考虑公司行动后的真实涨跌幅”,而不是价格跳空幅度。这一点在因子还原中非常关键。

建议在数据加载阶段就建立字段映射表,统一价格单位、成交量单位和复权口径,避免后续因子计算时反复转换。

五、误区与复盘

初学者最容易踩的坑有三个:

  1. 把不复权价格直接用于回测:除权日价格跳空会被误判为真实下跌,导致收益计算错误。
  2. 混淆前复权与后复权:前复权适合看近期走势,后复权适合长期收益,混用会导致因子方向相反。
  3. 忽略成交量单位:手与股相差 100 倍,量价因子会整体放大或缩小,影响排序结果。
复盘要点:任何复权因子还原结果,都应与数据源提供的复权价格做交叉校验。若偏差超过一个最小价格变动单位,优先检查 pre_close 口径与除权日对齐是否正确。