3. 数据来源

在财务数据公告日与可得时间对齐的实战中,最容易被低估的环节不是模型,而是“时间字段到底从哪里来”。同一份年报,在交易所网站、Wind、同花顺、CSMAR、巨潮资讯中可能对应四个不同的时间戳:董事会决议日、交易所预约披露日、实际公告日、数据商入库日。若不加区分地混用,回测中就会出现“未来信息泄露”或“信号延迟”两类相反的错误。本节围绕常见数据源的时间字段定义与获取方式展开,帮助大家建立可复用的字段映射与采集规范。

一、核心原理:公告时间的四层结构

财务数据的“可得时间”并非单一时刻,而是一条时间链。理解这条链,是选择数据源和字段的前提。

  • 决策层时间:董事会决议公告日、股东大会决议日,反映信息在上市公司内部形成的时间。
  • 监管层时间:交易所预约披露时间表、实际披露日,是监管口径下的公开时点。
  • 媒体层时间:巨潮资讯、交易所网站、指定媒体的首次挂网时间,通常精确到日,部分到分钟。
  • 数据商层时间:Wind、同花顺、CSMAR 的入库时间或“公告日期”字段,可能滞后于媒体层数小时至数日。

对齐的本质,是把策略中使用的“信号生成时点”锚定到上述四层中最保守且可复现的那一层。学术研究常用“公告日+1个交易日”作为可得时间,而实盘更关注数据商入库时间,因为那才是策略真正能读到数据的时刻。

公告时间四层结构:从决策到可读取 决策层 董事会决议日 股东大会决议日 监管层 预约披露时间表 实际披露日 媒体层 巨潮资讯挂网 交易所网站发布 数据商层 Wind / 同花顺 CSMAR 入库时间 T-30 ~ T-1 T 日 盘前/盘后 T 日 首次挂网 T 日 ~ T+2 字段映射要点 • 交易所/巨潮:优先取“首次披露时间”,精确到日,部分公告含时分。 • Wind:ANN_DT 为公告日期,OPDATE 为入库日期,二者可能相差 1~2 日。 • CSMAR:Accper 为报告期,Anndate 为公告日,需与 Stkcd 联合去重。

二、方法流程:从数据源到对齐字段的采集规范

建议按“确定口径 → 抽取字段 → 校验时区 → 建立映射表 → 固化采集脚本”五步执行。

  1. 确定口径:明确策略需要的是“公告日”“入库日”还是“可交易日”。学术复现多用公告日,实盘多用入库日。
  2. 抽取字段:不同数据源的字段名差异较大,需先做字段字典。
  3. 校验时区:交易所与巨潮为北京时间,部分海外数据商为 UTC,需统一转换。
  4. 建立映射表:以股票代码+报告期为键,把多源时间字段合并到一张宽表。
  5. 固化采集脚本:把字段名、时区、缺失处理写成配置,避免人工重复。

下面是一个字段映射配置示例,可直接作为采集脚本的输入:

source_map:
  exchange:
    announce_field: "actual_disclosure_date"
    timezone: "Asia/Shanghai"
    precision: "day"
  wind:
    announce_field: "ANN_DT"
    ingest_field: "OPDATE"
    timezone: "Asia/Shanghai"
    precision: "day"
  csmar:
    announce_field: "Anndate"
    report_field: "Accper"
    timezone: "Asia/Shanghai"
    precision: "day"
  cninfo:
    announce_field: "publish_time"
    timezone: "Asia/Shanghai"
    precision: "minute"

三、案例场景:同一份年报在五个数据源中的时间差异

以某主板公司 2023 年年报为例,假设董事会决议日为 2024-03-28,交易所预约披露日为 2024-04-10,实际披露日为 2024-04-09,巨潮资讯首次挂网时间为 2024-04-09 19:42,Wind 入库日为 2024-04-10,CSMAR 公告日为 2024-04-09。若策略在 2024-04-09 收盘后读取 Wind 数据,实际上读不到;若在 4-10 开盘读取,则已滞后一个交易日。这就是“数据商层时间”与“媒体层时间”错位的典型场景。

数据源 关键时间字段 示例值 可得性说明
交易所网站 实际披露日 2024-04-09 精确到日,权威但无时分
巨潮资讯 首次挂网时间 2024-04-09 19:42 精确到分钟,适合实盘对齐
Wind ANN_DT / OPDATE 2024-04-09 / 2024-04-10 入库日滞后,需以 OPDATE 为准
同花顺 公告日期 2024-04-09 通常与交易所一致,需抽样校验
CSMAR Anndate 2024-04-09 学术常用,需注意报告期字段

四、误区与复盘

误区一:把“公告日期”直接当作“可交易日期”。公告日盘后发布的数据,最早只能在下一交易日使用。若回测中按公告日收盘价成交,会引入前视偏差。

误区二:忽略数据商入库时间。Wind 的 OPDATE 与 ANN_DT 常相差 1~2 日,实盘策略若按 ANN_DT 对齐,会高估策略收益。

误区三:多源混用不做去重。同一报告期在交易所、巨潮、CSMAR 中可能重复出现,需以股票代码+报告期为主键去重,并保留最早可得时间。

复盘建议:每次回测前,抽取 20 只样本股,人工核对五个数据源的时间字段差异,形成“时间差分布表”。若某数据源平均滞后超过 1 个交易日,应在策略中显式加入延迟参数,而不是默认使用公告日。

掌握各数据源的时间字段定义与获取方式,是后续构建“公告日—可得日—交易日”三级对齐表的基础。只有把字段口径固定下来,回测结果才具备可复现性和实盘参考价值。