本文面向交易系统、OMS/EMS、FIX 网关和程序化交易研发人员,不构成投资建议,也不能替代券商、交易所当日公告、证券主数据和合规意见。

资料核对日期:2026-08-12。规则会调整;实际送单前必须以交易所当日有效规则、券商准入、证券状态、交易日历、公司行动及实时行情为准。

一、先给结论:港股和 A 股不能共用一套“股票下单校验”

把港股仅视为“代码更短、币种变成 HKD”的做法是危险的。对 OMS/FIX 来说,两地至少有五类根本差异:

  1. 数量单位不同:A 股普通股票通常以 100 股为最小买入单位;港股以证券级别的 board lot 为单位,必须依赖主数据,不能硬编码为 100 股。
  2. 价格网格不同:A 股股票通常以人民币 0.01 元为最小变动单位;港股由 Spread Table Code 决定最小价差,且 2025 年起的最小价差下调安排使“旧版固定 tick 表”尤其容易过期。
  3. 价格约束不同:A 股主要是日涨跌幅、连续竞价有效申报价格范围和无涨跌幅标的的临停机制;港股没有 A 股式普遍日涨跌停,但有报价规则、名义价九倍/九分之一限制、POS/CAS 各自的价格范围和 VCM 等机制。
  4. 时段和订单类型不同:港股 POS/CAS 只能用竞价订单系列,且有明确 no-cancel / blocking 时段;连续交易可用限价、增强限价、特别限价。A 股的集合竞价、连续竞价、收盘集合竞价和盘后固定价格交易则按板块/交易所不同而变化。
  5. 卖空与通道不同:港交所受监管卖空要求证券在指定名单、遵守卖空价格规则并具备覆盖安排;A 股卖空来自融资融券/证券出借业务,必须经过账户、标的和券商业务资格校验。香港本地 DMA、Connect港股通北向/南向、QFII 均不是同一个市场通道,不能复用风控语义。

本文所依据的项目原始文档为 /root/proj/go/oems-fix-hkex/docs/港股vs A股下单规则对比.md。该文档对当前 MS/HKEX DMA 的 FIX 字段和代码缺口很有价值;本文在此基础上补充了交易所最新公开资料,并将 A 股分主板、科创板、创业板、北交所分别整理。

二、适用范围和重要边界

本文比较的是:

  • 港股:香港交易所证券市场、OTP-C 自动对盘的本地港股订单;
  • A 股:上交所主板与科创板、深交所主板与创业板、北交所股票竞价交易;
  • 不等同于港股通:经香港交易所接入沪深交易所的北向交易遵循沪深交易所交易时段与撤单窗口,不是本地 HKEX 证券市场的 POS/CTS/CAS 订单模型;
  • 不覆盖全部产品:ETF、REITs、债券、期权、结构性产品、权证、存托凭证、大宗交易和盘后交易均可能有专门规则。下文仅在需要时点出差异。

因此,订单预校验的第一步不是“代码长度判断”,而是先解析:

1
venue / market / board / product type / trading channel / account / order session

例如 00700.HK 的香港本地 DMA 限价买单,与沪股通买入 600000.SH、创业板 300xxx.SZ、北交所 8xxxxx.BJ,都应落入不同规则包。

三、核心差异总表

维度港股(HKEX 本地证券市场)A 股主板科创板创业板北交所
普通买入最小数量证券定义的 board lot100 股限价/市价通常最少 200 股100 股100 股
数量增量board lot 的整数倍;零股走特别/零股市场100 股整数倍;不足 100 股余额可一次卖出超过 200 股的部分可按 1 股递增100 股整数倍;不足 100 股余额可一次卖出100 股整数倍;不足 100 股余额可一次卖出
普通竞价单笔上限3,000 board lots通常 100 万股限价 10 万股;市价 5 万股限价 30 万股;市价 15 万股100 万股
股票最小价位按证券的 Spread Table Code / 价格档位0.01 元0.01 元0.01 元0.01 元(规则允许交易所按股价实施不同档位)
常规日涨跌幅无普遍 A 股式日涨跌停±10%±20%±20%±30%
IPO 初期无涨跌幅不适用 A 股“五日”模型注册制股票上市初期以交易所规则为准前 5 个交易日无涨跌幅前 5 个交易日无涨跌幅公开发行股票上市首日无涨跌幅
连续交易主要订单Limit / Enhanced Limit / Special Limit限价、市价申报限价、市价申报限价、市价申报限价、市价申报(市价带保护限价)
竞价时段订单At-auction / At-auction limit常规集合竞价申报同左同左同左
卖空指定证券、受监管卖空和报价规则融券标的/账户/券源约束可作为融资融券标的等仍须按业务规则执行同左按北交所及券商融资融券规则
结算与回转港股证券通常 T+2 交收;是否可日内回转取决于券商与持仓A 股股票买入当日通常不可卖出(T+1)同左同左同左

