AllTick
-
港股 股票市场数据股票apiAllTick金融科技交易时间

香港股票市场数据:了解交易时段与市场假期

了解港交所交易时段、2026年市场假期及半日市安排,结合 AllTick 港股行情数据,构建更可靠的港股监控应用。

AllTick阅读 5 分钟

香港股票监控应用可能会在中午 12:15 停止接收价格更新,即使 WebSocket 连接仍然保持正常。此时,应用是否应该重新连接?还是说,市场只是按照正常的交易时间安排暂停了交易?

对于开发股票仪表盘、股票观察列表和自动化市场监控系统的金融科技开发者来说,区分这两种情况非常重要。如果应用将每一段没有价格更新的时间都视为连接故障,就可能产生不必要的告警、反复连接正常的数据流,并错误地展示最新可用的市场数据。

要正确理解香港股票市场数据,仅仅了解交易所的开盘和收盘时间是不够的。开发者还需要考虑开市前竞价、收市竞价、延长上午交易、市场假期以及半日市安排。

香港交易所(HKEX)的交易日历是正确处理这些情况的基础。

了解 HKEX 交易时段

香港证券市场通常在星期一至星期五交易,指定的市场假期除外。与采用单一连续交易时段的市场不同,HKEX 将一个交易日划分为多个不同的时段。

以下时间均为香港时间(HKT,UTC+8)。

交易时段HKEX 交易时间市场活动
开市前时段09:00–09:30输入订单及开市价格确定
上午交易时段09:30–12:00持续交易
延长上午交易时段12:00–13:00符合资格证券的延长交易
下午交易时段13:00–16:00持续交易
收市竞价时段16:00–16:10收市价确定

开市前时段采用竞价机制,而不是普通的持续交易。该时段包括输入买卖盘、不可取消时段、随机配对以及正式交易于上午 9:30 开始前的阻止时段。

上午交易时段持续至中午 12:00。随后,延长上午交易时段会继续至下午 13:00。不过,只有获得 HKEX 指定延长交易资格的证券才能参与这一时段。应用不能假设所有在香港上市的股票都可以在这段时间内交易。

正常的下午交易于 13:00 恢复,并在 16:00 结束。不过,持续交易结束并不意味着整个市场交易流程已经完成。

在收市竞价时段(CAS)期间,符合资格的证券会进行收市价确定。该时段于 16:00 开始,并在 16:08 至 16:10 之间随机确定的时间结束。

CAS 包括参考价格确定、输入订单、不可取消时段以及随机收市。开发者在处理价格更新和展示市场状态时,应当区分竞价交易与持续交易。

有关具体交易时段及安排,可以参考 HKEX 证券市场交易时间。

2026 年香港市场假期与半日市安排

仅了解交易时间还不足以判断香港股票是否应该接收行情更新。应用还需要知道交易所在特定日期是否正常开市。

HKEX 每年都会公布证券市场假期安排。根据其公布的 2026 年官方日历,以下日期为市场假期:

月份2026 年香港市场假期
1 月1 月 1 日
2 月2 月 17 日–19 日
4 月4 月 3 日、6 日、7 日
5 月5 月 1 日、25 日
6 月6 月 19 日
7 月7 月 1 日
10 月10 月 1 日、19 日
12 月12 月 25 日

这些日期包括农历新年、复活节相关假期、劳动节、端午节、国庆节以及其他香港公众假期所对应的主要交易所休市日期。星期六和星期日也属于非交易日。

另外,还有三个日期需要特别处理:

  • 2026 年 2 月 16 日:农历新年前夕
  • 2026 年 12 月 24 日:圣诞节前夕
  • 2026 年 12 月 31 日:新年前夕

这些日期属于半日市,而不是全天休市。上午交易时段照常进行,但不会安排延长上午交易时段和下午交易时段。对于符合 CAS 资格的证券,收市竞价时段从中午 12:00 开始,并在 12:08 至 12:10 之间随机确定的时间结束。

这一差异对于自动化市场监控系统非常重要。如果只通过星期几判断市场是否开市,应用就可能将半日市下午的正常停盘错误识别为意外的市场中断。

