What spread kills a seasonal edge?
Every backtest in this business subtracts a trading cost, and every one of them picks a number and moves on. Ours does too: one typical round trip per market, applied to every hour of 23 years. What almost nobody publishes is the sensitivity — how wrong that assumption has to be before the result disappears. For the windows we actually push as alerts, the answer is: barely wrong at all.
The one comparison that explains this whole site
Before the rules, the population they come from. Take every liquid weekday × hour window in the FX majors and ask two questions of each.
How far does the directional edge move it, against the same round trip? It wins in 4 of them — 0.8%.
Same windows, same cost, same archive. The market moves far enough to be worth trading essentially always; the lean is worth trading essentially never. That is not a detail about spreads, it is the reason this site leads with when a market moves and treats which way it closes as the weaker half.
What break-even means here
A rule's break-even spread is its gross edge per trade: the cost at which its net is exactly zero. The cushion is how many times the assumed spread that represents. A cushion of 1.00× means the rule is already at the line; 2.00× means the cost could double before it stops paying.
Every rule we push, thinnest first
| Market | Window | Side | Assumed spread | Break-even | Cushion | Hour |
|---|---|---|---|---|---|---|
| AUD/USD | Fri 09:00 | SHORT | 1.2 | 1.21 | 1.01× | ordinary |
| EUR/GBP | 20:00 · Mon–Fri | SHORT | 1.2 | 1.27 | 1.06× | thin band |
| EUR/GBP | Mon 20:00 | SHORT | 1.2 | 1.31 | 1.09× | thin band |
| EUR/USD | Mon 20:00 | SHORT | 1 | 1.15 | 1.15× | thin band |
| USD/CHF | Thu 20:00 | SHORT | 1.2 | 1.45 | 1.21× | thin band |
| AUD/USD | Wed 00:00 | SHORT | 1.2 | 1.5 | 1.25× | ordinary |
| EUR/USD | Tue 02:00 | LONG | 1 | 1.29 | 1.29× | ordinary |
| EUR/USD | Wed 11:00 | SHORT | 1 | 1.39 | 1.39× | ordinary |
| EUR/GBP | Wed 20:00 | SHORT | 1.2 | 1.75 | 1.46× | thin band |
| GBP/USD | Fri 19:00 | LONG | 1.2 | 1.8 | 1.50× | ordinary |
| USD/CAD | Fri 20:00 | SHORT | 1.5 | 2.32 | 1.55× | thin band |
| USD/CHF | Fri 20:00 | SHORT | 1.2 | 2.7 | 2.25× | thin band |
Break-even and spread are in that market’s own units. A cushion under 1.25× is marked: those rules stop paying if your broker charges a quarter more than we assumed.
It is not a thin-band story
The obvious explanation would be that the thin margins live in the hours this site already warns about — the Sunday reopen and 20:00 UTC onward, where the spread is widest. They do not. The thin band runs a median cushion of 1.21× and ordinary hours 1.29×. The whole board runs on the same narrow margin.
| Group | Rules | Median cushion | Thinnest | Widest | Survive 1.25× | Survive 1.5× | Survive 2× |
|---|---|---|---|---|---|---|---|
| windows we push as alerts | 12 | 1.29× | 1.01× | 2.25× | 6 | 3 | 1 |
| every net-positive rule on the board | 150 | 1.29× | 1.01× | 5.57× | 87 | 47 | 23 |
| alertable, thin band | 7 | 1.21× | 1.06× | 2.25× | 3 | 2 | 1 |
| alertable, ordinary hours | 5 | 1.29× | 1.01× | 1.50× | 3 | 1 | 0 |
Across all 150 net-positive rules on the board the median is 1.29×, and only 23 survive a doubled spread. The widest margin anywhere is 5.57×.
What we would actually say
- Ask any backtest what cost it assumed, and what happens at 1.5× that. If the answer is not published, the result is a number with an unexamined assumption inside it. Ours is above.
- Your broker decides this, not us. The alerts page and the screener both let you set your own spread and watch the list shrink — and at 2.5× our assumption, none of the alerted windows pays at all. A control that reaches zero is about the truth of the product rather than tuning it.
- The direction is the fragile half; the timing is not. 471 of 471 windows move further than a round trip and 4 lean further than one. Size is where the room is.
- A cushion is not a forecast. It says what this history would have needed, not what your next trade will cost.
Full method in section 12 of the evidence page, the data behind it at /api, and every claim we have tested on the reports index.
More on how we decide what counts
Every claim we have tested, including the ones that held, is on the reports index.
We publish the tests that failed as loudly as the ones that held. Every number on this site carries its sample size, and every claim carries what it was measured against.
Read the whole evidence page →