2. 基础概念
在财务数据研究中,最容易出错的地方往往不是模型或因子,而是“时间”。同一份财报,在数据库里可能同时存在报告期、公告日、实际披露时间、入库时间等多个字段,如果混用,回测就会出现“未来函数”或“数据缺失”的假象。本节把六个关键术语一次讲清,并给出对齐时的判断标准。
一、六个术语的定义与区别
报告期是财务数据所描述的会计区间,例如 2023-12-31、2024Q1、2024H1。它回答的是“这份数据说的是哪一段时间”。报告期是数据的业务属性,与数据何时被公开无关。
公告日是上市公司对外披露财报的日期,通常以自然日表示,例如 2024-04-25。公告日回答的是“公司什么时候告诉市场”。但公告日往往只精确到天,且可能因节假日、盘后披露、更正公告而需要进一步细化。
实际披露时间是公告日加上具体时刻,例如 2024-04-25 19:30:00。它比公告日更精确,能区分盘前、盘中、盘后披露。对于日频回测,若数据在收盘后才可得,则当日收盘价不应使用该数据。
可得时间是研究者或系统真正能够获取并使用该数据的最早时间点。它可能等于实际披露时间,也可能因数据供应商延迟、人工录入、批量入库而晚于实际披露时间。可得时间才是回测中唯一安全的时间锚点。
时间戳是记录某一事件发生或数据写入的绝对时间标记,通常包含日期、时刻和时区,例如 2024-04-25T19:30:00+08:00。时间戳是技术字段,用于排序、去重和计算延迟。
时区是时间戳的参照系。A 股财报以北京时间(UTC+8)披露,而海外数据库可能以 UTC 存储。若忽略时区,跨市场数据对齐时会出现 8 小时偏移,导致“盘后”被误判为“盘中”。
一句话记忆:报告期说“数据属于哪段”,公告日说“哪天披露”,实际披露时间说“几点披露”,可得时间说“我几点能用”,时间戳说“系统怎么记”,时区说“按哪个钟”。
二、核心原理:从披露到可用的时间链
财务数据从公司到研究者,通常经历“报告期结束 → 编制审计 → 交易所披露 → 供应商采集 → 入库清洗 → 研究者可得”六个环节。每一个环节都可能产生延迟,因此“公告日”不等于“可得时间”。
对齐的核心原则是:任何用于决策的数据,其可得时间必须早于或等于决策时点。在日频回测中,若某财报在 T 日盘后披露,则 T 日收盘信号不应包含该财报;最早应在 T+1 日使用。若供应商在 T+2 日才入库,则实际可用日应为 T+2。
三、方法流程:如何确定“可得时间”
实操中,建议按以下步骤建立统一的时间对齐口径:
- 统一时区:所有时间戳先转换为北京时间(UTC+8),再进行比较和排序。
- 区分日期与时刻:公告日只到天,实际披露时间到秒;若只有公告日,需按“盘后披露”保守处理。
- 确定可得时间:取“实际披露时间”与“供应商入库时间”中的较晚者,作为回测可用时点。
- 映射到交易日:若可得时间在交易日收盘前,则当日可用;若在收盘后,则下一交易日可用。
- 记录时间戳:保留原始时间戳和转换后时间戳,便于审计和复现。
下面是一段 Python 示例,演示如何将披露时间映射为可用交易日:
import pandas as pd
# 假设已有时区感知的时间戳
disclose = pd.Timestamp("2024-04-25 19:30:00", tz="Asia/Shanghai")
close_time = pd.Timestamp("2024-04-25 15:00:00", tz="Asia/Shanghai")
if disclose <= close_time:
available_date = disclose.date()
else:
available_date = (disclose + pd.Timedelta(days=1)).date()
print(available_date) # 2024-04-26
四、案例与场景:同一份财报的三种时间口径
以某公司 2023 年年报为例:报告期为 2023-12-31,公告日为 2024-04-25,实际披露时间为 2024-04-25 19:30,供应商入库时间为 2024-04-26 08:00,研究者可得时间为 2024-04-26 09:00。若回测在 2024-04-25 收盘生成信号,则不能使用该年报;若在 2024-04-26 开盘使用,则安全。
| 术语 | 示例值 | 回答的问题 | 回测中的角色 |
|---|---|---|---|
| 报告期 | 2023-12-31 | 数据属于哪段会计区间 | 业务标签,不决定可用性 |
| 公告日 | 2024-04-25 | 哪天对外披露 | 粗略参考,需细化到时刻 |
| 实际披露时间 | 2024-04-25 19:30 | 几点对外披露 | 判断盘前/盘中/盘后 |
| 可得时间 | 2024-04-26 09:00 | 我几点能真正使用 | 回测唯一安全锚点 |
| 时间戳 | 2024-04-25T19:30:00+08:00 | 系统如何记录 | 排序、去重、审计 |
| 时区 | Asia/Shanghai | 按哪个钟表 | 跨市场对齐的基础 |
五、常见误区与复盘
误区一:把公告日当可得时间。公告日只到天,若财报在盘后披露,当日收盘信号使用该数据就是未来函数。
误区二:忽略供应商延迟。实际披露时间早,但数据库入库晚,研究者真正可得时间应以入库时间为准。
误区三:时区混用。UTC 时间未转换就直接与北京时间比较,会导致 8 小时偏差,盘后变盘中。
误区四:用报告期排序。报告期只代表会计区间,不能用于判断数据先后,否则会把早披露的 Q1 和晚披露的年报顺序搞乱。
复盘建议:每次回测前,先输出一张“时间字段对照表”,明确每个字段的含义、时区、精度和来源。对关键财报事件,抽样核对公告日、实际披露时间与可得时间是否一致。若不一致,以可得时间为准,并记录延迟原因。
掌握这六个术语的区别,是后续所有时间对齐操作的基础。只有把“数据属于哪段”和“数据何时可用”彻底分开,才能避免回测中的时间偏差,让财务因子真正具备可复现性。