Tradegate与Xetra交易时间和价格有何不同
Tradegate交易至22:00,Xetra于17:30收盘。比较两者交易时段,了解哪个交易场所决定官方价格,以及报价为何会有差异。
Tradegate 与 Xetra 的比较,本质上是时间问题。Xetra 的连续交易时间为中欧时间 09:00 至 17:30,收盘时还会进行收盘竞价;Tradegate 则在中欧时间 08:00 至 22:00 为同一批股票报价。Xetra 的收盘竞价决定官方价格。指数计算、基金估值和大多数数据源都会将这一价格作为德国上市股票的收盘价。此后四个半小时,Tradegate 和其他晚间交易场所仍可交易,但它们使用各自独立的订单簿,价格也由各自的市场决定。
Tradegate 与 Xetra:交易时段对照
以下时间均为德国当地时间。冬季采用 CET,夏季采用 CEST。
- Xetra 于 07:30 开始接受订单,开盘竞价申报阶段持续至 09:00 开盘。
- Xetra 连续交易:09:00 至 17:30,约 13:00 还会进行一次短暂的盘中竞价。
- Xetra 收盘竞价:17:30 开始,并在随后几分钟内的随机时点结束。
- Tradegate Exchange:08:00 至 22:00,连续报价,不进行竞价。
- Börse Frankfurt 和 Gettex:08:00 至 22:00。
以下两个时段仅属于晚间交易场所:Xetra 开盘前的 08:00 至 09:00,以及 Xetra 收盘后的 17:30 至 22:00。也就是说,共有五个半小时的时间,散户订单可以成交,而参考市场处于关闭状态。参考市场的节假日和半日市安排见我们的 Xetra 交易时间与节假日指南。指数期权则在不同交易场所、按不同时间表交易,详见 DAX 每日期权。
哪个交易场所的价格才是官方价格?
Xetra 是德国股票的 Referenzmarkt,即参考市场。这个地位决定了官方数据的来源。17:30 的收盘竞价价格就是官方收盘价。DAX 收盘点位和其他 Deutsche Börse 指数系列都以此为基础,数据供应商也将其作为德国市场收盘价。该指数的成分股名单见DAX 包含哪些股票。
21:45 在 Tradegate 成交的一笔交易,是受监管交易所报告的真实成交。它不是官方收盘价。DAX 收盘点位早已在数小时前由 Xetra 收盘竞价确定。晚间,Deutsche Börse 会发布单独的参考值 X-DAX。该数值根据 Eurex 期货计算,而不是根据现金股票成交记录计算。
为什么同一只股票在同一分钟会显示两个价格?
几乎所有价格差异都可以由以下三种机制解释。
- 独立的订单簿。发送至 Xetra 的订单只会与 Xetra 上的其他订单撮合;发送至 Tradegate 的订单也只会在 Tradegate 撮合。两者没有共用的排队系统。
- 做市商报价,而非集中订单簿。Xetra 将多个参与者的订单汇集到一个订单簿中;Tradegate 和 Gettex 则分别由单一专业交易商提供双向报价。因此,散户订单面对的是该公司的报价,而不是市场整体订单簿。
- 没有合并行情。美国会将各交易场所的全国最佳买价和卖价合并发布。欧洲目前没有对应机制,欧盟规则正在推动建立该机制。在此之前,交易应用显示的价格取决于应用展示的是哪个交易场所。
同一分钟内相差几美分,是正常的市场结构现象,并非错误。
低流动性晚间订单簿的实际情况
以下图表并不衡量德国各交易场所的逐笔报价历史。这里展示的是背后的交易机制。美国市场采用相同结构,因此可以用美国行情数据进行测量:一个带收盘竞价的中央订单簿,两侧还有较长且流动性较低的延长交易时段。以下数据均来自 2026 年 6 月 10 日星期三的固定交易时段,时间为纽约时间。美国交易时段对应的德国时间见德国时间下的美国股市交易时间。
| 美东时间 | 成交量(百万) |
|---|---|
| 04:00 | 0.1 |
| 04:10 | 0.01 |
| 04:20 | 0.017 |
| 04:30 | 0.005 |
| 04:40 | 0.023 |
| 04:50 | 0.021 |
| 05:00 | 0.019 |
| 05:10 | 0.052 |
| 05:20 | 0.03 |
| 05:30 | 0.008 |
| 05:40 | 0.011 |
| 05:50 | 0.065 |
| 06:00 | 0.018 |
| 06:10 | 0.017 |
| 06:20 | 0.026 |
| 06:30 | 0.021 |
| 06:40 | 0.012 |
| 06:50 | 0.014 |
| 07:00 | 0.556 |
| 07:10 | 0.195 |
每个数字背后的完整 SQL
SELECT
formatDateTime(toStartOfInterval(if(has(conditions, 8),
toTimeZone(sip_timestamp, 'America/New_York') - INTERVAL 10 MINUTE,
toTimeZone(sip_timestamp, 'America/New_York')),
INTERVAL 10 MINUTE), '%H:%i') AS et_time,
round(sum(toFloat64(size)) / 1e6, 3) AS volume_millions
FROM global_markets.stocks_trades
WHERE ticker = 'SPY'
AND sip_timestamp >= toDateTime('2026-06-10 08:00:00')
AND sip_timestamp < toDateTime('2026-06-11 00:00:00')
AND NOT hasAny(conditions, [15, 16, 38])
GROUP BY et_time
ORDER BY et_time重点在于交易量分布。当天第一个区间是纽约时间 04:00,成交量为 0.1 百万股。最后一个区间是 19:50,成交量为 0.042 百万股。整个交易时段共分为 96 个十分钟区间,成交量最高的区间集中在中段较窄的时间范围内。
| 阶段 | 成交量(百万) | 占当日百分比 |
|---|---|---|
| premarket 04:00 to 09:30 | 3.34 | 5.51 |
| first 30 minutes | 5.02 | 8.28 |
| midday 10:00 to 15:50 | 37.44 | 61.76 |
| final 10 minutes and closing print | 7.18 | 11.85 |
| after hours 16:00 to 20:00 | 7.64 | 12.59 |
每个数字背后的完整 SQL
WITH
(
SELECT sum(toFloat64(size))
FROM global_markets.stocks_trades
WHERE ticker = 'SPY'
AND sip_timestamp >= toDateTime('2026-06-10 08:00:00')
AND sip_timestamp < toDateTime('2026-06-11 00:00:00')
AND NOT hasAny(conditions, [15, 16, 38])
) AS day_volume,
(toHour(toTimeZone(sip_timestamp, 'America/New_York')) * 60
+ toMinute(toTimeZone(sip_timestamp, 'America/New_York'))) AS et_minutes
SELECT
multiIf(has(conditions, 8), 'final 10 minutes and closing print',
et_minutes < 570, 'premarket 04:00 to 09:30',
et_minutes < 600, 'first 30 minutes',
et_minutes < 950, 'midday 10:00 to 15:50',
et_minutes < 960, 'final 10 minutes and closing print',
'after hours 16:00 to 20:00') AS phase,
round(sum(toFloat64(size)) / 1e6, 2) AS volume_millions,
round(100 * sum(toFloat64(size)) / day_volume, 2) AS pct_of_day
FROM global_markets.stocks_trades
WHERE ticker = 'SPY'
AND sip_timestamp >= toDateTime('2026-06-10 08:00:00')
AND sip_timestamp < toDateTime('2026-06-11 00:00:00')
AND NOT hasAny(conditions, [15, 16, 38])
GROUP BY phase
ORDER BY min(et_minutes)将同一交易时段按阶段分组,可以量化收盘竞价的作用。常规交易时段最后十分钟,包括结束该时段的收盘竞价成交,成交量占当天总成交量的 11.85%,即 7.18 百万股。premarket 04:00 to 09:30 时段占 5.51%,after hours 16:00 to 20:00 时段占 12.59%。收盘竞价会将全天挂在订单簿中的买卖兴趣集中起来,并以一个价格完成一笔成交。这正是 Xetra 在 17:30 执行的功能,而晚间交易场所都不提供这一机制。
| 美东时间 | 价差中位数(基点) | 常规交易时段中位数(基点) | 报价数量 |
|---|---|---|---|
| 04:00 | 13.76 | 1.03 | 1478 |
| 05:00 | 7.23 | 1.03 | 2069 |
| 06:00 | 9.3 | 1.03 | 518 |
| 07:00 | 12.41 | 1.03 | 2204 |
| 08:00 | 12.05 | 1.03 | 3486 |
| 09:00 | 1.38 | 1.03 | 221100 |
| 10:00 | 1.04 | 1.03 | 278714 |
| 11:00 | 1.38 | 1.03 | 307205 |
| 12:00 | 1.03 | 1.03 | 268189 |
| 13:00 | 1.02 | 1.03 | 249935 |
| 14:00 | 0.68 | 1.03 | 173988 |
| 15:00 | 0.68 | 1.03 | 231589 |
| 16:00 | 6.51 | 1.03 | 1321 |
| 17:00 | 5.83 | 1.03 | 340 |
| 18:00 | 8.94 | 1.03 | 1106 |
| 19:00 | 15.15 | 1.03 | 1099 |
每个数字背后的完整 SQL
WITH
(
SELECT round(quantileDeterministic(0.5)(
10000 * (toFloat64(ask_price) - toFloat64(bid_price))
/ ((toFloat64(ask_price) + toFloat64(bid_price)) / 2),
toUInt64(sequence_number)), 2)
FROM global_markets.cache_stocks_quotes
WHERE ticker = 'AAPL'
AND sip_timestamp >= toDateTime('2026-06-10 13:30:00')
AND sip_timestamp < toDateTime('2026-06-10 20:00:00')
AND bid_price > 0
AND ask_price > bid_price
AND sequence_number > 0
) AS regular_session_median
SELECT
formatDateTime(toStartOfHour(toTimeZone(sip_timestamp, 'America/New_York')), '%H:%i') AS et_time,
round(quantileDeterministic(0.5)(
10000 * (toFloat64(ask_price) - toFloat64(bid_price))
/ ((toFloat64(ask_price) + toFloat64(bid_price)) / 2),
toUInt64(sequence_number)), 2) AS median_spread_bps,
regular_session_median AS regular_hours_median_bps,
count() AS quote_count
FROM global_markets.cache_stocks_quotes
WHERE ticker = 'AAPL'
AND sip_timestamp >= toDateTime('2026-06-10 08:00:00')
AND sip_timestamp < toDateTime('2026-06-11 00:00:00')
AND bid_price > 0
AND ask_price > bid_price
AND sequence_number > 0
GROUP BY et_time
ORDER BY et_time流动性有成本,报价价差就是其体现。该图表按纽约时间小时,将当天所有 AAPL 报价分组,并计算以基点表示的价差中位数。一个基点等于百分之一个百分点。
常规交易时段的价差中位数为 1.03 个基点。开盘前较早的 04:00 时段为 13.76 个基点。收盘后的 19:00 时段为 15.15 个基点。同一只股票、同一天,仅因订单到达时间不同,跨越价差的成本就可能不同。
| 代码 | 收盘后成交量百分比 | 收盘后变动百分比 |
|---|---|---|
| MSFT | 12.7 | 0.191 |
| SPY | 12.59 | 0.352 |
| KO | 7.21 | 0.633 |
| NVDA | 7.05 | 0.616 |
| AAPL | 6.92 | 0.237 |
| JNJ | 4.79 | 0.038 |
每个数字背后的完整 SQL
SELECT
t.symbol AS symbol,
t.post_close_volume_pct AS post_close_volume_pct,
round(abs(100 * (b.last_evening_close / t.closing_print_price - 1)), 3) AS post_close_move_pct
FROM
(
SELECT
ticker AS symbol,
round(100 * sumIf(toFloat64(size), NOT has(conditions, 8)
AND toHour(toTimeZone(sip_timestamp, 'America/New_York')) * 60
+ toMinute(toTimeZone(sip_timestamp, 'America/New_York')) >= 960)
/ sum(toFloat64(size)), 2) AS post_close_volume_pct,
toFloat64(argMaxIf(price, size, has(conditions, 8))) AS closing_print_price
FROM global_markets.stocks_trades
WHERE ticker IN ('AAPL', 'MSFT', 'NVDA', 'SPY', 'KO', 'JNJ')
AND sip_timestamp >= toDateTime('2026-06-10 08:00:00')
AND sip_timestamp < toDateTime('2026-06-11 00:00:00')
AND NOT hasAny(conditions, [15, 16, 38])
GROUP BY ticker
HAVING countIf(has(conditions, 8)) > 0
) AS t
INNER JOIN
(
SELECT
ticker AS symbol,
toFloat64(argMaxIf(close, window_start,
toHour(toTimeZone(window_start, 'America/New_York')) * 60
+ toMinute(toTimeZone(window_start, 'America/New_York')) >= 960)) AS last_evening_close
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker IN ('AAPL', 'MSFT', 'NVDA', 'SPY', 'KO', 'JNJ')
AND window_start >= toDateTime('2026-06-10 08:00:00')
AND window_start < toDateTime('2026-06-11 00:00:00')
GROUP BY ticker
HAVING countIf(toHour(toTimeZone(window_start, 'America/New_York')) * 60
+ toMinute(toTimeZone(window_start, 'America/New_York')) >= 960) > 0
) AS b ON b.symbol = t.symbol
ORDER BY post_close_volume_pct DESC最后一个图表针对同一交易时段内六只广泛持有的股票,提出两个问题:收盘后 16:00 之后成交的成交量占全天多少;最后一笔晚间成交距离收盘价多远。MSFT 位居首位,16:00 之后成交量占其总成交量的 12.7%,当晚最后一笔成交距离收盘价 0.191%。另一端,JNJ 的这一比例为 4.79%。成交量较小,但价格差异真实存在。这就是德国交易场所的晚间报价对散户订单意味着什么:价格实时可执行,但它不是参考价格,也不具备相同的订单簿深度。
这些图表的构建方法
交易时段固定为 2026 年 6 月 10 日星期三,并统一使用纽约时间,因此数据不会随着新数据到来而变化。成交量图表逐笔读取完整 04:00 至 20:00 交易日的合并行情。该行情的一分钟 K 线不包含收盘竞价成交,因此这里直接读取逐笔行情,并将标记为 16:00 收盘钟声时刻的成交计入其结束的常规交易时段最后十分钟。最后一个图表中的收盘价采用该收盘竞价成交价,最终晚间价格则采用 16:00 之后最后一根一分钟 K 线的收盘价。价差图表读取同一交易日某一标的的逐笔报价数据,仅保留买价为正、卖价高于买价且序列号有效的报价,并按小时计算确定性的中位数,确保重新运行时可以复现图表。价差以报价中间价的基点表示。这些图表不包含德国交易场所的报价历史,任何数据也都不代表 Tradegate 或 Xetra 的实际测量结果。
17:30 后仍挂在订单簿中的限价单
Xetra 上的订单在收盘竞价结束后将无法继续执行。日订单会在当日失效;有效期更长的订单则会排队,等待下一交易日 09:00 的开盘竞价申报阶段。
同一订单如果发送至晚间交易场所,则会持续有效至 22:00。它所在的订单簿由一名市场 maker 提供对手方报价,也没有竞价来集中相反方向的订单。紧贴 17:30 收盘价设置的限价单,可能数小时无法成交,随后在晚间某个快速波动的分钟内,以宽幅报价的远端价格成交。该时段提交市价单,则会接受单一报价所提供的任何价格。
两者的风险控制机制也不同。当下一笔成交可能超出参考价格规定的波动范围时,Xetra 会暂停连续交易并启动波动竞价。晚间交易场所则适用错误成交规则,在成交后撤销异常成交。交易场所的选择还决定散户账户能否进行某些交易。对德国散户投资者的卖空而言,首先要看交易场所,其次才是其他因素。
节假日,以及交易日历的差异
对于德国证券,Tradegate 和 Xetra 遵守相同的完整休市日:元旦、耶稣受难日、复活节星期一、5 月 1 日、圣灵降临节星期一,以及圣诞节和新年前后的休市日,两者均不交易。
两者可能出现差异的地方是半日市。每个交易场所都会发布下一年度的独立日历。12 月 24 日和 31 日的收盘时间由各交易场所分别确定,并非自动沿用 Xetra 的安排。某个日期在一个日历中可能是全天休市,在另一个日历中却可能是缩短交易时段。因此,唯一值得依据的是该交易场所当年发布的日历。
常见问题
Tradegate 的开放时间比 Xetra 更长吗?
是。Tradegate 的报价时间为 CET 08:00 至 22:00;Xetra 的连续交易时间为 09:00 至 17:30。多出的时间包括 Xetra 开盘前一小时,以及其收盘后的四个半小时。
德国股票哪个价格算官方收盘价?
17:30 CET 的 Xetra 收盘竞价价格。指数计算使用该价格,数据供应商也将其作为德国市场收盘价。Tradegate 或其他晚间交易场所之后的成交是真实成交,但不会取代该价格。
为什么 Tradegate 和 Xetra 在同一时刻的价格不同?
两者使用独立的订单簿,没有共用排队系统,也没有合并行情将两者合并。Xetra 撮合多个参与者的订单,而 Tradegate 通过单一市场 maker 提供报价。同一分钟内相差几美分是正常现象。
17:30 后限价单会怎样?
取决于订单所在的交易场所。在 Xetra 上,订单会等待下一交易日的开盘竞价。在晚间交易场所,订单会持续可执行至 22:00,但此时订单簿流动性较低、报价更宽,也没有收盘竞价作为支撑。
本文每个图表都附有底层 SQL,因此上文的任何数字都可以逐行重建。若要测量某个交易时段自身的流动性曲线,或查看某一小时内的价差,可以在 Strasmore terminal 中用自然语言提出问题。