生产环境中的应用应该分别维护全天市场假期和半日市日期记录。当 HKEX 公布下一年度的交易日历时,也应该及时更新应用中的日历数据。

开发者可以参考 HKEX 官方 2026 年证券市场假期安排,维护应用中的交易日历。

如何在股票监控应用中处理交易时段

假设有一个股票监控仪表盘正在监控腾讯控股(700.HK)。在正常交易时段内,应用会通过市场数据连接持续接收价格更新。而在其他时间段,没有新的成交数据并不一定意味着发生了异常。

与其仅仅依赖接收到的消息,不如在应用中主动维护市场交易状态。

例如,可以设置以下状态:

  • PRE_OPEN:HKEX 正在进行开市竞价。
  • MORNING_CONTINUOUS:上午持续交易正在进行。
  • EXTENDED_MORNING:该证券符合延长上午交易的资格。
  • MIDDAY_BREAK:该证券当前没有安排交易时段。
  • AFTERNOON_CONTINUOUS:下午持续交易正在进行。
  • CAS_WINDOW:当前时间处于预定的收市竞价时段窗口内。
  • MARKET_HOLIDAY:交易所因预定市场假期而休市。

下面的 Python 示例展示了如何根据 2026 年香港交易日历判断市场交易状态。

text
from datetime import date, datetime, time
from zoneinfo import ZoneInfo

HK_TZ = ZoneInfo("Asia/Hong_Kong")

# 2026 年 HKEX 证券市场假期
HKEX_HOLIDAYS_2026 = {
    date(2026, 1, 1),
    date(2026, 2, 17),
    date(2026, 2, 18),
    date(2026, 2, 19),
    date(2026, 4, 3),
    date(2026, 4, 6),
    date(2026, 4, 7),
    date(2026, 5, 1),
    date(2026, 5, 25),
    date(2026, 6, 19),
    date(2026, 7, 1),
    date(2026, 10, 1),
    date(2026, 10, 19),
    date(2026, 12, 25),
}

# 2026 年 HKEX 半日市日期
HKEX_HALF_DAYS_2026 = {
    date(2026, 2, 16),
    date(2026, 12, 24),
    date(2026, 12, 31),
}


def get_hkex_session(
    now,
    extended_morning_eligible=False,
    cas_eligible=False
):
    if now.tzinfo is None or now.utcoffset() is None:
        raise ValueError("A timezone-aware datetime is required")

    local_time = now.astimezone(HK_TZ)
    trading_date = local_time.date()
    current_time = local_time.time().replace(tzinfo=None)

    # 本示例仅适用于 2026 年。
    # 对于其他年份,请加载相应年度的 HKEX 交易日历。
    if trading_date.year != 2026:
        raise ValueError("Please load the correct annual HKEX calendar")

    if trading_date.weekday() >= 5:
        return "WEEKEND"

    if trading_date in HKEX_HOLIDAYS_2026:
        return "MARKET_HOLIDAY"

    half_day = trading_date in HKEX_HALF_DAYS_2026

    if time(9, 0) <= current_time < time(9, 30):
        return "PRE_OPEN"

    if time(9, 30) <= current_time < time(12, 0):
        return "MORNING_CONTINUOUS"

    if half_day:
        if (
            cas_eligible
            and time(12, 0) <= current_time < time(12, 10)
        ):
            return "CAS_WINDOW"

        return "OUTSIDE_SESSION"

    if time(12, 0) <= current_time < time(13, 0):
        if extended_morning_eligible:
            return "EXTENDED_MORNING"

        return "MIDDAY_BREAK"

    if time(13, 0) <= current_time < time(16, 0):
        return "AFTERNOON_CONTINUOUS"

    if (
        cas_eligible
        and time(16, 0) <= current_time < time(16, 10)
    ):
        return "CAS_WINDOW"

    return "OUTSIDE_SESSION"


now = datetime.now(HK_TZ)

session = get_hkex_session(
    now,
    extended_morning_eligible=False,
    cas_eligible=True
)

print("Hong Kong Market Session:", session)

这段代码展示了三个重要处理方式:将时间戳转换为香港本地时间、在判断交易时段前检查市场假期,以及将半日市与正常交易日分开处理。

