EURUSD seasonality: day, month, session (23 years)
Strategy7 min read

EURUSD seasonality: day, month, session (23 years)

8.8 million M1 candles of EURUSD (2003-2026): which day and month carry a bias, when it moves and what the spread really costs.

Does EURUSD have days, months or hours with a bias you can actually measure? We aggregated 8,759,332 M1 candles of the euro against the dollar, the world's most traded pair from May 2003 to October 12, 2026 by day of week, calendar month, session and UTC hour, and ran every result through a significance test. Bottom line: no weekday and no month carries a statistically significant bias. What is stable is when it moves.

8.8M candles
M1 candles (UTC)
23 years
2003-05 → 2026-10-12
Best day
Thursday
+0.013% · 50.0% win · p=0.432
Best month
December
+1.04% · 69.6% win · p=0.110
Most volatile hour
14:00 UTC
mean range 0.248% · 30.4 pips

📊 The data behind this article, as tables and CSV: /stats/EURUSD publishes EURUSD 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 22: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.

⚠️ Mid price, not bid. In EURUSD, the spread on Friday's last candle is 6.0 times the usual one. Measured on the bid, that close comes out artificially low and Monday seems to bounce: a "Monday effect" made by the spread, not the market. That is why every close is taken at mid price (bid+ask)/2. If you see a Monday bias in another FX study, check which price it uses.

📅 Table 1 · Daily return by day of week (2003–2026)n=6,094 days
DaynMean %Median %Std %Win ratet-statp-value
Monday1,219-0.014%+0.004%0.505%50.7%-0.950.340
Tuesday1,220+0.005%-0.009%0.554%49.1%0.300.764
Wednesday1,217+0.012%+0.007%0.573%50.5%0.750.454
Thursday1,219+0.013%+0.000%0.587%50.0%0.790.432
Friday1,219-0.010%+0.012%0.578%51.4%-0.580.562

Reading: no day reaches p < 0.05. The gap between the best (Thursday, +0.013%) and the worst (Monday, -0.014%) fits inside the normal noise of 6,094 sessions. On this data, a day on which EURUSD "tends" to rise is an anecdote.

Bar chart: mean return by day of week and by month for EURUSD, 2003-2026


2. Seasonality by month of the year

280 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=280 months
MonthnMean %Median %Std %Win ratet-statp-value
January23-0.53%-0.26%2.95%43.5%-0.870.396
February23-0.32%-0.31%1.58%39.1%-0.980.339
March23+0.38%+0.03%2.47%52.2%0.740.465
April23+0.72%+0.62%2.49%52.2%1.380.181
May23-0.78%-0.64%3.21%39.1%-1.170.256
June24+0.14%+0.03%1.69%50.0%0.410.686
July24+0.12%+0.06%2.45%54.2%0.240.810
August24-0.15%-0.13%1.92%45.8%-0.370.712
September24-0.10%-0.58%3.27%45.8%-0.150.881
October23-0.35%-0.21%2.66%47.8%-0.640.532
November23+0.08%+0.05%2.97%56.5%0.130.901
December23+1.04%+1.27%3.00%69.6%1.670.110

Reading: no month reaches p < 0.05. The best on average is December (+1.04%) and the worst May (-0.78%), but with 23 observations per month a single extreme year moves those averages a lot.

Chart: month-by-month cumulative return of EURUSD, 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)2003–2026 · n=29,266 sessions
SessionnMean drift %Win ratep-valueMean range %
Asia (00–07 UTC)6,103+0.0068%51.7%0.0120.309%
London (07–12 UTC)6,094-0.0179%47.8%<0.0010.420%
New York (12–17 UTC)6,094+0.0062%50.6%0.1780.524%
NY late (17–22 UTC)6,095+0.0084%51.4%0.0020.284%
Rollover (22–24 UTC)4,880-0.0003%51.3%0.8360.125%
  • New York (12–17 UTC) is where it moves: mean range 0.524%, 4.2× that of Rollover (22–24 UTC).
  • Asia (00–07 UTC) drifts up with p=0.012 (+0.0068% per session), though it does not clear Bonferroni. It is a small bias: compare it with the spread before thinking of trading it.
  • London (07–12 UTC) drifts down with p=<0.001 (-0.0179% per session). It is a small bias: compare it with the spread before thinking of trading it.
  • NY late (17–22 UTC) drifts up with p=0.002 (+0.0084% per session). It is a small bias: compare it with the spread before thinking of trading it.

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