表中数量、时段、价格等必须在下单时再次与证券主数据和交易所规则版本交叉校验。

四、港股:交易系统必须建模的订单约束

4.1 数量:board lot、零股与 3,000 手上限

香港交易所 OTP-C 是订单驱动市场。对于自动对盘证券:

  • 最大订单数量为 3,000 个 board lots
  • 每个价格队列最多 40,000 笔订单
  • 每个 broker ID 的未完成订单数上限已移除;
  • 小于一个 board lot 的零股不进入普通自动对盘簿,应走 special lot / odd lot 处理路径。

因此,港股数量校验不可写成 qty % 100 == 0。正确模型应为:

1
2
3
4
boardLot := instrument.board_lot
qty > 0
qty % boardLot == 0
qty <= 3000 * boardLot

同时需把 board_lot 作为带生效日期的证券主数据。拆股、合股、供股、证券迁移或交易单位变更后,旧缓存会直接造成拒单或错误下单。

来源:HKEX Trading MechanismHKEX Securities Market FAQ

4.2 价格:不要把“4 位小数”当成港股 tick 规则

原始项目文档中使用的传统港股价格表已经需要重新核实。HKEX 的最小价位由证券使用的 Spread Table Code 决定;2025 年公布的最小价差下调 FAQ 明确说明:不同产品类别与阶段可能使用不同表,行情的 Security Definition 消息会提供 Spread Table Code。

以 HKEX 2025 年公布的 Phase 1 更新 Spread Table Code 01 为例,适用于除债券、交易所买卖期权、ETP 和结构性产品以外的相关证券:

价格区间(货币单位)最小价位
0.01–0.250.001
>0.25–0.500.005
>0.50–10.000.010
>10.00–20.000.010
>20.00–50.000.020
>50.00–100.000.050
>100.00–200.000.100
>200.00–500.000.200
>500.00–1,000.000.500
>1,000.00–2,000.001.000
>2,000.00–5,000.002.000
>5,000.00–9,995.005.000

工程要点:

  • FIX/OMS 内部价格建议使用 decimal 或定点整数,不要用 float64 比较 tick 整除关系
  • 主数据中保存 spread_table_code、产品类别和生效版本;
  • 下单前按当前证券的表计算合法 tick,而不是只限制小数位数;
  • 股票、ETP、债券、结构性产品可能不是同一张表,不能把普通股规则套给所有 .HK 证券。

来源:HKEX《Reduction of Minimum Spreads》FAQ(2025-06-12)

4.3 港股报价、竞价和波动控制

港股没有 A 股全市场统一的 ±10% / ±20% / ±30% 日涨跌幅。订单输入仍受多层控制:

  • 报价价格通常不得较名义价偏离九倍或以上,也不得低于其九分之一;
  • 连续交易的报价规则、证券类型和当期规则可能另有附加范围;
  • POS 的第一阶段,竞价限价单须位于前收盘价 ±15% 之内;
  • CAS 以参考价为中心设定 ±5% 的首阶段价格限制,之后进入更严格的订单簿约束;
  • VCM 适用于连续交易时段的 board lot 订单,不适用于 POS 和 CAS。

对 OMS 的含义是:港股价格校验应返回具体失败原因,至少区分 invalid_ticknominal_price_guardsession_price_bandvcM_or_venue_guardbroker_price_guard,而不是将所有错误统一标记为“超涨跌停”。

