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 的订单也只会在那里撮合。两者没有共享的排队队列。
- 做市商报价,而非中央订单簿。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 居首,收盘后成交的股票数量占其总成交量的 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。该订单簿的另一侧由一名做市商提供报价,且没有竞价来集中相反方向的订单。限价若紧贴 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 开盘前一小时,以及 Xetra 收盘后的四个半小时。
哪个价格算德国股票的官方收盘价?
17:30 CET 的 Xetra 收盘竞价价格。指数计算会采用该价格,数据供应商也会将其作为德国股市收盘价。Tradegate 或其他晚间交易场所之后的成交是真实执行记录,但不会取代该收盘价。
为什么同一时刻 Tradegate 的价格与 Xetra 不同?
两者使用独立的订单簿,没有共享的排队队列,也没有统一行情将两者合并。Xetra 撮合多个参与者的订单,而 Tradegate 通过单一做市商报价。同一分钟内相差几欧分属于正常现象。
17:30 后限价单会怎样?
取决于订单停留在哪个交易场所。在 Xetra 上,订单会保持不变,直到下一交易日的开盘竞价。在晚间交易场所,订单会持续可执行至 22:00,但面对的是流动性较低、报价更宽且没有竞价支持的订单簿。
本文每张图表均附有底层 SQL,因此上文任何数字都可以逐行重建。若要衡量某个交易时段自身的流动性曲线,或查看某一小时内的价差,可以在 Strasmore terminal 中用自然语言提问。