Session Time Filter Tested on 3 Indicators: The Hour Predicted Volatility at 0.98 and Profit at 0.22, and 4 of 45 Session Windows Passed

Key takeaways
- A session time filter only lets an indicator trade inside chosen hours. I split 4,362 trades from three common entries (EMA 9/21 cross, RSI 14 from 30/70, Stochastic cross from 20/80) by the hour they opened, on EURUSD and gold, M5 and M15.
- The clock predicts volatility, not profit. On EURUSD M5 the ranking of hours by range in the first half of the data matched the second half at 0.98. The ranking of the same hours by profit matched at 0.22.
- The six best hours before July 15 lost money after it: +0.33 pips a trade became -1.26 on EURUSD M5, and +$6.15 an ounce became -$0.47 on gold M5. Neither was better than simply trading every hour.
- 4 of 45 session windows passed all three checks, none on EURUSD, and the four winners were four different windows.
- On EURUSD M5 only 2 of 24 hours made money after a 1-pip cost, and both turned negative in the second half.
Every list of trading tips says the same thing about time: trade the London and New York overlap, 12:00 to 16:00 UTC, and stay out of the quiet hours. A session time filter turns that advice into a rule. Signals inside the window are taken, signals outside it are ignored.
The advice is always given without a count. So I took three entries that every MT4 trader knows, ran them around the clock, and sorted every trade by the hour it opened. Then I asked the question that decides whether a time filter is worth setting: do the good hours stay good?
What is a session time filter?

It is a condition added to an indicator or an Expert Advisor: act only between a start hour and an end hour. It does not change the signal. It only removes the signals that fall outside the window. The usual windows are the three sessions and the overlap between London and New York:
- Asia: 00:00 to 07:00 UTC
- London morning: 07:00 to 12:00 UTC
- London and New York overlap: 12:00 to 16:00 UTC, which is 8:00 a.m. to noon in New York in summer
- New York afternoon: 16:00 to 21:00 UTC
- Rollover: 21:00 to 24:00 UTC
How was the time filter tested?