来源:HKEX Securities Market FAQHKEX Trading Mechanism

4.4 时段和撤单:POS / CTS / CAS 是三个不同状态机

香港证券市场完整交易日的公开时段为:

时段时间订单行为要点
POS(开市前时段)09:00–09:30单一价格竞价
CTS 上午09:30–12:00连续交易
Extended Morning12:00–13:00延续上午订单簿的交易时段
CTS 下午13:00–16:00连续交易
CAS(收市竞价)16:00–随机 16:08–16:10 收市适用于 CAS 证券

POS 细分为:

POS 子阶段时间是否可撤/改
Order Input09:00–09:15可输入、修改、取消
No-cancellation09:15–09:20可输入;不可修改、取消
Random Matching09:20–随机至 09:22按 no-cancel 规则;随机撮合
Blocking撮合后至 09:30不可输入、修改、取消

CAS 有参考价形成、订单输入、不可撤销、随机收市四个阶段。CAS 中,订单输入阶段可提交/修改/取消合规的竞价订单;进入 no-cancellation 后不得修改或取消,随机收市在两分钟内随机结束。

连续交易与竞价时段的订单类型也不同:

  • POS/CAS:只接受 at-auction order、at-auction limit order;
  • CTS:接受 limit、enhanced limit、special limit,且可有 All-or-Nothing qualifier;
  • 因而“普通限价单在 09:10 可下”或“CAS 任意时间可撤”的系统行为都是错误的。

来源:HKEX Trading HoursHKEX Trading FAQHKEX Trading Mechanism

4.5 卖空:必须把“是否可卖空”与“是否有库存”分开

港交所的受监管卖空不是普通 SELL 的一个备注:

  1. 证券必须在 HKEX 的 Designated Securities Eligible for Short Selling 名单中;该名单按季度修订;
  2. 订单还要满足受监管卖空及卖空报价规则;在连续交易中,卖空报价不能低于当时最优卖价;
  3. POS 中合资格证券的卖空只能作为 at-auction limit order,且价格不得低于前收盘价;无前收盘价时会被拒绝;
  4. CAS 中卖空也有特定订单类型、价格及豁免规则;at-auction 卖空订单仍不允许;
  5. 上游券商、借券/locate 系统还会要求可覆盖性、账户资格和声明字段。

对当前 MS/HKEX FIX DMA 设计,SELL_SHORT 应通过独立的 short-sale 校验链,而不是只复用普通卖出路径:

1
2
3
4
5
6
account short-sale permission
→ designated-security snapshot
→ locate / borrow coverage state
→ session-specific short-sale order type
→ tick / short-sale price rule
→ broker FIX declaration and audit trail

原始项目文档指出 MS 侧可能要求 Tag 114(LocateBroker)或 Tag 58 精确文本等专有字段。这属于券商 FIX 合约层,必须以已签署的 MS 规格和 UAT 回报为准;它不能替代交易所的 designated-security、价格和覆盖校验。

来源:HKEX Regulated Short SellingHKEX Trading FAQ

五、A 股通用规则:主板、科创板、创业板和北交所的共同底座

5.1 沪深普通股票的基础模型

上交所和深交所股票竞价交易均以集合竞价和连续竞价为主。沪深两市的常规 A 股日内时间结构为:

时段沪深股票竞价交易
开盘集合竞价09:15–09:25
连续竞价(上午)09:30–11:30
连续竞价(下午)13:00–14:57
收盘集合竞价14:57–15:00

通常在 09:20–09:25、14:57–15:00,交易主机不接受参与竞价交易的撤销申报。这里的“接受委托时间”与“交易所处理时点”不必然相同:例如港股通北向通道中,香港交易所可接受但沪深交易所尚未开始处理的时窗要单独建模。

以深交所 2023 年交易规则为例,主板普通股票的基础约束包括:

  • 买入 100 股或其整数倍;卖出余额不足 100 股可一次性卖出;
  • 普通竞价单笔不超过 100 万股;
  • A 股申报价格最小变动单位为 0.01 元;
  • 主板股票价格涨跌幅为 ±10%;
  • 连续竞价限价单受“价格笼子”约束:买入不高于基准价的 102% 与高于基准价 10 个最小变动单位中的较高值;卖出不低于基准价的 98% 与低于基准价 10 个最小变动单位中的较低值;
  • 市价申报只适用于有涨跌幅限制证券的连续竞价期间。

