国庆七天,A股停市、港股交易、非农发布:你的多市场行情监控还在用一套日历吗?
TickDB Research ·
大多数人以为国庆对量化是"没行情"。A 股停 7 天,港股基本全开,美股全程正常,外汇照跑,看起来是个淡季。
其实它是全年唯一一个四个市场同时处于四种不同状态的连续窗口。这才是最容易暴露状态管理设计缺陷的七天。不是因为行情大,是因为状态多。
这篇文章的结构:
第一层 拆词 "市场开市"为什么不是一个布尔值
第二层 逐维拆解 四个维度,每个维度一层
第三层 完整拆解 国庆七天,四市场四状态对照
第四层 判断骨架 最小判断逻辑 + 自建成本
第五层 场景落地 非农那天的跨市场状态判断
你如果只跑 A 股单市场,第一层和第四层对你没用,可以直接跳到第三层。
第一层:拆词——"市场开市"不是一个布尔值
几年前我维护过一套简单的多市场监控。逻辑很朴素:
if weekday in [0,1,2,3,4] and 9 <= hour <= 16:
is_trading = True
这套逻辑在 A 股单一市场跑了大半年没出问题。直到有一次国庆后回来,我发现系统日志里有一段静默——从节前最后一天收盘到节后第一天开盘,中间几天没有任何输出。当时以为是断网了,查了半天,没找到原因。
后来坐下来重新对了一遍各市场的规则,才发现问题不在网络。是我自己把"市场开市"当成了一个布尔值。
它至少是四个维度的叠加:
交易日状态 → 今天是不是交易日?
交易时段状态 → 现在处于哪个时段?
通道状态 → 准入通道开不开?
连接状态 → 数据连接和订阅是否存活?
四个维度里,我当时只判断了第一个,而且还判断错了——用"工作日"代替了"交易日"。10 月 1 日到 7 日是工作日,但不是交易日。
多市场行情监控中的"市场状态",至少包含四个维度:交易日状态、交易时段状态、通道状态、连接状态。只判断第一个维度,是多数系统的默认缺陷。
下面逐层拆。
第二层:逐维拆解
维度一:交易日——今天是不是交易日
核心判断:交易日不等于工作日。
10 月 1 日到 10 月 7 日,除周末外都是工作日,但这 7 天里 A 股全部休市。如果你在回测框架里用 date.today() - timedelta(days=N) 来算移动平均窗口,这 7 天会被当作有效数据日计入。
20 日窗口,国庆前后实际只覆盖 13 个交易日
→ 均线被休市日稀释
→ 交叉信号触发时间系统性偏移
→ 回测里的信号,在真实交易日序列上不会出现
我自己踩过这个坑。更隐蔽的代价是认知层面的:你不会在信号出错的第一时间怀疑日历。你会怀疑策略参数、怀疑因子有效性、怀疑市场结构变了。排查一圈,最后才回到数据层。这个顺序本身就是成本。
国庆场景
| 市场 | 10/1 | 10/2–10/7 | 10/8 |
|---|---|---|---|
| A 股 | 休市 | 休市 | 开盘 |
| 港股 | 休市 | 正常 | 正常 |
中国创盈市场服务有限公司在 2026 年 9 月 17 日的通知里写得很清楚:深港通下港股通 10 月 1 日至 10 月 7 日不提供服务,10 月 8 日起照常开通。中国投资信息有限公司发布的 2026 年沪港通全年安排通知,国庆部分口径一致。
用工作日判断交易日,是回测的第一个陷阱。国庆七天是全年最大的暴露窗口。
维度二:交易时段——现在处于哪个时段
核心判断:交易时段不等于 09:30–16:00。
我原来以为这是常识。后来查了一些官方规则文本,发现连"盘后几点开始"都不是一个单一事实。
| 来源 | 盘后起始时间 | 备注 |
|---|---|---|
| 纳斯达克规则文本 | "4:00 或 4:15" | 保留两个起点 |
| NYSE Crossing Session I | 4:15 | 以收盘价执行单股票交叉 |
| NYSE Crossing Session II | 4:00 | 组合交易,机制不同 |
| 行业通说 | 16:00 | 简化表述,非唯一制度文本 |
这两个来源都是 B 级——来自规则文本的搜索摘要,我没有拿到官网原文链接。具体规则编号需要以官方为准。但方向是清楚的:"盘后"这个词本身就不是一个精确的时间点。
代价是什么? 如果你把盘前价格当作开盘价来处理,你的"开盘信号"在真实交易中根本没有对应的成交窗口。盘前流动性低、点差大,那个价格在实盘中可能只有很小的量能支撑。回测里看起来很美的开盘突破策略,实盘时连第一步都执行不了。
国庆场景:10 月 2 日美国非农数据发布,美东时间上午 8:30,北京时间 20:30。
A 股 → 休市
港股 → 下午盘,正在交易
美股 → 盘前,数据发布后的第一反应在这里
外汇 → 伦敦-纽约重叠时段,流动性最高
四个市场,四种时段状态。如果你的系统只会判断"今天是不是交易日",它不知道非农发布的那一刻,哪些市场正在活跃。
交易时段不是布尔值。连"什么时候开始"都不是单一事实。
维度三:通道状态——准入通道开不开
核心判断:市场开市,不等于你可以交易。
这是四个维度里最容易被忽略的一个,因为它不体现在行情数据里。
国庆期间的状态错位:
港股市场 → 10/2、10/5、10/6、10/7 正常交易(4 个交易日)
港股通 → 10/1–10/7 全程暂停,10/8 恢复
也就是说:港股在动,但你通过港股通买不了。
如果你用"港股通是否开通"来判断"港股是否可交易",这 4 个交易日你会错误地认为港股不可交易,漏掉全部数据。
反过来也有问题。 2020 年重阳节:港股 10 月 26 日休市一天,但北向沪股通、深股通从 10 月 23 日就开始暂停,10 月 26 日南向港股通暂停,10 月 27 日恢复。
通道暂停区间可以早于市场休市区间
通道暂停区间也可以晚于市场休市区间
两者不是包含关系,是两个独立维度
代价不只是漏掉 4 天数据。 代价是你的策略样本集在整个国庆期间少了一大块,但你不知道。你以为港股停了,所以没有信号是正常的。实际上港股在正常交易,只是你看不到。而当你 10 月 8 日发现港股通恢复、想补上这段数据做验证时,你会发现这 4 天的港股行情你根本没有采集——因为你的系统在 10 月 2 日就把它静默了。
"港股开市"不能推出"港股通可交易"。通道状态是独立维度,必须单独建模。
维度四:连接状态——订阅是否存活
核心判断:心跳没断,不等于订阅还在。
这是四个维度里最深的一层,也是我最近才想明白的。
WebSocket 连接有两个层面:
连接层保活 ← 心跳包解决
会话层订阅 ← 心跳包不解决
心跳包让 TCP 连接不被防火墙断开,让服务端知道你还在线。但它不保证订阅关系还在。
香港交易所的 OMD-C Binary Protocol 规范里写得很清楚:断线后需要等待 SendKey(1105) 消息后重新登录。会话是通过优雅关闭 TCP/IP 连接来终止的。连接断开后,订阅关系可能已经失效,客户端需要重新建立连接并重新订阅。
需要说明:这是 Binary Protocol 规范,不是 WebSocket 规范,具体到 WebSocket 需要以各交易所官方文档为准。但会话管理的逻辑是相通的——连接存活和订阅存活是两件事。
国庆场景:你对一个停市市场的 WebSocket 订阅,假期里应该怎么处理?
方案 A:断开连接
方案 B:保留心跳
方案 C:保留心跳 + 定期重订
如果保留心跳但会话在某个时刻结束了,订阅可能已经被清除,而你的系统以为还连着。
10 月 8 日开盘,你的订阅已经失效,但日志里没有报错。系统静默。
这就是开头那个"日志里一段静默"的真正来源。 我当年以为是网络问题,后来才明白,是连接状态和订阅状态在我不知道的地方分了家。
WebSocket 心跳只解决连接保活,不自动维持业务订阅。这是国庆期间最容易暴露、也最难排查的问题。
第三层:国庆七天的完整状态拆解
把四个维度叠在一起看 2026 年国庆:
| 日期 | A股 | 港股市场 | 港股通 | 美股 | 外汇 |
|---|---|---|---|---|---|
| 10/1 周四 | 休市 | 休市 | 暂停 | 正常 | 24/5 |
| 10/2 周五 | 休市 | 正常 | 暂停 | 正常 | 24/5 |
| 10/5 周一 | 休市 | 正常 | 暂停 | 正常 | 24/5 |
| 10/6 周二 | 休市 | 正常 | 暂停 | 正常 | 24/5 |
| 10/7 周三 | 休市 | 正常 | 暂停 | 正常 | 24/5 |
| 10/8 周四 | 开盘 | 正常 | 恢复 | 正常 | 24/5 |
这张表的正确读法不是"谁停得久",是"如果你只判断了交易日维度,你在哪几天、哪个市场上会出错"。
10/2–10/7 港股正常交易,但港股通暂停
→ 用"中国假期"覆盖所有中文市场,会错误停掉港股管道
10/2 非农 A股休市、港股下午盘、美股盘前、外汇重叠
→ 系统能不能区分四种状态?
证据来源说明:港股通安排来自中国创盈市场服务有限公司 2026 年 9 月 17 日通知、中国投资信息有限公司 2026 年沪港通全年安排通知。港股市场在 10/2 至 10/7 的开市状态,当前没有港交所官方来源,按港股交易日历惯例推断,以港交所官方公告为准。美股和外汇按市场规则常态运行。
第四层:一个最小的判断骨架,以及自建它需要多少成本
如果你想把四个维度写进代码,顺序是这样的:
Step 1 查交易日 → 今天是不是交易日?按市场分开查
Step 2 查交易时段 → 现在处于哪个时段?
Step 3 查通道状态 → 准入通道开不开?
Step 4 查连接状态 → 订阅是否存活?
四个维度都通过 → 才发起行情请求
这个骨架看起来简单,但自建的成本不在第一行代码,在持续维护。我后来算过一笔账:
| 维护项 | 为什么不是一次性的 | 频率 |
|---|---|---|
| 交易日历 | 各市场节假日、调休、半日市、临时休市,四套日历分别维护 | 每年 |
| 通道状态 | 港股通暂停/恢复由内地和香港两地机构分别发布,不在标准日历里 | 每次公告 |
| WebSocket 会话 | 心跳超时、会话结束、密钥过期,三种情况处理方式不同 | 持续 |
这三样加起来,是一次性写完就结束的工作吗?不是。它是每年都要重新对一遍的持续性成本。
我现在用 TickDB 的 /market/trade-days 和 /market/trading-sessions 接口来做前两步的按需查询。
TickDB 为开发者和 AI 应用提供统一的全球行情数据接口,让团队通过一套接入获取多市场实时与历史数据,更快构建行情、分析和监控产品。
它的价值不在于"有这两个接口",在于多市场统一——一套接口覆盖 A 股、港股、美股、外汇,不需要为每个市场单独维护数据源和字段对应。
这两步都是 REST 按需查询,返回的是某一时刻的市场状态快照,不是持续推送的实时流。如果需要逐 tick 的实时数据,那是另一个通道(WebSocket)的事。两条通道解决不同问题,不能混着说。
第五层:非农那天的场景
10 月 2 日,北京时间 20:30,美国非农数据发布。
A 股 → 休市,不需要任何数据
港股 → 下午盘,正在交易
美股 → 盘前,第一反应在这里
外汇 → 伦敦-纽约重叠,流动性最高
一个多市场监控产品,能不能区分"这个市场今天不需要关注"和"这个市场正在发生大事件"?
如果你的系统因为"中国假期"把整个中文相关市场一起静默,你会漏掉港股和外汇在这一天的真实反应。而美股盘前的反应,你的系统可能根本没有覆盖——因为你的"交易时段"判断里只写了 09:30–16:00。
这不是数据问题。数据都在那里。这是状态设计问题。
证据说明:非农发布时间基于 BLS 官方发布日程页面(https://www.bls.gov/schedule/news_release/empsit.htm)的惯例推导——每月第一个星期五,美东时间上午 8:30。2026 年 10 月 2 日为当月第一个星期五。具体日期以 BLS 官方日程页面为准。
你的系统用了几层?
SEC 在营销规则(17 CFR 275.206(4)-1(e)(8))里,专门把回测业绩纳入"假设性业绩"的定义,要求披露后见之明偏差和局限性。这不是我个人的工程洁癖,是监管层面已经明确要求披露的问题。
而状态感知缺失,恰恰是后见之明偏差的一个来源:你的回测在错误的市场状态下运行,产生了在真实交易中不可能出现的信号,然后你把这个结果当作策略依据。
你的系统判断"市场开市"用了几层?如果只有一层,国庆七天是检验它的最好窗口。
一个可以立刻做的事:
把你系统里所有硬编码的时间判断列出来:
"09:30–16:00 等于交易中"
"周一至周五等于交易日"
"中国假期等于所有中文市场停市"
逐个对照各市场官方交易日历。不需要写新代码,先把它们列出来。
你可能会发现,有些判断你从来没写下来过,它们藏在某次随口加的 if 语句里。
FAQ
Q1:2026 年国庆 A 股休市几天?
A:2026 年 10 月 1 日(周四)至 10 月 7 日(周三)休市,共 7 个自然日,10 月 8 日(周四)开盘。这 7 天里除周末外都是工作日,但不是交易日。
Q2:2026 年国庆港股正常交易吗?
A:港股在 10 月 1 日休市,10 月 2 日、10 月 5 日至 7 日正常交易。港股市场本身在国庆期间只有 10 月 1 日一天休市。注意:港股市场状态和港股通状态是两回事(见 Q3)。
Q3:2026 年国庆港股通什么时候暂停?
A:根据中国创盈市场服务有限公司 2026 年 9 月 17 日通知,深港通下港股通 10 月 1 日至 10 月 7 日不提供服务,10 月 8 日起照常开通。中国投资信息有限公司发布的 2026 年沪港通全年安排通知口径一致。这意味着 10 月 2 日至 7 日港股正常交易,但通过港股通买不了。
Q4:交易日和工作日的区别是什么?
A:工作日是周一至周五(除法定节假日调休),交易日是该市场实际开市交易的日子。10 月 1 日至 7 日是工作日,但不是 A 股交易日。用工作日代替交易日做回测窗口计算,会引入非交易日空值或错误填充。
Q5:多市场行情监控怎么处理国庆休市?
A:至少判断四个维度:交易日(今天是否开市)、交易时段(现在处于哪个时段)、通道状态(准入通道是否开通)、连接状态(数据订阅是否存活)。只判断交易日维度,会漏掉港股通暂停、美股盘前、WebSocket 订阅失效等问题。
Q6:REST API 和 WebSocket 在多市场监控里有什么区别?
A:REST API 返回的是某一时刻的行情快照,适合按需查询(如"今天这个市场开不开");WebSocket 返回的是持续推送的实时数据流,适合实时监控产品。两条通道解决不同问题,不能混用。用 REST 做实时监控、用 WebSocket 做历史查询,都是错配。
Q7:WebSocket 心跳没断,为什么订阅可能已经失效?
A:WebSocket 连接有两个层面:连接层保活(心跳包解决)和会话层订阅有效性(心跳包不解决)。心跳包让 TCP 连接不被防火墙断开,但会话结束后订阅关系可能已被清除。香港交易所 OMD-C Binary Protocol 规范明确:断线后需等待 SendKey(1105) 消息重新登录。连接存活和订阅存活是两件事。
Q8:2026 年 10 月 2 日非农数据几点发布?
A:美东时间上午 8:30,北京时间 20:30。2026 年 10 月 2 日处于美国夏令时期间。发布时间基于 BLS 官方发布日程页面的惯例——每月第一个星期五,美东时间上午 8:30。具体日期以 BLS 官方日程页面为准。
Q9:国庆期间外汇市场正常交易吗?
A:外汇是 24/5 市场,国庆期间全程运行。但外汇市场没有单一权威机构定义的"收盘时间"——BIS 不定义收盘时间,FX Global Code 不定义截止时间,CLS 定义的是结算截止时间(纽约时间 12:00)。不同来源对周五收盘时间的说法存在差异,监控系统不能硬编码单一时间。
Q10:自建多市场交易日历的成本有多高?
A:成本不在第一行代码,在持续维护。交易日历需要按市场分开维护(A 股、港股、美股、外汇各一套),每年节假日安排调整都要跟进;通道状态(如港股通暂停/恢复)由不同机构分别发布,不在标准交易日历里;WebSocket 会话管理需要处理重连、注销、重订的完整逻辑。这是一项每年都要重新对一遍的持续性成本。
参考来源
本文引用的来源按权威等级排列。A 级为可直接引用的官方规则或监管文件,B 级为需条件化引用的行业文档或规则文本,C 级为国际组织报告。
A 级来源
| 来源 | 内容 | 时间 | 引用位置 |
|---|---|---|---|
| 中国创盈市场服务有限公司《关于深港通下港股通交易日安排的通知》 | 深港通下港股通 2026 年国庆期间 10 月 1 日至 7 日不提供服务,10 月 8 日恢复 | 2026-09-17 | 维度一、维度三、FAQ Q3 |
| 中国投资信息有限公司《关于 2026 年沪港通下港股通交易日安排的通知》 | 沪港通下港股通 2026 年全年交易日安排,国庆部分口径与深港通一致 | 2025-12-22 | 维度一、维度三、FAQ Q3 |
| SEC Marketing Rule(17 CFR 275.206(4)-1(e)(8)) | 将 backtested performance 纳入 hypothetical performance 定义,要求披露后见之明偏差和局限性 | 2020 年通过,2022-11-04 合规日期 | 结尾段 |
| 香港交易所 OMD-C Binary Protocol 规范 | 会话管理机制:30 秒心跳间隔、5 秒响应超时、断线后等待 SendKey(1105) 重新登录 | 未标注具体版本 | 维度四、FAQ Q7 |
B 级来源
| 来源 | 内容 | 时间 | 引用位置 |
|---|---|---|---|
| 纳斯达克盘前盘后规则文本(搜索摘要) | 盘后时段定义为"4:00 或 4:15 开始";盘前 4:00–9:30 | 未标注具体版本 | 维度二 |
| NYSE Crossing Session I/II 历史规则(搜索摘要) | Crossing Session I:4:15–5:00,以收盘价执行单股票交叉;Crossing Session II:4:00 起,组合交易 | 历史规则,部分已修订 | 维度二 |
| BLS 官方发布日程页面 | 就业状况报告发布日程,每月第一个星期五上午 8:30 ET | 持续更新 | 维度二、第五层、FAQ Q8 |
C 级来源
| 来源 | 内容 | 时间 | 引用位置 |
|---|---|---|---|
| BIS 三年期调查相关文件 | 调查目的为衡量外汇市场规模和结构,不定义市场收盘时间 | 2025 年调查(最新一期) | FAQ Q9 |
| FX Global Code | 外汇市场良好实践准则,不定义交易截止时间 | 2017 年首版,持续更新 | FAQ Q9 |
| CLS 结算系统运营说明 | 最终支付截止时间:纽约时间 12:00(EUR、CHF、GBP、USD、CAD) | 持续更新 | FAQ Q9 |
说明:本文中标注为 B 级的来源,来自规则文本的搜索摘要,未获取官网原文链接,具体规则编号以官方为准。标注为 C 级的来源,来自国际组织报告的搜索摘要,未获取完整原文。港股市场在 10/2 至 10/7 的开市状态,当前没有港交所官方来源,按港股交易日历惯例推断,以港交所官方公告为准。