- Data: EURUSD, June 3 to August 26, 2026, 16,926 M5 bars and 5,642 M15 bars; gold, June 16 to August 26, 13,736 M5 bars and 4,577 M15 bars. All times are UTC.
- Entries: EMA 9 crossing EMA 21; RSI 14 coming back up through 30 or down through 70; Stochastic 14, 3, 3 with %K crossing %D below 20 or above 80.
- Exit: stop 1.5 ATR, target 3 ATR, 48 bars at most, one trade at a time. The same for every entry and every hour.
- Cost: 1 pip per EURUSD trade and $0.30 an ounce on gold, from my spread and swap measurement.
- Three checks for a window: profit after cost, profit in both halves of the data (split on July 15), and a result above the best 5% of 200 runs of random entries placed inside the same hours. The random check is explained in rule vs random entry.
My earlier session vs all-day test ran one breakout rule at the top of each hour and found a 3.55-pip gap between the best and the worst hour, with about 50 trades in each. It did not check the second half of the data or compare the gap with a shuffle. This test does both, and a gap of that size turns out to be what shuffled hours produce. Read the earlier ranking of hours as a description of those 12 weeks, not as a schedule.
Which hours made money on EURUSD M5?
| Hour (UTC) | Trades | Median ATR, pips | Spread as share of stop | Before cost | After cost | 1st half | 2nd half |
|---|---|---|---|---|---|---|---|
| 00:00 | 100 | 1.44 | 46% | -0.24 | -1.24 | -0.93 | -1.52 |
| 04:00 | 76 | 1.36 | 49% | -0.11 | -1.11 | -1.11 | -1.11 |
| 06:00 | 129 | 1.74 | 38% | +0.75 | -0.25 | -0.41 | -0.07 |
| 08:00 | 105 | 2.29 | 29% | -0.81 | -1.81 | -1.77 | -1.85 |
| 12:00 | 116 | 2.47 | 27% | +0.17 | -0.83 | -0.89 | -0.78 |
| 13:00 | 101 | 2.86 | 23% | +1.27 | +0.27 | +1.14 | -0.52 |
| 14:00 | 89 | 3.03 | 22% | -0.09 | -1.09 | -2.74 | +0.21 |
| 15:00 | 86 | 2.99 | 22% | -1.51 | -2.51 | -2.57 | -2.43 |
| 17:00 | 73 | 2.18 | 31% | -1.11 | -2.11 | -2.87 | -1.58 |
| 20:00 | 57 | 1.48 | 45% | +1.69 | +0.69 | +1.99 | -1.23 |
| 21:00 | 63 | 2.20 | 30% | -2.25 | -3.25 | -3.71 | -2.80 |
| 23:00 | 64 | 1.42 | 47% | -0.56 | -1.56 | -1.75 | -1.39 |
Pips per trade, all three entries together, 2,033 trades. The table shows 12 of the 24 hours: the best, the worst and the session boundaries. The other 12 sit between -0.58 and -1.40 after cost. The 21:00 row understates the cost: the test charges 1 pip all day, and real spreads at the rollover are several times wider.
Two hours out of 24 made money after cost: 13:00 and 20:00 UTC. Both were positive in the first half of the data and negative in the second. Before cost 11 of 24 hours were positive, so the 1-pip spread is what turns the map red.
The spread column shows why. At 04:00 UTC the median M5 range is 1.36 pips, so a 1.5 ATR stop is about 2 pips and a 1-pip spread eats 49% of it. At 14:00 the same spread is 22% of the stop. That part of the session advice is correct and measurable. What it does not give you is a profit: the two most active hours, 14:00 and 15:00, lost 1.09 and 2.51 pips a trade.
Entry by entry the picture is the same. The EMA cross was negative in all 24 hours. The Stochastic cross was positive in 3 of 24. The RSI entry was positive in 4 of the 15 hours that had at least 15 trades. On gold M5, 20 of 43 such hours were positive, which is about what a rule with no edge would show.
Do the best hours stay the best?
This is the test that matters. A time filter is chosen on past bars and traded on future ones. I ranked the hours on the bars before July 15, then looked at the same hours after it.
| All three entries together | Six best hours, 1st half | Same six hours, 2nd half | All hours, 2nd half | Six worst hours of 1st half, in 2nd half | Rank match between halves |
|---|---|---|---|---|---|
| EURUSD M5 (pips) | +0.33 | -1.26 | -1.17 | -1.40 | 0.22 |
| Gold M5 ($) | +6.15 | -0.47 | -0.22 | -0.14 | -0.10 |
| EURUSD M15 (pips) | +3.13 | -1.47 | -1.22 | +0.57 | -0.19 |
Per trade, after cost. “Rank match” is the rank correlation of hourly results between the two halves: 1 means the same order, 0 means no relation. Gold M15 had too few trades per hour to rank.
On all three charts the six best hours of the first half lost money in the second, and did a little worse than trading every hour. On gold M5 and EURUSD M15 the six worst hours of the first half beat the six best afterwards. The best single hour on gold M5 before July 15 was 14:00 UTC at +$11.28 a trade. After July 15 it made -$1.30 and ranked 17th of 22.
Now the same test on volatility instead of profit:
| Chart | Hours ranked by range: match between halves | Top six hours shared | Hours ranked by profit: match between halves |
|---|---|---|---|
| EURUSD M5 | 0.98 | 6 of 6 | 0.22 |
| Gold M5 | 0.96 | 6 of 6 | -0.10 |
| EURUSD M15 | 0.97 | 5 of 6 | -0.19 |
Range here is the median ATR 14 of the hour. The busiest hours before July 15 were the busiest hours after it, almost exactly: the hours starting 13:00, 14:00, 15:00 and 16:00 UTC were in the top six on every chart in both halves. So the clock is a very good forecast of how much price will move, the same thing I measured in best hours to trade EURUSD. ATR 14 averages the last 14 bars, so on M5 it runs up to an hour behind the raw bar range in that article. It was no forecast at all of whether these three indicators would be on the right side of that move. That earlier article ends by recommending a session filter. The range part of it holds. The filter part is what this test does not support.
Is the gap between hours bigger than luck?
Sort any pile of trades into 24 bins and some bins will look much better than others. To see how much, I shuffled the hour labels between the trades 2,000 times and measured the gap between the best and worst hour each time.
- Each entry on its own: in all six M5 runs the real gap was inside what shuffling produced. On the EURUSD M5 EMA cross the real gap was 4.46 pips and the typical shuffled gap was 4.39.
- All three entries together on EURUSD M5: the real gap was 3.94 pips against 2.52 for a typical shuffle, larger than 98.5% of shuffles. So there is something there.
It comes from one hour and one entry. At 21:00 UTC, the 5 p.m. New York rollover in summer, the EMA cross took 41 trades and lost 4.65 pips on each, winning 3. RSI and Stochastic together took 22 trades there and lost 0.65, better than their all-day average. Take that hour out and the gap between hours is back inside luck. The price feed itself is jumpy in that hour: the average M5 bar is 2.7 pips at 21:00 against 1.2 an hour earlier and 1.0 an hour later, which is what a widening spread looks like in quote data. A crossover reads those jumps as signals. No hour was good in both halves by a similar margin, and on gold M5 the same pooled test found nothing beyond luck.
Did any session window pass all three checks?
Five named windows, three entries, four charts: 60 runs, of which 45 had at least 30 trades.
| Window that passed | Entry and chart | Trades | After cost | 1st half | 2nd half | Random, best 5% |
|---|---|---|---|---|---|---|
| Overlap 12:00 to 16:00 | EMA cross, gold M5 | 86 | +$3.09 | +3.06 | +3.10 | +1.79 |
| Rollover 21:00 to 24:00 | Stochastic, gold M5 | 63 | +$1.83 | +1.56 | +2.00 | +1.53 |
| Asia 00:00 to 07:00 | EMA cross, gold M15 | 53 | +$5.99 | +5.97 | +6.00 | +3.38 |
| New York 16:00 to 21:00 | Stochastic, gold M15 | 52 | +$6.50 | +10.89 | +4.36 | +5.29 |
Four passes out of 45, all on gold. The first half is thin in each: 17 to 30 trades, because the gold data starts on June 16. They are also four different windows. The same EMA cross wanted the overlap on M5 and the Asian session on M15. No window passed for two entries on the same chart. With 45 tries, two or three passes on the random check alone are expected from luck, so four is not a pattern I would build on.
On EURUSD, 2 of 23 windows made any money after cost, both on M15 in the overlap, and neither beat random entries placed in the same hours. The popular window itself, 12:00 to 16:00 UTC, was net positive in 5 of 12 runs and passed in 1. I put it head to head with two other filters in time filter vs ADX filter.
So should you use a time filter?
- Use the clock for cost, not for direction. Hours with a small range make the spread a bigger part of every stop: 49% at 04:00 UTC against 22% at 14:00 on EURUSD M5. The share repeats. A better result from it did not show up: trades opened from 07:00 to 18:00 UTC lost 1.07 pips each, the rest 1.06. On M15 the same spread is 13% to 22% of the stop, which moved the EMA cross from -1.66 to +0.28 pips a trade. The other two entries did not change by more than noise.
- Do not pick hours from a results table. The best hours of one six-week stretch were below average in the next.
- If you block anything, block the rollover. The EMA cross lost 4.65 pips a trade at 21:00 UTC on jumpy quotes, and real spreads widen in that hour.
- A time filter cannot rescue a losing entry. All three entries lost on EURUSD M5 around the clock, and no window changed that. The grid of 1,728 windows is in the trading hours filter guide for MT4.
For gold only, four scalping rules are split by session in gold scalping session by session. With a fixed 30 or 60 minute hold the overlap paid the least there. Here, with an ATR stop and target, the same EMA cross made +$3.09 in the overlap. The window’s rank changed with the exit, which is one more reason not to trust it.
Frequently asked questions
What is the best time filter for forex indicators?
None stood out. Of 45 session windows with enough trades, 4 passed all three checks, all on gold and each in a different window. On EURUSD no window passed.
Is the London and New York overlap the best time to trade?
It is the most active time: 13:00 to 16:00 UTC had the widest range in both halves of the data. It was not the most profitable for these entries. The 12:00 to 16:00 window made money in 5 of 12 runs and passed every check in 1.
Do the best trading hours stay the same?
For volatility, yes: the ranking of hours by range repeated at 0.96 to 0.98. For indicator profit, no: the ranking repeated at -0.19 to 0.22, and the six best hours before July 15 lost money after it.
Which hours should I avoid?
On EURUSD M5 the 21:00 UTC rollover hour lost 3.25 pips a trade, almost all of it from the EMA cross, and was negative in both halves. The quiet Asian hours are expensive in another way: a 1-pip spread is close to half of an M5 stop, though in this test they did not lose more pips per trade than the busy hours.
Does a time filter work better on M15 than M5?
The filter did not. The timeframe changed one entry out of three on EURUSD, the EMA cross, and none on gold. On M15 the spread was 13% to 22% of the stop against 22% to 49% on M5, at any hour.
Want a clean indicator to install right now?
It is my own enhanced DeMARK Trend Line indicator for MetaTrader 4 and 5. Non repaint, clean, and free.