来源:深圳证券交易所交易规则(2023 年修订)上海证券交易所交易规则(2026 年修订)

5.2 上交所 2026 年规则更新:不要按旧主板模型实现

上交所发布的《上海证券交易所交易规则(2026 年修订)》已于 2026-07-06 实施,取代 2023 年规则。与 OMS 直接相关的更新至少有:

  • 盘后固定价格交易的适用证券范围由科创板股票扩展至全部 A 股和交易型开放式基金
  • 基金收盘阶段由连续竞价调整为收盘集合竞价;
  • 主板风险警示股票的涨跌幅限制由 ±5% 调整为 ±10%

因此,沪市规则包至少要以 effective_date 区分 2026-07-06 前后版本。对风险警示证券,不能继续把“沪市 ST 一律 ±5%”写死。

来源:上交所修订发布交易规则公告上交所 2026 年交易规则

六、A 股各板块的下单细则

6.1 沪深主板

项目规则要点
涨跌幅正常股票通常 ±10%
数量买入 100 股整数倍;零股余额可一次卖出;单笔通常不超过 100 万股
价格最小变动 0.01 元;连续竞价限价单需经过价格笼子
新股注册制下的新股上市初期交易机制须按交易所适用规则和当日证券状态处理,不能以普通日的 ±10% 风控替代
风险警示沪市自 2026-07-06 起主板风险警示股票调整为 ±10%;深市现行公开规则中主板风险警示股票为 ±5%,需按深市当期正式规则再次确认
回转普通 A 股买入后通常 T+1 才可卖出;不要把 ETF 的 T+0 规则套给股票

系统应分开校验 daily_price_limiteffective_price_range:前者是静态/日内基准价计算,后者是连续竞价时刻依赖盘口和最新价的动态约束。

6.2 科创板(上交所)

科创板不是“主板涨跌幅改成 20%”这么简单:

项目规则要点
涨跌幅常规竞价交易 ±20%
新股首次公开发行上市后前 5 个交易日无涨跌幅限制
数量限价与市价单笔申报均不少于 200 股;限价最多 10 万股,市价最多 5 万股;超过 200 股部分可按 1 股递增;不足 200 股余额可一次卖出
交易方式竞价交易、盘后固定价格交易、大宗交易
盘后固定价格以收盘价按时间优先逐笔连续撮合;历史投教资料为 15:05–15:30,实际接入须以 2026 上交所规则及券商当日支持状态为准
风险控制需处理无涨跌幅新股的盘中临时停牌、价格范围和状态变化

来源:证监会/上交所科创板投教:参与科创板股票交易上交所 2026 年交易规则

6.3 创业板(深交所)

项目规则要点
涨跌幅常规竞价交易 ±20%
新股首次公开发行上市后前 5 个交易日无涨跌幅限制
数量买入 100 股整数倍,卖出零股余额可一次卖出;限价单笔最多 30 万股,市价单笔最多 15 万股
价格0.01 元;连续竞价限价单有基准价 ±2% 的价格笼子机制,并结合最小价位数量边界
盘后固定价格以收盘价、时间优先撮合;现行公开规则列示交易为 15:05–15:30,申报可在 09:15–15:30 接收(停牌状态等例外需处理)
无涨跌幅时价格较开盘价首次达到或超过 ±30%、±60% 时,存在 10 分钟盘中临停机制
风险警示/退市整理常见规则为 ±20%,退市整理首日无涨跌幅;必须读取证券状态而非只看代码前缀

说明:互联网上仍可见早期创业板征求意见稿中“限价 10 万、市价 5 万”的数字;对接生产系统应使用正式现行规则的 限价 30 万、市价 15 万,并以深交所公告为最终依据。

来源:深圳证券交易所交易规则(2023 年修订)

6.4 北交所

北交所已发布新的《北京证券交易所交易规则》,除特别说明条款外自 2026-07-06 施行。与普通沪深主板的关键差异:

项目规则要点
涨跌幅常规股票 ±30%
无涨跌幅向不特定合格投资者公开发行股票上市首日、退市整理首日等情形无涨跌幅
数量竞价交易单笔不少于 100 股;卖出不足 100 股余额可一次性卖出;最大 100 万股
价格0.01 元;规则允许按股价实施不同的最小价位
市价单市价申报带买入保护限价或卖出保护限价;适用于有涨跌幅限制证券连续竞价期间
收盘收盘集合竞价产生收盘价;不能形成则以最后一笔成交价等规则处理
大宗单笔不少于 10 万股或金额不少于 100 万元;属于不同于普通竞价交易的路径

北交所的 ±30% 并不表示可以放松风控。订单还必须通过动态有效价格范围、市价保护限价、账户适当性、交易方式和证券状态校验。

来源:北京证券交易所交易规则(2026)北交所交易规则热点问答

七、港股与 A 股在订单状态机上的差异

7.1 订单接受不等于可成交

建议 OMS 以“交易所接受状态”而非用户界面显示时间作为唯一时钟,并至少建模:

1
2
3
4
5
6
7
PRECHECKED
→ ROUTE_ACCEPTED
→ VENUE_ACCEPTED
→ LIVE
→ PARTIALLY_FILLED / FILLED
→ CANCEL_PENDING
→ CANCELED / REJECTED / EXPIRED

不同市场在 VENUE_ACCEPTED → LIVE 前有不同的时段限制:

  • 港股 POS/CAS 可出现订单接受但进入 no-cancel、blocking 或随机撮合阶段;
  • A 股集合竞价中,09:20–09:25、14:57–15:00 的撤单拒绝必须由时段状态控制;
  • 盘后固定价格交易订单有独立有效期、成交价格和撤单条件;
  • 市价单可能因无对手方、保护价或有效竞价范围而立即撤销/拒绝,不应被误标为普通“撤单成功”。

7.2 幂等和风控键

下单前的规则校验应是纯函数、可审计且可重放;但订单频率、同价位队列和累计买入上限等是状态型规则。建议风险键至少含:

1
trading_date + account + market + board + instrument + side + order_type + session

港股的 40,000 订单/价位限制需要按交易所队列而非仅本机计数理解;如果 OMS 无法得到完整交易所队列,只能做本方预警,不能宣称已完成交易所级校验。

八、面向 MS/HKEX FIX 4.2 DMA 的落地检查清单

当前项目背景是 Morgan Stanley Razer 平台经 FIX 4.2 接入 HKEX。本地订单适配层应在发出 NewOrderSingle 前完成市场语义转换,并将券商专有字段与交易所规则分层。

8.1 市场识别与 FIX 证券字段

港股 DMA 不应复用 A 股后缀、币种或交易所字段。建议校验如下:

项目港股 DMA 期望常见 A 股遗留错误
本地代码5 位港股代码作为内部标识,展示/证券标识可形成 00700.HK600000.SH / 000001.SZ 规则强拼后缀
Currency(15)HKD硬编码 CNY
SecurityExchange(207)HK / HKEX(以券商合约为准)SH / SZ / BJ
ExDestination(100)HK / HKEX(以券商合约为准)SH / SZ / BJ
SecurityIDSource(22)RIC 或券商规定值(原项目为 5将 A 股 Ticker 语义带入
路由TargetSubID(57) 等按 MS DMA/MBA/SORT 合约沿用 A 股通道路由或 QFII 标志
做空Side、locate/covered 声明、指定证券与价格规则共同校验只设置 SELL_SHORT 而忽略覆盖与声明

注意:具体 Tag 值必须以 MS 已签署的 FIX specification、UAT session 配置和回报为准;本文不将博客内容作为生产 FIX 合约。

8.2 建议的分层规则引擎

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
1. Instrument resolver
   code → market / board / product / currency / board lot / tick table / status

2. Session resolver
   venue calendar + venue time → POS / CTS / CAS / A-share auction / after-hours

3. Stateless validator
   side, qty, tick, order type, TIF, venue mapping, FIX required fields

4. Stateful validator
   position, sellable quantity, T+1, locate, rate limit, risk quota, duplicate ClOrdID

5. Broker adapter
   MS-specific tags, account routing, session selection, reject normalization

6. Audit/reconciliation
   request snapshot, resolved rule version, raw FIX, broker reject text, venue status

这种结构能避免将“港股 board lot”“创业板价格笼子”“北交所保护限价”“MS LocateBroker”混入同一个巨型 if/else,也能让规则版本切换、模拟盘回放和事故审计可复现。

九、原项目文档的代码覆盖结论:哪些应优先补齐

原始文档已指出当前 HKEX 路径中若干正确项:5 位代码检查、HKD、HK Exchange/Destination、DMA 路由、ExecInst=1、账户映射及启动配置检查等;也指出 board lot、最大订单量、tick、时段和做空 locate 等缺口。

结合最新公开资料,建议按以下顺序推进:

优先级事项原因建议验收
P0港股市场字段不再复用 A 股后缀/币种/交易所发错市场语义属于直接交易风险港股 NewOrderSingle 字段单测 + UAT raw FIX 对照
P0SELL_SHORT 独立卖空校验与 MS 声明可能 hold/reject,也可能造成合规问题指定证券、locate、POS/CAS/CTS 价格规则、FIX tag 测试
P1board lot 主数据与 3,000 手上限防止数量拒单与错误零股路径主数据版本、拆合股回归、边界数量测试
P1tick table code 驱动的价格校验旧表可能过期,产品间有差异每张表的边界价与浮点误差回归测试
P1港股 POS/CTS/CAS 状态机防止错误订单类型、错误撤单时钟冻结测试、随机期/no-cancel/blocking 测试
P1沪深/北交所分板块规则包主板、科创、创业、北交所不能共用数量/涨跌幅配置参数化规则测试 + 当日证券状态测试
P2本方频率、重复单和队列预警降低券商/交易所拒单与操作风险限流、幂等、恢复重放测试

高风险原则:应先实现只读预校验和拒单原因审计;涉及生产规则切换、券商配置、交易路由和任何实盘下单前,必须有 UAT 证据、回放测试、变更审批与可回滚方案。

十、研发测试矩阵

至少应覆盖以下边界用例:

类别示例
港股数量board_lot=100 下 99、100、101、300000、300100;board_lot=400 下 100、400、800
港股价格各 Spread Table 边界价;0.250/0.25110.000/10.010 等;decimal 精度验证
港股时段POS 可撤→no-cancel→random→blocking;CAS 四阶段;半日市和节日前交易时段
港股卖空非指定证券、无 locate、价格低于约束、POS 中错误订单类型、CAS at-auction 卖空
沪深主板100 股、零股卖出、±10%、价格笼子、集合竞价禁撤单窗口
科创板199/200/201 股、10 万/5 万上限、前五日无涨跌幅、盘后固定价格
创业板30 万/15 万上限、±20%、价格笼子、无涨跌幅时 ±30%/±60% 临停
北交所±30%、100 万股、保护限价、市价单无对手方、上市首日无涨跌幅
FIXClOrdID 幂等、OrigClOrdID 撤改单关联、Tag 39/150 组合、部分成交 CumQty 单调、Reject 文本落库/审计

十一、官方资料与版本追踪

  1. 香港交易所 Trading Mechanism
  2. 香港交易所 Trading Hours — Securities Market
  3. 香港交易所 Securities Market Trading FAQ
  4. 香港交易所 Regulated Short Selling
  5. 香港交易所最小价差下调 FAQ(2025-06-12)
  6. 上海证券交易所交易规则(2026 年修订)
  7. 上交所关于 2026 年交易规则修订的公告
  8. 深圳证券交易所交易规则(2023 年修订)
  9. 科创板投教:参与科创板股票交易
  10. 北京证券交易所交易规则(2026)
  11. 北交所股票交易规则热点问答

最后的工程建议:将本文所有“数字规则”放入版本化、可热更新、可回放的 market-rule 数据模型;源代码只实现规则解释器和强类型校验,不要把价格表、board lot、指定卖空证券名单、交易日历或某家券商 FIX 文本硬编码到业务逻辑中。