做日更行情时,有个误判很常见:程序发现某天没有K线,就当成接口漏数,反复重试甚至用前一日收盘价补齐。问题往往不在数据源,而是代码把“周一到周五”直接当成了交易日。
上交所、深交所公布的2026年安排显示,国庆节10月1日至7日休市,10月8日起开市;9月20日、10月10日虽然是调休工作日,证券市场仍休市。可见办公日历和交易日历不是一回事。pd.date_range(freq="B") 只能排除普通周末,识别不了交易所休市。
我会把官方日历保存成一张表,至少包含 trade_date 和 is_open,补数据前先筛出应有日期,再与本地行情做集合差:
calendar = pd.read_csv("trade_calendar.csv")
open_days = set(pd.to_datetime(
calendar.loc[calendar.is_open == 1, "trade_date"]
))
have_days = set(pd.to_datetime(bars["trade_date"]))
missing = sorted(open_days - have_days)检查区间也要限制好:起点取本地首条行情日期,终点取最近一个已经结束的交易日。否则拿全年日历比较,会把未来日期也报成缺失。
交易日历不应永久写死在代码中。每年根据交易所公告更新,并记录来源、更新时间和适用市场。港股通、期货和海外市场也不能共用A股日历,因为休市与交收安排可能不同。
多维护一张小表,可以避免无效重试、错误告警,以及把休市日补成“零成交K线”后污染收益率。量化补数的第一步不是下载,而是先判断这一天是否本来就该有数据。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。