DAX 40 seasonality: day, month, session (15 years)
Strategy7 min read

DAX 40 seasonality: day, month, session (15 years)

4.2 million M1 candles of DAX 40 (2012-2026): which day and month carry a bias, when it moves and what survives a significance test.

Does DAX 40 have days, months or hours with a bias you can actually measure? We aggregated 4,217,468 M1 candles of the German DAX CFD from February 2012 to October 12, 2026 by day of week, calendar month, session and UTC hour, and ran every result through a significance test. Bottom line: 3 of the 17 calendar buckets come out at p < 0.05, but none survives a multiple-comparison correction. A hint, not a rule.

4.2M candles
M1 candles (UTC)
15 years
2012-02 → 2026-10-12
Best day
Tuesday
+0.085% · 51.2% win · p=0.031
Best month
November
+3.78% · 71.4% win · p=0.022
Most volatile hour
07:00 UTC
mean range 0.499% · 79.9 points

📊 The data behind this article, as tables and CSV: /stats/DAX publishes DAX 40 seasonality, sessions and spread as a downloadable reference, and /data has the OHLCV candles (D1 down to M1) so you can replicate every table. This article is the analysis, with its tests; those pages are the raw numbers.

1. Seasonality by day of the week

Each day closes at 15:00 UTC, a fixed hour present in every year of the feed. Test: one-sample t-test against zero; bold marks what survives a Bonferroni correction.

📅 Table 1 · Daily return by day of week (2012–2026)n=3,737 days
DaynMean %Median %Std %Win ratet-statp-value
Monday741+0.068%+0.105%1.195%56.4%1.550.123
Tuesday748+0.085%+0.023%1.080%51.2%2.160.031
Wednesday748+0.055%+0.070%1.079%54.1%1.400.162
Thursday756+0.003%+0.057%1.141%53.6%0.070.942
Friday744+0.007%+0.086%1.190%54.4%0.160.876

Reading: days with p < 0.05:

  • Tuesday: +0.085% on average, 51.2% win rate, p=0.031, but it does not clear the Bonferroni threshold for 5 tests (0.0100). Across the two halves of the sample (2012–2019: +0.065%; 2019–2026: +0.106%) the sign holds.

Bar chart: mean return by day of week and by month for DAX 40, 2012-2026


2. Seasonality by month of the year

175 complete months (the current month is left out). Each month's return = last close of the month against the last close of the previous month.

📆 Table 2 · Monthly return by calendar monthn=175 months
MonthnMean %Median %Std %Win ratet-statp-value
January14+1.58%+1.31%5.13%57.1%1.150.271
February14+0.29%+2.05%4.90%64.3%0.220.830
March15+0.03%+1.07%6.34%53.3%0.020.984
April15+1.58%+1.19%4.01%73.3%1.530.149
May15+1.55%+1.95%4.09%73.3%1.470.164
June15-1.07%-1.13%4.58%33.3%-0.910.379
July15+1.92%+1.92%3.18%80.0%2.330.035
August15-0.55%-0.37%3.73%40.0%-0.570.578
September15-0.30%-0.90%3.94%40.0%-0.300.771
October14+1.11%+1.42%5.98%64.3%0.690.500
November14+3.78%+2.69%5.42%71.4%2.610.022
December14+0.49%+1.73%3.85%57.1%0.480.640

Reading: months with p < 0.05:

  • July: +1.92% on average, 80.0% win rate, p=0.035, but it does not clear the Bonferroni threshold for 12 tests (0.0042). Across the two halves of the sample (2012–2018: +2.47%; 2019–2026: +1.43%) the sign holds.
  • November: +3.78% on average, 71.4% win rate, p=0.022, but it does not clear the Bonferroni threshold for 12 tests (0.0042). Across the two halves of the sample (2012–2018: +2.25%; 2019–2026: +5.31%) the sign holds.

Chart: month-by-month cumulative return of DAX 40, each year and the mean

Each thin line is one year; the red one is the mean. When the thin lines fan out, a month's average says little about next year.


3. Seasonality by trading session (UTC)

Fixed UTC windows, the same across the whole series. Drift = session close against its open; range = high minus low, as % of the open.

🌍 Table 3 · Drift and range by session (UTC)2019–2026 · n=9,548 sessions
SessionnMean drift %Win ratep-valueMean range %
Asia (00–07 UTC)2,005-0.0018%50.0%0.8740.645%
London (07–12 UTC)2,005+0.0071%52.0%0.6420.970%
New York (12–17 UTC)2,007+0.0185%53.5%0.1990.895%
NY late (17–22 UTC)1,990+0.0245%56.6%0.0110.511%
  • London (07–12 UTC) is where it moves: mean range 0.970%, 1.9× that of NY late (17–22 UTC).
  • NY late (17–22 UTC) drifts up with p=0.011 (+0.0245% per session). It is a small bias: compare it with the spread before thinking of trading it.
  • Sessions from 2019: before that the CFD did not trade nearly 24 h and the windows would not be comparable across years.

