Tradegate vs Xetra: Hours and Prices Explained
Tradegate dey trade reach 22:00 CET, Xetra close 17:30. Compare both hours, official price, quote difference, and know where your order fit get better execution.
Tradegate vs Xetra na really question about time. Xetra dey run continuous trading from 09:00 to 17:30 CET and e dey end with closing auction, while Tradegate dey quote the same shares from 08:00 to 22:00 CET. Xetra closing auction dey set the official price wey index calculations, fund valuations and most data feeds dey carry for German listing. For the four and a half hours after that, trading dey continue for Tradegate and the other evening venues, with separate order books and prices wey each venue set.
Tradegate vs Xetra: the hours side by side
All the times below na German local time, CET for winter and CEST for summer.
- Xetra order entry dey open at 07:30, and opening auction call dey continue until the 09:00 open.
- Xetra continuous trading: 09:00 to 17:30, with short intraday auction around 13:00.
- Xetra closing auction: from 17:30, and e dey end at randomised time within the minutes wey follow.
- Tradegate Exchange: 08:00 to 22:00, continuous quoting, no auctions.
- Börse Frankfurt and Gettex: 08:00 to 22:00.
Two windows belong only to the evening venues: 08:00 to 09:00 before Xetra open, and 17:30 to 22:00 after Xetra close. Na five and a half hours when retail order fit execute while the reference market dey closed. Holiday and half-day details for the reference market dey our Xetra trading hours and holidays guide, while index options dey run for another venue and schedule, as we cover for DAX daily options.
Which venue's price na the official one?
Xetra na the Referenzmarkt, the reference market for German equities, and that status dey decide where the official numbers come from. The 17:30 closing auction price na the official close: na the price behind DAX closing level and the other Deutsche Börse index families, plus the price wey vendors dey carry as German close. The constituent list behind that index dey what stocks are in the DAX.
A Tradegate print at 21:45 na genuine, reported execution on regulated exchange. E no be official close, and DAX closing level don already get fixed hours earlier for Xetra auction. For evening trading, Deutsche Börse dey publish separate indicative value, X-DAX, wey come from Eurex futures instead of cash equity prints.
Why the same share fit show two prices for the same minute
Three mechanics dey explain almost every gap wey reader fit notice.
- Separate order books. Order wey route to Xetra fit match only with other Xetra orders, while order wey route to Tradegate fit match only there. No shared queue dey.
- Market-maker quote instead of central book. Xetra dey collect orders from many participants into one book. Tradegate and Gettex each dey use one specialist to quote two-sided price, so retail order dey meet that firm’s quote instead of the crowd’s.
- No consolidated tape. United States dey publish one merged national best bid and offer across its venues. Europe no get equivalent today, and EU rules dey phase one in. Until e arrive, the price wey app show na whichever venue that app dey display.
Difference of few cents for the same minute na normal market structure, no be error.
What a thin evening book actually dey look like
Quote-level history for German venues no be wetin the panels below dey measure. The mechanic na wetin matter, and e fit get measured on US tape, wey dem build the same way: one central book with closing auction, plus long, thin extended sessions for both sides. Everything below na one fixed session, Wednesday 10 June 2026, for New York time. The equivalent German clock for US session dey US stock market hours in German time.
| ET time | volume millions |
|---|---|
| 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 |
The exact SQL behind every number
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_timeThe shape na the main point. The first bucket of the day, 04:00 New York time, carry 0.1 million shares. The last one, 19:50, carry 0.042 million. The session split into 96 ten-minute buckets altogether, and the tall ones dey sit inside narrow band for the middle.
| phase | volume millions | pct of day |
|---|---|---|
| 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 |
The exact SQL behind every number
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)When dem group the same session into phases, e put number on the auction. The last ten minutes of regular session, including the closing auction print wey end am, carry 11.85% of the day’s shares, equal to 7.18 million. The premarket 04:00 to 09:30 window carry 5.51%, while the after hours 16:00 to 20:00 window carry 12.59%. Closing auction dey pool the day’s resting interest into one print at one price. Na this service Xetra dey provide at 17:30, and no evening venue dey offer am.
| ET time | median spread bps | regular hours median bps | quote count |
|---|---|---|---|
| 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 |
The exact SQL behind every number
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_timeLiquidity get cost, and quoted spread na where e dey show. This panel group every AAPL quote from that session by New York clock hour and read the median spread in basis points. One basis point na hundredth of one percent.
During regular session, the median reach 1.03 bps. For 04:00 hour, well before the open, e be 13.76 bps. For 19:00 hour, after the close, e be 15.15 bps. Same share, same day, but different cost to cross the spread depending only on when the order arrive.
| symbol | post-close volume pct | post-close move pct |
|---|---|---|
| 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 |
The exact SQL behind every number
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 DESCThe last panel dey ask two questions about six widely held names from the same session: how much of the day’s volume print after 16:00 close, and how far the final evening print end from that close. MSFT lead the group, with 12.7% of its shares printing after 16:00, and its last print of the night sit 0.191% from the closing price. For the other end, JNJ print 4.79%. Volumes small, price differences real. Na this evening quote on German venue dey offer retail order: live, executable price wey no be reference price and no get the same depth behind am.
How dem build these panels
The session dey fixed to Wednesday 10 June 2026 and expressed in New York time, so the numbers no go change as new data dey arrive. The volume panels read the consolidated tape trade by trade across the full 04:00 to 20:00 trading day. The one-minute bars for this tape leave the closing auction print outside, so dem read the tape directly and count the print, stamped at the 16:00 bell, with the final ten minutes of the regular session wey e end. For the last panel, closing price na that auction print, while final evening price na the close of the last one-minute bar after 16:00. The spread panel read quote-level data for one symbol across the same day. E filter quotes to ones with positive bid, ask above the bid and usable sequence number, then calculate deterministic median for each clock hour, so rerun go reproduce the figure. Spreads dey measured in basis points of quote midpoint. German venue quote history no dey part of these panels, and nothing here na measurement of Tradegate or Xetra.
Limit order wey remain resting after 17:30
Order wey dey sit on Xetra stop being executable once closing auction end. Day order expire there, while longer-dated order queue until the next opening auction call at 09:00.
The same order wey route to evening venue remain live until 22:00, inside book with one market maker for the other side and no auction to pool opposite interest. Limit order priced close to 17:30 close fit remain unfilled for hours, then fill during one fast evening minute at the far edge of wide quote. Market order for that period go take whatever the single quote dey offer.
The safeguards too dey differ. Xetra dey interrupt continuous trading with volatility auction when the next print fit fall outside defined range around reference price. Evening venues dey use mistrade rules instead, and dem fit unwind bad print after e happen. Venue choice also dey determine wetin retail account fit do at all, and short selling for German retail investors na venue question before e become anything else.
Holidays, and where the calendars dey differ
Tradegate and Xetra dey observe the same full trading holidays for German securities: New Year's Day, Good Friday, Easter Monday, 1 May, Whit Monday and closure days around Christmas and New Year dey closed for both.
Na the half days be where the two fit differ. Each venue dey publish its own calendar for the coming year, and closing time on 24 and 31 December dey set venue by venue instead of inheriting am from Xetra. Date wey be full closure on one calendar fit be shortened session for the other, so the calendar wey the venue publish for that year na the only source worth trusting.
FAQ
Tradegate open pass Xetra?
Yes. Tradegate dey quote from 08:00 to 22:00 CET, compared with 09:00 to 17:30 for Xetra continuous trading. The extra time split into one hour before Xetra open and four and a half hours after e close.
Which price count as official close for German stock?
Xetra closing auction price from 17:30 CET. Na wetin index calculations use and wetin data vendors carry as German close. Later prints for Tradegate or another evening venue na real executions, but dem no replace am.
Why Tradegate price different from Xetra price for the same moment?
The two venues dey run separate order books, with no shared queue and no consolidated tape to merge dem. Xetra dey match orders from many participants, while Tradegate dey quote through one market maker. Gap of few cents inside same minute na normal.
Wetin happen to limit order after 17:30?
E depend on where the order dey rest. For Xetra, nothing happen to am until the next session’s opening auction. For evening venue, e remain executable until 22:00, inside thinner book with wider quote and no auction behind am.
Every panel here come with the SQL underneath, so anybody fit rebuild any number above line by line. To measure liquidity curve for one session, or spread through one hour, ask the question in plain English on the Strasmore terminal.