在腾讯的示例中,延长上午交易资格设置为 False,而不是默认开启。只有被 HKEX 指定为延长交易证券的股票,才能参与延长上午交易时段。该参数应根据相应的交易所规则和证券名单进行判断。

CAS_WINDOW 表示当前时间处于收市竞价的预定时间窗口内,并不能确认整个窗口期间竞价都仍在进行,因为实际收市时间是随机确定的。在正常交易日,市场可能早于 16:10 收市;在半日市,市场也可能早于 12:10 收市。如果应用需要精确判断实际收市状态,就必须从适当的交易所状态数据源获取相关信息。

这只是针对 2026 年的参考实现,并不是完整的生产环境交易日历。生产系统还应加载每年更新的市场假期,核实不同证券的交易安排,并考虑交易所发布的临时公告、恶劣天气下的交易安排以及个别证券的停牌情况。

将 AllTick 香港股票市场数据接入应用

正确处理市场日历之后,下一个挑战就是获取驱动应用运行的价格数据。

对于开发香港股票观察列表或市场监控仪表盘的开发者来说,AllTick Stock API 可以提供香港股票、美国股票和 A 股市场数据,包括股票成交数据、报价以及历史 K 线信息。

假设有一个仪表盘需要监控腾讯控股,其股票代码为 700.HK。应用可以使用 REST API 获取历史 K 线数据,用于初始化图表或恢复最后可用的市场信息。

例如,下面的请求用于获取最近两条一分钟 K 线数据:

text
import json
import os
import requests
from urllib.parse import quote

API_KEY = os.environ["ALLTICK_API_KEY"]

query_data = {
    "trace": "hk-market-example",
    "data": {
        "code": "700.HK",
        "kline_type": 1,
        "kline_timestamp_end": 0,
        "query_kline_num": 2,
        "adjust_type": 0
    }
}

base_url = (
    "https://quote.alltick.co/quote-stock-b-api/v1/kline/"
)

encoded_query = quote(
    json.dumps(query_data, separators=(",", ":")),
    safe=""
)

response = requests.get(
    base_url + encoded_query,
    headers={"X-API-Key": API_KEY},
    timeout=10
)

response.raise_for_status()

result = response.json()

if result.get("ret") != 200:
    raise RuntimeError(f"AllTick API error: {result}")

print(result["data"])

其中,kline_type: 1 表示一分钟 K 线,而 query_kline_num: 2 表示请求两条记录。该请求使用香港股票 API 的基础地址,以及 X-API-Key 认证请求头。

这个示例使用 AllTick REST API 获取历史 K 线数据。它获取的是 K 线记录,而不是持续推送的实时 Tick 数据。对于需要持续更新价格的仪表盘来说,WebSocket 订阅是更合适的数据传输方式。

还需要注意的是,行情数据 API 与交易所日历是两个不同的概念。AllTick 已公开的 REST API 包含面向 SSE、NYSE 和 NASDAQ 的停牌及复牌接口,但这些接口不能被当作 HKEX 市场假期日历使用。开发者应单独维护香港市场交易日程,而不能仅仅因为 API 连接成功,就认定市场目前处于交易状态。

可靠的市场监控工作流程需要结合三项独立信息:HKEX 交易日历、具体证券的交易规则,以及从 AllTick 接收到的最新市场数据。

当市场休市时,应用可以保留最后一次获取的价格及其时间戳。在预定的交易休息时段内,应用可以抑制不必要的连接告警。当市场应该处于交易时段,但价格更新意外停止时,系统便可以进一步检查 WebSocket 连接、订阅状态以及数据传输链路。

对于正在开发香港股票应用的团队来说,将交易所时间安排与数据传输状态分开处理,可以让市场监控更加可预测,避免将正常的交易所停盘误判为技术故障。

通过 AllTick Stock API 接口入口,可以开始接入香港股票报价和历史市场数据。将行情数据源与独立维护的 HKEX 交易日历结合起来,有助于构建更加可靠的股票监控系统。

立即开始接入市场数据

几秒内生成免费 API 密钥,通过一个端点连接所有市场。