4. Day × session heatmap

📅 Table 4 · Day × session heatmap (mean drift %)5 × 5
DayAsia (00–07)London (07–12)New York (12–17)NY late (17–22)Rollover (22–24)
Monday+0.002%-0.015%+0.017%-0.007%-0.004%
Tuesday+0.002%+0.000%+0.002%+0.004%+0.001%
Wednesday+0.010%-0.023%+0.015%+0.009%+0.001%
Thursday+0.018%-0.020%-0.005%+0.019%-0.000%
Friday+0.003%-0.031%+0.002%+0.018%+nan%
  • Most bullish cell: Friday × NY late (+0.018%, p=<0.001). Most bearish: Friday × London (-0.031%, p=<0.001).
  • 7 of 25 cells come out at p < 0.05; chance alone would give about 1.2. That is more than chance would produce, but they still need out-of-sample confirmation.

Heatmap: mean drift by day of week and session for EURUSD


5. Most volatile hours (UTC)

⏰ Table 5 · The 6 most volatile hours (UTC)2003–2026
UTC hourMean range %Mean range (pips)Std %Session
14:000.248%30.40.143NY
13:000.243%29.80.161NY
12:000.229%28.10.161NY
15:000.222%27.30.134NY
07:000.202%24.90.118London
08:000.200%24.60.116London

The busiest hour (14:00 UTC) moves 2.9× more than the quietest (22:00 UTC, 0.085%). 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. What it costs to trade: the measured spread

The feed carries real bid and ask, so the spread is measured, not a broker's marketing figure. Median since 2003: 0.50 pips. But a spread in pips does not say how heavy it is: what matters is how much of the hour's typical move it eats.

💸 Table 6 · Real cost by hour: median spread ÷ mean hourly range3 cheapest · 3 most expensive
UTC hourMedian spread (pips)Mean range (pips)Cost
14:000.4030.41.3%
13:000.4029.81.3%
12:000.4028.11.4%
21:001.1011.89.3%
22:001.0011.58.7%
23:000.6012.54.8%

Trading at 14:00 UTC costs 1.3% of the hour's range; at 21:00 UTC, 9.3%. The cross-market comparison is in the real spread by market and hour.


What this data does not tell you

  • Multiple comparisons: this article runs 47 tests (5 days, 12 months, 5 sessions and 25 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 23 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.
  • Dukascopy bid price: your broker will have a different spread and daily close; with a cut-off other than 22:00 UTC the day-of-week split shifts a little.

Methodology

  • Source: Dukascopy ticks aggregated to M1 candles by EV Trading Labs (EURUSD, 2003-05-04 → 2026-10-12).
  • Total: 8,759,332 M1 candles with at least one tick; 6,094 daily and 280 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 22: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.

On Deepwick: Backtest a session filter on EURUSD yourself

Frequently asked questions

What is the best day to trade EURUSD?
In 2003–2026, the day with the best average is Thursday (+0.013%, 50.0% up days, p=0.432). It is not statistically significant: there is no clearly better day.
Which month is most bullish for EURUSD?
December has the best average (+1.04%, 69.6% of years up, p=0.110) and May the worst (-0.78%). Neither is significant with 23 years of data per month.
At what time does EURUSD move the most?
At 14:00 UTC: mean range of 0.248% (30.4 pips) in that hour, 2.9× the quietest hour (22:00 UTC). By session, New York (12–17 UTC) has the widest range.
What is the real spread of EURUSD?
Median measured on the Dukascopy feed since 2003: 0.50 pips. Relative to movement, the cheapest hour is 14:00 UTC (1.3% of the hour's range) and the most expensive 21:00 UTC (9.3%).
Can you trade EURUSD 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.
#EURUSD#euro#dólar#forex#seasonality#estacionalidad#session#UTC#2026

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

Explore products →
Join DiscordChat on WhatsApp