Strategies we backtested NFP day breakout

Tested by BacktestingMax

NFP day breakout backtest on NQ, ES and gold futures

Does the NFP day breakout strategy work on NQ, ES and gold futures?

No, not in our backtest. The NFP day breakout trades the day of the US jobs report and its non-farm payrolls (NFP) number, out once a month at 08:30 New York time. The strategy marks the range: the highest and the lowest price from 08:30 to 08:45. It buys when a candle closes above the range. It sells short (sells first, to profit if price falls) when a candle closes below it. The stop-loss is at the other side of the range. The take-profit is twice as far from the breakout candle's close as the stop-loss (2R). Trades still open at 12:00 close then. We tested these basic rules on 93 jobs report days from 2018 to 2025. The markets were micro Nasdaq 100, S&P 500 and gold futures (MNQ, MES and MGC), each on 5-minute and 15-minute charts. After trading costs, 1 of the 6 tests made money: MES on the 5-minute chart, +2.7% in 8 years. The range was 3 to 4 times wider than on other days, so only 6.1% of the trades reached the take-profit. With only 93 jobs report days, every test has fewer than 100 trades. So each result is marked 'Too few trades', and the 'Where it worked' box counts 0 under 'Made money'.

6 backtests 2018–2025 Trading costs included Tested 2 November 2026

Where it worked 6 backtests
Made money
0
of 6 tests, with the basic rules
Made money in both periods
0
2018–2021 and again 2022–2025
Best backtest
+3%
MES (Micro S&P 500), 5-minute chart: account growth 2018–2025
Hold until 12:00, no take-profit
0
tests made money in both periods, compared with 0 with the basic rules

The results

Results on every market

Each box shows one backtest of the NFP day breakout with the basic rules, from 2018 to 2025, after trading costs: the % result, and a small chart of the account balance. The solid line is the account balance and the dashed line is the starting balance. Green results made money; red results lost money. Under each result: whether it made money in both 2018–2021 and 2022–2025, or passed all four of our checks (see "How a test passes" further down).

Market 5-minute 15-minute
MNQ (Micro Nasdaq 100) −5% Too few trades −0.6% Too few trades
MES (Micro S&P 500) +3% Too few trades −2% Too few trades
MGC (Micro Gold) −9% Too few trades −5% Too few trades
All the numbers, test by test
Market Chart Trades Win rate Profit factor Result Max drawdown 2018–2021 2022–2025 Monte Carlo drawdown Trading costs
MNQ (Micro Nasdaq 100) 5-minute 88 45.5% 0.86 −4.8% −10.8% −5.3% +0.6% −13.7% $516
MNQ (Micro Nasdaq 100) 15-minute 86 48.8% 0.98 −0.6% −8.9% −1.6% +1.1% −11.7% $498
MES (Micro S&P 500) 5-minute 92 48.9% 1.08 +2.7% −9.0% −1.2% +4.0% −10.5% $1,150
MES (Micro S&P 500) 15-minute 92 47.8% 0.95 −1.7% −8.8% −3.0% +1.4% −11.7% $1,105
MGC (Micro Gold) 5-minute 87 42.5% 0.62 −9.2% −11.7% −10.9% +2.0% −13.4% $695
MGC (Micro Gold) 15-minute 83 44.6% 0.73 −5.3% −8.0% −7.3% +2.1% −9.9% $651

Profit factor is the money won divided by the money lost. Above 1 means the test made money. Max drawdown is the biggest fall from the highest balance. 2018–2021 and 2022–2025 show the result in each period on its own. Monte Carlo drawdown: we shuffled the trades into a random order 1,000 times; in 95% of those runs, the worst drawdown was this number or less. Result is the change in the account, with the risk of each trade set to 1% of the account at that time.

The account balance

The best test and the middle test

Best test MES (Micro S&P 500), 5-minute chart +2.7% from 2018 to 2025
Middle test (median): half of the 6 did better, half did worse MES (Micro S&P 500), 15-minute chart −1.7% from 2018 to 2025

What we found

