交易日历与数据对齐:让所有数据踩着同一个鼓点
我的掌握程度:
先掌握这个答案
交易日历=某市场所有交易日的列表(exchange_calendar库/数据源接口)。对齐工具箱:①reindex(calendar):把价格序列对齐到标准日历,缺失=停牌(q-066);②merge_asof:把「事件类」数据(公告、宏观发布)按最近历史时点映射(防前视,q-062);③pivot/unstack:长表转宽表做矩阵运算(股票×日期矩阵)。
先读结论,再核对下方使用边界;数字例题为教学情景,涉及实际行情与规则时请核对原始来源。
从理解到使用
以信息可得时间对齐
财报报告期结束日不是市场获知信息的时间。对每个特征记录available_at,并确认不晚于决策时点;盘后数据通常不能用于同日收盘前下单。保留历史修订与退市样本,检查删尾重跑是否稳定。
本阶段实战方法 · 把行情数字变成可比较的收益
看股票、基金或策略业绩时,先对齐本金、起止日期、现金流与费用。
- 选一个固定区间,记录期初价值、期末价值、分红、出入金和交易费用。
- 没有中途出入金时,用(期末价值+已取出分红-期初价值-费用)÷期初价值计算收益;有出入金时先区分时间加权与资金加权。
- 用相同区间的基准作比较,同时记录最大亏损;不要单凭一次盈利评价能力。
使用边界
- 不同期限的收益不可直接排名;年化只是换算,不是未来收益承诺。
- 模拟价格不是实时行情。普通股票交易手数、T+1和费用应按具体市场规则核对。
背景 · 从一个困惑说起
A股有春节、国庆长假,美股有感恩节,港股有重阳节……不同市场的「日历」不同。把行情、财务、宏观数据拼到一张表时,日期对不齐是日常:A股缺失的休市日、港股多出的半天市、宏观数据的月末值如何映射到交易日?
由此产生的问题
交易日历怎么用?多源数据对齐的标准做法是什么?merge_asof和reindex各自适用什么场景?
核心概念
交易日历=某市场所有交易日的列表(exchange_calendar库/数据源接口)。对齐工具箱:①reindex(calendar):把价格序列对齐到标准日历,缺失=停牌(q-066);②merge_asof:把「事件类」数据(公告、宏观发布)按最近历史时点映射(防前视,q-062);③pivot/unstack:长表转宽表做矩阵运算(股票×日期矩阵)。
为什么需要它
①跨源拼表的地基:行情(交易日)、财务(公告日)、宏观(发布日)三套时间戳必须统一到交易日框架;②防错位:时区错误(美东vs北京)能让所有数据错一天,毀掉整个研究而不报错;③效率:宽表(日期×代码矩阵)上的向量化运算比长表循环快百倍。
实际应用场景
数据管道骨架:生成交易日历→价格reindex对齐→财务merge_asof→统一成(日期,代码)双索引面板→unstack成矩阵供因子计算。这套流程是阶段4的主线工程。
与之前知识的联系
q-065缺失处理、q-062公告对齐、q-066停牌标记在对齐框架里各就各位——数据车间的装配线。下一题解决这些数据「存在哪」的问题。
⚠ 常见误解
- 日历就是工作日:交易日≠工作日(调休上班的周六休市,部分周五假日);必须用真日历
- 数据merge就行不用日历:不同源缺失模式不同,不对齐日历直接merge会产生大量虚假NaN
- 时区问题以后再说:跨市场(A股/美股/加密7×24)研究第一天就要统一时区口径,返工成本极高
🛠 本题实践任务
用akshare的交易日历接口(ak.tool_trade_date_hist_sina)拉取今年日历,验证:春节休市几天?有没有「调休上班但休市」的日子?
💡 提示(先自己想5分钟再看)
对比国务院放假安排(调休的周六上班)与交易日历——那些日子上班但股市休市。
✅ 验收标准
今年交易日天数+一个「上班但休市」的日期例子。你从此拥有了自己的交易日历文件。
在你的浏览器内运行。首次需联网下载 Python;支持标准库和 Pyodide 提供的 NumPy、pandas 等包。行情抓取、系统文件访问和部分第三方库请在本地环境运行。输出自检仅比对结果关键词,不代替逻辑审查。
Python · 独立工作线程 · 执行限时10秒
🤖 AI导师
导师会先检查你的前置知识(数据频率),再用案例、公式和代码帮助理解。此功能需要先启用服务。