做美股实证研究这行当,我一直有个体会:越不起眼的底层数据,越容易在后面某个深夜变成拦路虎。前阵子帮一个做并购事件研究的团队复核结果,他们用自然日去对齐公告日和收益数据,算出来的异常收益曲线怎么看怎么别扭。问题最后定位到“日期基准”上:整个研究用的是日历日,但股票市场只按交易日运行。就这么一个看似基础的点,能让之前所有统计结果的可信度大打折扣。CnOpenData的美股上市公司交易日历数据,解决的就是这种“研究地基”层面的问题。它记录的是美股市场每天真实的交易状态,包括休市、提前收盘等安排,面向做量化回测、事件研究、面板数据清洗的金融研究者和数据分析师。这篇内容我就结合自己倒腾美股的实战经验,把这套数据的用法、坑点和基础设施建设一次说透。
1. 日子不对,一切白跑:为什么交易日历是你最容易忽略的主表
1.1 自然日、工作日、交易日:三种时间坐标用混会怎样
绝大多数人在处理时间序列时,大脑默认的时间轴是一页日历,从1号到31号,从周一到周日。但股票数据不是这么运行的。市场在周末不产生交易,节假日不产生交易,台风来了可能也不产生交易。于是同一段研究区间内,自然日的数量、工作日的数量、交易日的数量是三个完全不同的数字。
我见过很多次类似代码:直接用pd.date_range生成一个自然日序列,然后去merge行情数据,结果合并完发现大量NaN。这就是因为自然日序列里有太多“市场根本没开门”的日子。更隐蔽的问题是,如果用自然日做滚动窗口,比如计算过去30天的累计收益,一个跨越长周末的窗口和一个正常交易周的窗口,真实信息含量完全不一样,但模型不这么认为。
在金融计量里,“交易日”才是一条独立的时间索引。日收益率是相邻两个交易日收盘价之间的对数差,波动率按交易日次数年化,事件研究里的“事件前第10天”指的是T-10这个交易日,而不是10个自然日前的某个日期。这些计算一旦用了自然日,结果的性质就变了,这不是精度问题,是定义问题。
1.2 CnOpenData这套日历数据的真实定位
很多人第一反应是:交易日历不就是把节假日列出来吗?我自己写一个也行。这话对了一半。常规的元旦、圣诞节、感恩节当然可以手工维护,但交易日历的真实价值在于它是一张“市场运行状态表”,而不是简单的放假列表。
以我实际拿到过的美股日历类数据为例,通常包含几个核心维度:具体日期、当天是否开盘交易、是否提前收盘、所属交易所标识、休市或特殊安排的说明。这样一张表端出来后,它就不是给你查“哪天放假”用的,而是给你做数据对齐、窗口切分、频率转换、策略调度用的基准主表。
CnOpenData这套美股上市公司交易日历数据的价值就在这里:它把纽交所、纳斯达克这些主流交易所一个年度周期内的所有交易状态变化都整理成结构化数据,省去了到处翻交易所公告、逐条确认历史特殊休市的工作。对做学术研究的人来说,手里有一份可以被引用的、权威的日历数据,意味着你的结果可复现、可核查,这在论文审稿和答辩时特别重要。对做量化的人来说,它是回测系统里最底层的那张“交易日主表”。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 拿到日历数据后的三个“先手检查”
2.1 覆盖年份和频率:小心新联邦假日的漏网之鱼
数据到手后,不要急着去写合并代码,先花十分钟做三个检查,能省下后面两天排查时间。
第一就是年份覆盖和频率。美股市场有一个让很多人措手不及的变化:从2022年开始,纽交所正式把六月节定为休市日。2021年六月节因为落在周六,纽交所选择在6月18日(周五)休市,但那时候它还不是一个常态化假日;2022年开