What the 6 backtests show

  1. With the basic rules, 1 of the 6 tests made money from 2018 to 2025, after trading costs: MES on the 5-minute chart, +2.7%. The other 5 lost between 0.6% (MNQ, 15-minute chart) and 9.2% (MGC, 5-minute chart). In each test, the account's biggest fall from its highest balance was between 8.0% and 11.7%. All 6 tests lost money in 2018–2021 and made money in 2022–2025, but only +0.6% to +4.0%. Each period's % is the change in the account during those years. No test on this page can pass our four checks (see 'How a test passes'). A test needs at least 100 trades, and there were only 93 jobs report days, so every result is marked 'Too few trades'. With 83 to 92 trades, a result of a few percent either way can come from luck, so read these results as a sign, not as proof. R is what one trade risks: 1% of the account at the time of the trade. The worst year was 2020: the 6 tests together lost 39.8R, about 6.6R per test, and 45 of the 72 trades hit the stop-loss.

  2. To see what the jobs report changes, we ran the same rules on every trading day from 2018 to 2025. Then we split the trades into jobs report days and other days. The other days include days with other reports at 08:30, such as CPI (inflation) and the weekly jobless claims. In this comparison, every trade risked a fixed $500 instead of 1% of the account, so 1R is $500. Before trading costs, the jobs report gave this breakout no edge: the trades on jobs report days lost 0.020R each on average, the 3 markets together. The trades on other days lost 0.009R each, so before costs, both kinds of day were close to break-even. On MNQ and MES, the trades on jobs report days did a little better than on other days. On MGC, they did worse (see the table 'Jobs report days against other days' below). On a typical (median) jobs report day, the range from 08:30 to 08:45 was 3 to 4 times as wide as on other days. On MNQ, it was 81.75 points, compared with 21.38 points. After costs, the same rules lost money on the other days in all 6 tests. The trades on jobs report days lost less, 0.038R each against 0.065R, only because a wider range needs fewer contracts and so pays less in costs.

  3. The 2R take-profit was rarely reached. On a jobs report day, the range is wide, so the stop-loss is far from the breakout candle's close, and the take-profit is twice as far. Only 32 of the 528 trades (6.1%) reached the take-profit, and on MGC only 2 of 170. 158 trades (29.9%) hit the stop-loss. The other 338 (64.0%) were still open at 12:00 and closed then. In the comparison with other days, 23.3% of the trades on other days reached the take-profit. So on jobs report days, the result mostly came from where price was at 12:00. Holding every trade until 12:00, with no take-profit, changed the results by only a few percent. With it, 3 of the 6 tests made money from 2018 to 2025, compared with 1 with the basic rules, but only +1.5% to +3.1%. MGC still lost money on both charts.

  4. Trading the first move after the report did worse than waiting 15 minutes. In that version, the range is the 15 minutes before the report, 08:15 to 08:30. So the 08:30 candle, the first one after the report, can already be the breakout. It was the breakout in 466 out of 555 trades (84.0%). This version lost money in all 6 tests from 2018 to 2025, from 4.3% (MGC, 15-minute chart) to 20.7% (MES, 5-minute chart). 56.2% of its trades hit the stop-loss, compared with 29.9% with the basic rules. Waiting 30 minutes, with a range from 08:30 to 09:00, did better than the basic rules in 5 of the 6 tests. But it made money in only 1 of them: MNQ on the 15-minute chart, +3.1% (see the table 'How long to wait after the report' below).

  5. On MNQ and MES, breakouts against the move of the first 15 minutes did better than breakouts in the same direction. We found this after the test, so it needs its own test before anyone trades it. The first 15 minutes went up when the close at 08:45 was above the open at 08:30. On those days, a break above the range went the same way, and a break below the range went against it. In the 4 MNQ and MES tests, the 248 trades in the same direction as the first 15 minutes lost 0.095R each on average. The 104 trades against it made 0.204R each. The trades against the first 15 minutes did better in each of the 4 tests, and in both 2018–2021 and 2022–2025. On MGC, the opposite happened: the trades in the same direction lost less (0.056R each) than the trades against it (0.144R each). The version that trades only in the direction of the first 15 minutes lost money in all 6 tests.

Jobs report days against other days

Before trading costs, the jobs report gave this breakout no edge

To compare, we ran the same rules on every trading day from 2018 to 2025, on the same 3 markets and 2 charts. Then we split the trades into jobs report days and other days. Each row puts together the trades of both charts of one market. The typical range is the median range from 08:30 to 08:45: on half of the days, it was smaller. It counts every day, also the days with no trade. The other columns show the average result of one trade, before and after trading costs. R is what one trade risks. In this comparison, every trade risked a fixed $500 instead of 1% of the account. Before costs, the 3 markets together, the trades on jobs report days lost 0.020R each, and the trades on other days lost 0.009R each.

Market Typical range, jobs report days Typical range, other days Per trade before costs, jobs report days Per trade before costs, other days Per trade after costs, jobs report days Per trade after costs, other days
MNQ 81.75 points 21.38 points −0.017R −0.031R −0.029R −0.069R
MES 19.50 points 5.25 points +0.026R −0.027R +0.002R −0.110R
MGC (micro gold) $12.80 $4.10 −0.073R +0.033R −0.089R −0.015R

The jobs report days had 174 trades on MNQ, 184 on MES and 170 on MGC. The other days had 3,785, 3,795 and 3,766. Costs took 0.012R per trade on jobs report days and 0.038R on other days on MNQ, 0.024R and 0.083R on MES, and 0.017R and 0.048R on MGC. The comparison uses the same 1-tick spread on every day, but just after the report, real spreads are often wider. With about 3,800 trades per market, the losses on other days would use up a $50,000 account on MNQ and MES. So we ran this comparison on a larger account, with the same fixed $500 risk on every trade. A day was skipped only when one contract risked more than $500. The other days include days with other reports at 08:30, such as CPI and the weekly jobless claims. The MGC range is in dollars of the gold price: one MGC contract makes or loses $10 when gold moves $1.