4-panel chart: drift, range, win rate and hourly volatility for DAX 40


4. Day × session heatmap

📅 Table 4 · Day × session heatmap (mean drift %)5 × 4
DayAsia (00–07)London (07–12)New York (12–17)NY late (17–22)
Monday+0.009%+0.025%+0.058%+0.060%
Tuesday+0.019%+0.015%-0.010%+0.008%
Wednesday+0.019%+0.009%+0.042%+0.027%
Thursday-0.035%-0.031%+0.020%-0.009%
Friday-0.022%+0.018%-0.019%+0.038%
  • Most bullish cell: Monday × NY late (+0.060%, p=0.001). Most bearish: Thursday × Asia (-0.035%, p=0.199).
  • 1 of 20 cells comes out at p < 0.05; chance alone would give about 1.0. That is what chance produces: do not read the heatmap as a signal map.

Heatmap: mean drift by day of week and session for DAX 40


5. Most volatile hours (UTC)

⏰ Table 5 · The 6 most volatile hours (UTC)2019–2026
UTC hourMean range %Mean range (points)Std %Session
07:000.499%79.90.359London
08:000.499%79.90.366London
14:000.451%72.50.337NY
13:000.415%67.00.309NY
15:000.404%64.70.308NY
09:000.390%62.60.269London

The busiest hour (07:00 UTC) moves 3.1× more than the quietest (04:00 UTC, 0.158%). Unlike the calendar bias, this is stable year to year: it is the most useful part of this analysis for deciding when to be at the screen or where to place a stop.


6. Why we do not analyse the spread

In this feed's index CFDs the spread is not a market price: it is a margin set by the broker that moves in steps over months. Publishing its "history" would measure one provider's pricing policy, not the cost of trading the index. For cost, check your own broker's spread and commission at the hour you trade.


What this data does not tell you

  • Multiple comparisons: this article runs 41 tests (5 days, 12 months, 4 sessions and 20 cells). At a 5% threshold about 2 would come out "significant" by chance. That is why what survives Bonferroni is flagged separately.
  • Few years per month: each month has about 14 observations. One extreme year can create or erase a "bullish month".
  • An average bias is not a strategy: after spread, commission and swap, a drift of hundredths of a percent per session rarely survives. Before trading it, backtest with real costs and walk-forward.
  • This is a Dukascopy CFD (bid price), not the exchange future or cash index: it can differ in rollovers, gaps and trading hours.
  • The CFD's trading hours changed several times before 2019. That is why the day closes at a fixed hour (15:00 UTC) present in every year, the daily series starts in 2012 and the intraday analysis in 2019.

Methodology

  • Source: Dukascopy ticks aggregated to M1 candles by EV Trading Labs (DAX 40, 2012-02-01 → 2026-10-12).
  • Total: 4,217,468 M1 candles with at least one tick; 3,737 daily and 175 monthly returns.
  • Price: open and close at mid price (bid+ask)/2; high and low on the bid. Where the feed has no ask, bid.
  • Daily return: (C[t] − C[t−1]) / C[t−1] × 100, where C is the close at 15:00 UTC. Days with fewer than 60 candles, or whose last candle is more than 3 h before the cut-off, are dropped.
  • Monthly return: last daily close of the month against the previous month's; the current month is excluded.
  • Sessions: drift = (close − open) / open × 100; range = (high − low) / open × 100; sessions with less than 40% of their minutes are dropped.
  • Test: one-sample t-test against zero, p < 0.05; Bonferroni per block (days, months, sessions, cells). Stability: the same mean computed on each half of the sample.
  • Software: Python, pandas, scipy, matplotlib.

The full seasonality series

The same method applied to 19 markets. The contrast between them is the most useful part: a pattern that shows up in a single asset is more likely to be noise.

Frequently asked questions

What is the best day to trade DAX 40?
In 2012–2026, the day with the best average is Tuesday (+0.085%, 51.2% up days, p=0.031). It is significant on its own, but not after correcting for multiple comparisons.
Which month is most bullish for DAX 40?
November has the best average (+3.78%, 71.4% of years up, p=0.022) and June the worst (-1.07%). With only 14 years per month, treat it as a hypothesis.
At what time does DAX 40 move the most?
At 07:00 UTC: mean range of 0.499% (79.9 points) in that hour, 3.1× the quietest hour (04:00 UTC). By session, London (07–12 UTC) has the widest range.
Can you trade DAX 40 seasonality?
Not as a standalone signal. Calendar biases are small next to spread and commission, and most do not survive a multiple-comparison correction. What is useful and stable is the hourly volatility profile, for choosing when to trade and sizing the stop.
#DAX#GER40#índice#seasonality#estacionalidad#session#UTC#2026

Manage your risk with precision. Automated portfolios and tools for MT5.

Explore products →
Join DiscordChat on WhatsApp