How long to wait after the report

Trading the first move after the report lost money in all 6 tests

Each row is one market and chart, from 2018 to 2025, after trading costs, on an account that started at $50,000. Each column uses a different range, with the same rules after it. With the range before the report (08:15 to 08:30), the first candle after the report can be the breakout. The basic rules use the first 15 minutes after the report (08:30 to 08:45), and 'Wait 30 minutes' uses 08:30 to 09:00. Each cell shows the change in the account, with the number of trades in brackets.

Market Chart Range before the report: 08:15 to 08:30 Basic rules: 08:30 to 08:45 Wait 30 minutes: 08:30 to 09:00
MNQ 5-minute −14.3% (91) −4.8% (88) −0.7% (85)
MNQ 15-minute −11.7% (92) −0.6% (86) +3.1% (83)
MES 5-minute −20.7% (93) +2.7% (92) −2.2% (91)
MES 15-minute −8.9% (93) −1.7% (92) −0.2% (91)
MGC (micro gold) 5-minute −6.6% (93) −9.2% (87) −4.7% (80)
MGC (micro gold) 15-minute −4.3% (93) −5.3% (83) −1.0% (75)

With the 08:15 to 08:30 range, 56.2% of the trades hit the stop-loss, compared with 29.9% with the basic rules and 23.2% when waiting 30 minutes. A later range leaves less time before 12:00, so there were fewer days with a breakout. On MGC's 15-minute chart, waiting 30 minutes traded on 75 days, compared with 93 with the 08:15 to 08:30 range.

With or against the first 15 minutes

On MNQ and MES, breakouts against the first 15 minutes did better (found after the test)

The first 15 minutes after the report went up when the close at 08:45 was above the open at 08:30, and down when it was below. A breakout in the same direction continued that move. A breakout the other way went against it. The cards add up the trades of the basic rules from 2018 to 2025, after trading costs: the 4 MNQ and MES tests, and the 2 MGC tests. R is what one trade risks: 1% of the account at the time of the trade.

MNQ and MES: breakout in the same direction as the first 15 minutes
−0.095R
Average per trade, 248 trades. 46.0% of them made money, and 3.2% reached the take-profit.
MNQ and MES: breakout against the first 15 minutes
+0.204R
Average per trade, 104 trades. 52.9% of them made money, and 21.2% reached the take-profit.
MGC: breakout against the first 15 minutes
−0.144R
Average per trade, 60 trades. The 110 MGC trades in the same direction lost 0.056R each.

On MNQ and MES in 2018–2021, the trades in the same direction lost 0.133R each (126 trades), and the trades against it made 0.155R each (54 trades). In 2022–2025, the trades in the same direction lost 0.056R each (122 trades), and the trades against it made 0.257R each (50 trades). We left out 6 MES trades on days when the close at 08:45 was the same as the open at 08:30. We found this split after the test. So it is a reason for a new test, not a rule to trade. Each R figure is a trade's result after costs, divided by 1% of the account at that time.

The strategy

What the NFP day breakout is

The jobs report is the US government's monthly report on jobs, officially called the Employment Situation report. Its main number is non-farm payrolls (NFP): how many jobs US employers added or cut in the month before, not counting farm jobs. It comes out at 08:30 New York time, usually on the first Friday of the month. It is one of the reports that moves markets most, so traders call that day NFP day. In the first minutes after the report, price often jumps one way and then the other. So a common way to trade it is to wait. Mark the highest and the lowest price of the first 15 minutes, from 08:30 to 08:45, and trade the first breakout of that range. Traders use it on index futures such as NQ (Nasdaq 100 futures) and ES (S&P 500 futures), and on gold. On a typical jobs report day, the range alone was worth about 2% (ES) to 3.3% (NQ) of a $50,000 account for one full-size contract. So we tested MNQ, MES and MGC, the micro contracts of NQ, ES and gold futures. A micro contract follows the same price at one tenth of the size, so a trade can risk close to 1% of the account in whole contracts. We used 5-minute and 15-minute charts. The range is the same on both: 3 candles on the 5-minute chart, and one candle, the 08:30 candle, on the 15-minute chart. The chart decides which candle close counts as the breakout. That close also sets the entry (the next candle's open), the risk and the take-profit. On the 15-minute chart, the first breakout candle closes at 09:00 at the earliest, compared with 08:50 on the 5-minute chart. The time for a breakout includes 09:30, when the US stock market opens. With the basic rules, 275 out of 528 trades opened before 09:30, and the rest at 09:30 or later.

Release days
We tested 93 of the 95 jobs report days from 2018 to 2025, all at 08:30 New York time, from the BacktestingMax economic calendar. 2 releases came out on Good Friday (2 April 2021 and 7 April 2023), when the US stock market was closed. Our data has no prices on those 2 days. 4 releases were not on a Friday. The July 4 holiday moved two of them to a Thursday: 2 July 2020 and 3 July 2025. The US government shutdown of late 2025 moved two more, to Thursday 20 November and Tuesday 16 December 2025, and there was no release in October 2025
Range
08:30 to 08:45 New York time, the first 15 minutes after the report. In UK time, that is 13:30 to 13:45 for most of the year
Breakout
A candle closes above the range high (buy) or below the range low (sell), from 08:45 until 12:00 New York time. The US stock market opens at 09:30, inside this window
Stop-loss
The other side of the range
Take-profit
Twice as far from the breakout candle's close as the stop-loss (2R). A trade still open at 12:00 New York time closes then
Trades per day
1 at most: the first breakout. On 1 to 10 of the 93 days, depending on the market and the chart, no candle closed past the range before 12:00, so there was no trade
Account and risk
$50,000 at the start. That is a common size for a prop firm evaluation. A prop firm is a company that lets traders trade its money, and the evaluation is the trading test you pass first. Each trade risks 1% of the balance at that time, rounded down to whole contracts. A typical (median) trade used 2 MNQ, 4 MES or 3 MGC contracts. If even 1 contract would risk more than 1%, the day is skipped. This happened on 2 days (5-minute chart) and 3 days (15-minute chart) on MNQ, and never on MES or MGC
Contracts
MNQ, MES and MGC are the micro contracts of NQ, ES and gold futures (GC): the same prices at one tenth of the size. One MNQ contract makes or loses $2 per point, one MES contract $5 per point, and one MGC contract $10 when gold moves $1. We did not test YM (Dow), because our data has only its full-size contract. On 69 of the 93 jobs report days, the range of one YM contract was already worth more than $500, 1% of the account. We also left out RTY (Russell 2000), because our RTY data starts only in 2020
Fills
The trade opens at the open of the candle after the breakout candle. The stop-loss fills at its price, or at a candle's open if price opens past it. The take-profit fills at its exact price. A trade still open at 12:00 closes at the open of the 12:00 candle. When price reaches the stop-loss and the take-profit in the same candle, the backtest looks at the 1-minute candles inside it to see which came first. If both are in the same 1-minute candle, the backtest counts the stop-loss
Price data
BacktestingMax's futures data. It is built from CFD prices (a broker's price that follows the same market). It is adjusted to match the real contracts: their price, trading hours, tick (the smallest price step) and roll (the switch from one contract month to the next). It is not exchange data. Before mid-2018, our stock index data has hours with stale prices (prices that did not update) outside the stock market's hours. So we looked closely at January to June 2018. From 08:30 to 12:00, prices updated normally, on jobs report days and on other days. Without the 6 jobs report days of January to June 2018, each test's total changed by 1.6R or less
Trading costs
The spread is the gap between the buy and the sell price. We used a spread of 1 tick: $0.50 per contract on MNQ, $1.25 on MES and $1.00 on MGC. A trade pays half of it when it opens and half when it closes. A trade that closes at the take-profit pays no spread when it closes. There is also a commission (the broker's fee) of $0.62 per contract when a trade opens, and again when it closes. On average, a trade paid about $6 in costs on MNQ, $12 on MES and $8 on MGC. Real costs around the jobs report can be higher: spreads get wider in the first minutes after the report, and stop-loss orders can fill past their price. This backtest adds no extra cost for that

The rules we tested

  1. Trade only on the days the US jobs report comes out, at 08:30 New York time. We took these days from the BacktestingMax economic calendar, including the few that were not on a Friday (see 'Release days', under 'What the NFP day breakout is').
  2. Mark the range: the highest and the lowest price from 08:30 to 08:45 New York time. On the 5-minute chart, that is the 3 candles from 08:30 to 08:45. On the 15-minute chart, it is the one candle from 08:30 to 08:45.
  3. After 08:45, buy when a candle closes above the range high. Sell (go short) when a candle closes below the range low. A flat candle (high equal to low, which usually means the price did not update) never counts. The trade opens at the next candle's open. A breakout counts on any candle that closes before 12:00 New York time.
  4. Put the stop-loss at the other side of the range: at the range low for a buy, and at the range high for a sell.
  5. Put the take-profit twice as far from the breakout candle's close as the stop-loss, in the direction of the trade. Traders call this 2R, where R is what one trade risks.
  6. If the trade is still open at 12:00 New York time, close it then.
  7. Take only the first breakout of the day, win or lose. After that trade, wait for the next jobs report.
  8. Size every trade so that the distance from the breakout candle's close to the stop-loss is worth 1% of the account balance at that time. Futures trade in whole contracts, so round down to a whole number of contracts. If even one contract would risk more than 1% of the account, skip the day. Because of the rounding, and because the trade opens at the next candle's open, a full loss costs close to 1% of the account, not exactly 1%.

The method

How we tested it

The test

Markets
MNQ (Micro Nasdaq 100), MES (Micro S&P 500) and MGC (Micro Gold)
Charts
5-minute and 15-minute candles
Dates
January 2018 to December 2025
Account
$50,000, risking 1% of the account on each trade
Trading costs
Included. Every trade pays that market's normal trading cost: the spread, which is the gap between the buy price and the sell price.

How a test passes

We call a test passed only if it meets all four checks. A strategy can make money in one backtest and still fail one of these checks.

  • At least 100 trades. With fewer trades, a good result could be luck.
  • It made money from 2018 to 2021 and again from 2022 to 2025. This shows whether the strategy kept working in the newer years, not only in the older ones.
  • A profit factor (the money won divided by the money lost) of at least 1.2 from 2022 to 2025, after trading costs.
  • In 95% of 1,000 random shuffles of the trades, the account must not fall more than 30% from its highest point.

Improvements

Can the NFP day breakout be improved?

We tested four changes that jobs report traders often make, one at a time, on the same 6 tests. Two change how long you wait after the report. One uses a range before the report (08:15 to 08:30), so it can trade the first move after the report. The other waits 30 minutes instead of 15. One change is to the exit: no take-profit, so every trade is held until the stop-loss or 12:00. One adds a filter: trade only in the direction of the first 15 minutes. The table below explains each one. If you pick the best change and judge it on the same years you used to pick it, it almost always looks better than it really is. So we picked the best change using 2018–2021 only: the change that made money in the most tests. In a tie, we would pick the one with the better middle test (the median: half of the tests did better, half did worse). Then we tested it on 2022–2025, the newer years we kept aside.

Version Made money 2018–2021years used to pick the best version Made money 2022–2025years not used to pick it Made money in both periods Passed all four checks
Basic rules The rules under 'The rules we tested': the range from 08:30 to 08:45, the stop-loss at the other side, a 2R take-profit and a close at 12:00. 0 of 6middle test −4.2% 6 of 6middle test +1.7% 0 0
Range before the report: 08:15 to 08:30 The range is the 15 minutes before the report, 08:15 to 08:30, and a breakout counts from the candle that opens at 08:30. So this version can trade the first move after the report. The earliest trade opens when the first candle after the report closes: at 08:35 on the 5-minute chart, and at 08:45 on the 15-minute chart. 0 of 6middle test −5.5% 1 of 6middle test −5.5% 0 0
Wait 30 minutes: range 08:30 to 09:00 The range is the first 30 minutes after the report, 08:30 to 09:00, and a breakout counts from 09:00. 0 of 6middle test −3.0% 6 of 6middle test +2.2% 0 0
Hold until 12:00, no take-profitBest on 2018–2021 No take-profit. A trade ends at the stop-loss, or at 12:00 New York time. 2 of 6middle test −0.8% 5 of 6middle test +1.4% 0 0
Only in the direction of the first 15 minutes If the close at 08:45 is above the open at 08:30, only buy. If it is below, only sell. If it is the same, don't trade that day. A breakout the other way doesn't count: wait for one in the allowed direction until 12:00. 0 of 6middle test −3.2% 0 of 6middle test −0.8% 0 0

No change made the NFP day breakout work. None of them made money in more than 3 of the 6 tests from 2018 to 2025. On 2018–2021, the years we used to pick, the basic rules lost money in all 6 tests. Holding until 12:00 did best on those years: it made money in 2 of 6 tests. Its middle test was −0.8%, compared with −4.2% with the basic rules. On 2022–2025, the newer years we kept aside, it made money in 5 of 6 tests, compared with 6 of 6 with the basic rules. Its middle test was +1.4%, compared with +1.7% with the basic rules. So the change we picked did not beat the basic rules in the newer years. Before our 100-trade rule, 2 tests made money in both periods with holding until 12:00: MNQ on the 15-minute chart and MES on the 5-minute chart. The table shows 0, because every test here has fewer than 100 trades. From 2018 to 2025, those 2 tests made only +3.1% and +2.1%, from 86 and 92 trades. Holding changed little, because only 6.1% of the trades with the basic rules reached the take-profit. Waiting 30 minutes lost money in all 6 tests in 2018–2021 and made money in all 6 in 2022–2025, like the basic rules. From 2018 to 2025, the range before the report (08:15 to 08:30) lost money in all 6 tests. So did trading only in the direction of the first 15 minutes.

Questions

Questions traders ask

Does the NFP breakout strategy work?

Not in our backtest. We tested the breakout of the 08:30 to 08:45 New York range on 93 jobs report days from 2018 to 2025. The markets were MNQ, MES and MGC, the micro contracts of NQ, ES and gold futures, each on 5-minute and 15-minute charts. The stop-loss was at the other side of the range. The take-profit was twice as far from the breakout candle's close as the stop-loss (2R), and every trade closed by 12:00. After trading costs, only MES on the 5-minute chart made money: +2.7% from 2018 to 2025. Each test had only 83 to 92 trades, so even that result could be luck. We also tested four common changes: a range before the report, waiting 30 minutes, holding until 12:00, and trading only in the direction of the first 15 minutes. None of them made money in more than 3 of the 6 tests from 2018 to 2025.

Does the NFP breakout work on gold?

No. Gold did worst in our backtest. On MGC (micro gold futures), the account lost 9.2% on the 5-minute chart and 5.3% on the 15-minute chart from 2018 to 2025, after trading costs. Only 2 of the 170 MGC trades reached the take-profit, which was twice as far from the breakout candle's close as the stop-loss. 136 were still open at 12:00 and closed then. To compare, we ran the same rules on every trading day. R is what one trade risks, and in that comparison every trade risked a fixed $500 instead of 1% of the account. After costs, gold breakouts lost money on both kinds of days: 0.089R per trade on jobs report days and 0.015R on other days. Before costs, they did worse on jobs report days (−0.073R) than on other days (+0.033R).

Does the NFP breakout work on NQ?

No, not in our backtest. We tested MNQ, the micro contract that follows the same price as NQ (Nasdaq 100 futures). From 2018 to 2025, after trading costs, the account lost 4.8% on the 5-minute chart and 0.6% on the 15-minute chart. On both charts, it lost money in 2018–2021 and made a little in 2022–2025: +0.6% and +1.1%. One group of trades did better. A breakout against the move of the first 15 minutes is, for example, a break below the range after price rose from 08:30 to 08:45. R is what one trade risks: 1% of the account. On MNQ, those trades made 0.198R (5-minute chart) and 0.233R (15-minute chart) per trade. The breakouts in the same direction lost 0.168R and 0.123R. We found this after the test, so it needs a new test before anyone trades it.

How long should you wait after the NFP release before trading?

In our backtest, waiting did better than trading the first move, but no wait time made money in most tests. The jobs report comes out at 08:30 New York time, which is 13:30 in the UK for most of the year. With the 15 minutes before the report as the range (08:15 to 08:30), the first candle after the report could be the breakout. That version lost money in all 6 tests. Waiting 15 minutes, with the range from 08:30 to 08:45, made money in 1 of the 6 tests. Waiting 30 minutes, with the range from 08:30 to 09:00, did better than waiting 15 minutes in 5 of the 6 tests. But it also made money in only 1 of them.

Keep exploring

Related strategies we tested

Seasonal & calendar FOMC day fade backtest on NQ, ES and gold futures Made money in 0 of 6 tests, 0 of them in both periods. Best: MGC (Micro Gold), 5-minute, +12%
The strategy code we ran

This is the exact code from the BacktestingMax strategy engine. Paste it into the strategy editor in the app to run it on any market.

class NfpDayBreakout(Strategy):
    """NFP day breakout on US futures: on the days the US jobs report comes out, trade the
    first breakout of the range of the 15 minutes after the release.
    All times are New York time (daylight saving included). The jobs report (the
    Employment Situation report, with the non-farm payrolls number, NFP) comes out at
    08:30, usually on the first Friday of the month. Holidays move some releases to a
    Thursday, and the US government shutdown of late 2025 moved two of them (September
    2025 to Thursday 20 November, October and November 2025 together to Tuesday 16
    December). The list below has the real release days, all at 08:30 New York.
    Release days: 'Non-Farm Employment Change' in the BacktestingMax economic calendar.
    Two of them, Good Friday 2 April 2021 and 7 April 2023, have no prices in the data
    (the stock market was closed), so there is no trade on them.
    Standard (all switches off):
      1. Trade only on release days.
      2. The range: the highest and the lowest price from 08:30 to 08:45 (3 candles on
         the 5-minute chart, 1 candle on the 15-minute chart). It is the same range on
         both charts.
      3. After 08:45, buy when a candle closes above the range high, and sell (go short)
         when a candle closes below the range low. A flat candle (high equal to low)
         never counts. The trade opens at the next candle's open. A breakout counts on
         any candle that closes before 12:00.
      4. Stop-loss at the other side of the range: the range low for a buy, the range
         high for a sell.
      5. Take-profit 2R away, R being the distance from the breakout candle's close to
         the stop-loss.
      6. A trade still open at 12:00 closes then.
      7. One trade a day: the first breakout, win or lose.
      8. Size every trade so that the stop-loss costs 1% of the account, in whole
         contracts. If one contract would risk more, skip the day.
    The changes, one at a time:
      before_release = 1    trade the release itself: the range is the 15 minutes before
                            it (08:15 to 08:30), and a breakout counts from the candle that
                            opens at 08:30
      range_minutes  = 30   wait 30 minutes: the range is 08:30 to 09:00, and a breakout
                            counts from 09:00
      hold           = 1    no take-profit: only the stop-loss or 12:00 ends the trade
      with_first     = 1    only trade in the direction of the first 15 minutes: buy only
                            if the range closed higher than it opened (the last price at
                            08:45 above the first price at 08:30), sell only if it closed
                            lower. A breakout the other way doesn't count: wait for one in
                            the allowed direction until 12:00
      every_day      = 1    a check, not a change: the same rules on every trading day
                            (release days included), to compare release days with the
                            other days. In this check every trade risks a fixed $500 (1% of
                            $50,000), so a falling balance doesn't change which days one
                            contract fits the risk. Run it on a big account (we used
                            $10,000,000), so that the balance never runs short
    """
    params = {"range_minutes": Param(type=int, default=15, min=5, max=60),
              "exit_rr": Param(type=float, default=2.0, min=0.5, max=10.0),
              "before_release": Param(type=int, default=0, min=0, max=1),
              "hold": Param(type=int, default=0, min=0, max=1),
              "with_first": Param(type=int, default=0, min=0, max=1),
              "every_day": Param(type=int, default=0, min=0, max=1)}
    lookback = 2
    release = 510         # 08:30 New York, in minutes after midnight
    exit_time = 720       # 12:00 New York
    # Jobs report days (08:30 New York), from the BacktestingMax economic calendar.
    release_days = (
        "2018-01-05 2018-02-02 2018-03-09 2018-04-06 2018-05-04 2018-06-01 2018-07-06 2018-08-03 "
        "2018-09-07 2018-10-05 2018-11-02 2018-12-07 "
        "2019-01-04 2019-02-01 2019-03-08 2019-04-05 2019-05-03 2019-06-07 2019-07-05 2019-08-02 "
        "2019-09-06 2019-10-04 2019-11-01 2019-12-06 "
        "2020-01-10 2020-02-07 2020-03-06 2020-04-03 2020-05-08 2020-06-05 2020-07-02 2020-08-07 "
        "2020-09-04 2020-10-02 2020-11-06 2020-12-04 "
        "2021-01-08 2021-02-05 2021-03-05 2021-04-02 2021-05-07 2021-06-04 2021-07-02 2021-08-06 "
        "2021-09-03 2021-10-08 2021-11-05 2021-12-03 "
        "2022-01-07 2022-02-04 2022-03-04 2022-04-01 2022-05-06 2022-06-03 2022-07-08 2022-08-05 "
        "2022-09-02 2022-10-07 2022-11-04 2022-12-02 "
        "2023-01-06 2023-02-03 2023-03-10 2023-04-07 2023-05-05 2023-06-02 2023-07-07 2023-08-04 "
        "2023-09-01 2023-10-06 2023-11-03 2023-12-08 "
        "2024-01-05 2024-02-02 2024-03-08 2024-04-05 2024-05-03 2024-06-07 2024-07-05 2024-08-02 "
        "2024-09-06 2024-10-04 2024-11-01 2024-12-06 "
        "2025-01-10 2025-02-07 2025-03-07 2025-04-04 2025-05-02 2025-06-06 2025-07-03 2025-08-01 "
        "2025-09-05 2025-11-20 2025-12-16 "
        "2026-01-09 2026-02-11 2026-03-06 2026-04-03 2026-05-08 2026-06-05 2026-07-02 2026-08-07 "
        "2026-09-04 2026-10-02")
    # every_day only: days the New York Stock Exchange is closed (the futures trade a
    # short, thin session on some of them). Release days always trade.
    closed_days = (
        "2018-01-01 2018-01-15 2018-02-19 2018-03-30 2018-05-28 2018-07-04 2018-09-03 2018-11-22 "
        "2018-12-05 2018-12-25 "
        "2019-01-01 2019-01-21 2019-02-18 2019-04-19 2019-05-27 2019-07-04 2019-09-02 2019-11-28 "
        "2019-12-25 "
        "2020-01-01 2020-01-20 2020-02-17 2020-04-10 2020-05-25 2020-07-03 2020-09-07 2020-11-26 "
        "2020-12-25 "
        "2021-01-01 2021-01-18 2021-02-15 2021-04-02 2021-05-31 2021-07-05 2021-09-06 2021-11-25 "
        "2021-12-24 "
        "2022-01-17 2022-02-21 2022-04-15 2022-05-30 2022-06-20 2022-07-04 2022-09-05 2022-11-24 "
        "2022-12-26 "
        "2023-01-02 2023-01-16 2023-02-20 2023-04-07 2023-05-29 2023-06-19 2023-07-04 2023-09-04 "
        "2023-11-23 2023-12-25 "
        "2024-01-01 2024-01-15 2024-02-19 2024-03-29 2024-05-27 2024-06-19 2024-07-04 2024-09-02 "
        "2024-11-28 2024-12-25 "
        "2025-01-01 2025-01-09 2025-01-20 2025-02-17 2025-04-18 2025-05-26 2025-06-19 2025-07-04 "
        "2025-09-01 2025-11-27 2025-12-25")
    def init(self, ctx):
        self.ny = ctx.clock("America/New_York")
        self.releases = set(self.release_days.split())
        self.no_trading = set(self.closed_days.split())
        self.day = None
        self.high = None          # the range high
        self.low = None           # the range low
        self.count = 0            # candles in the range so far
        self.has_start = False    # True once the candle that opens the range has been seen
        self.first_open = None    # the first price of the range
        self.last_close = None    # the last price of the range
        self.done = True          # True once today's trade is placed, or the day can't trade
        self.trade_day = None     # the date the open trade was placed on
    def on_bar(self, ctx):
        start = self.ny.minute_of_day              # this candle's open, New York time
        end = start + ctx.timeframe_minutes        # this candle's close
        minutes = ctx.params.range_minutes
        first = self.release - minutes if ctx.params.before_release == 1 else self.release
        range_end = first + minutes                # breakouts count from here
        if self.ny.date != self.day:               # a new day: forget yesterday's range
            self.day = self.ny.date
            self.high = self.low = None
            self.count = 0
            self.has_start = False
            self.first_open = self.last_close = None
            if self.day in self.releases:
                self.done = False
            elif ctx.params.every_day == 1:
                self.done = self.ny.weekday >= 5 or self.day in self.no_trading
            else:
                self.done = True
        if ctx.position is not None:
            if end >= self.exit_time or self.ny.date != self.trade_day:
                ctx.close_position()               # fills at the 12:00 candle's open
            return
        if self.done:
            return
        # The range: the candles that open from 08:30 to 08:45.
        if first <= start < range_end:
            if start == first:
                self.has_start = True
                self.first_open = ctx.open[0]
            self.high = ctx.high[0] if self.high is None else max(self.high, ctx.high[0])
            self.low = ctx.low[0] if self.low is None else min(self.low, ctx.low[0])
            self.last_close = ctx.close[0]
            self.count += 1
            return
        if start < range_end:
            return
        if end >= self.exit_time:                  # no breakout before 12:00: no trade today
            self.done = True
            return
        full = self.has_start and self.count * ctx.timeframe_minutes == minutes
        if not ctx.gate("full_range", full and self.high is not None and self.high > self.low):
            self.done = True
            return
        direction = 0
        if ctx.params.with_first == 1:
            direction = self.last_close - self.first_open   # how the first 15 minutes moved
            if not ctx.gate("first_15_minutes_moved", direction != 0):
                self.done = True
                return
        close = ctx.close[0]
        moved = ctx.high[0] > ctx.low[0]           # a flat candle never counts
        up = moved and close > self.high
        down = moved and close < self.low
        if not ctx.gate("range_break", up or down):
            return
        if ctx.params.with_first == 1 and not ctx.gate("with_first_15_minutes",
                                                       (up and direction > 0) or (down and direction < 0)):
            return                                 # a breakout the other way: keep waiting
        self.done = True                           # one trade a day: this breakout is it
        stop = self.low if up else self.high
        risk = abs(close - stop)
        if ctx.params.every_day == 1:
            # The check: every trade risks a fixed $500 (1% of $50,000), whatever the
            # balance after the days before.
            size = ctx.size_by_risk_pct(500 / ctx.account.starting_equity, stop=stop, entry=close,
                                        basis="initial")
        else:
            size = ctx.size_by_risk_pct(0.01, stop=stop, entry=close)
        if not ctx.gate("one_contract_fits_1pct_risk", size > 0):
            return                                 # one contract would risk more than 1%
        target = None
        if ctx.params.hold == 0:
            target = close + ctx.params.exit_rr * risk if up else close - ctx.params.exit_rr * risk
        self.trade_day = self.day
        if up:
            ctx.buy(size=size, sl=stop, tp=target, tag="nfp_long")
        else:
            ctx.sell(size=size, sl=stop, tp=target, tag="nfp_short")

Your turn

Test the NFP day breakout yourself

Change the settings, the market or the stop-loss and see the result in seconds. Ask the BacktestingMax AI: Backtest the NFP day breakout on MNQ, 15-minute chart: on US jobs report days only, mark the 08:30 to 08:45 New York range, buy when a candle closes above the range, sell when a candle closes below it, take only the first breakout of the day, stop-loss at the other side of the range, take-profit 2R, close at 12:00, risk 1% per trade.

Try it free in BacktestingMax

Free account. No credit card needed.

See every strategy we tested Browse strategies shared by traders

Backtest on historical data with trading costs, run by BacktestingMax. Past results do not guarantee future results, and nothing here is financial advice. Updated 2 November 2026.