Economic Indicators
across five years of data, a US Non-Farm Payrolls release moves EUR/USD an average of 48 pips within 30 minutes and 63 pips within four hours, measured as maximum excursion from the release price.…
FX Terminal Research · 2026-08-15 · 14 min read
Short answer: across five years of data, a US Non-Farm Payrolls release moves EUR/USD an average of 48 pips within 30 minutes and 63 pips within four hours, measured as maximum excursion from the release price. USD/JPY moves roughly 1.6× further on the same event — 77 pips at 30 minutes, 102 at four hours. A Fed rate decision, contrary to its reputation, is smaller than NFP at the 30-minute mark (35 pips on EUR/USD) and only catches up after the press conference lands.
Those numbers come from 1,221,548 individual measurements covering 44,075 economic releases across 27 currency pairs, running from August 2021 to the present. Every figure in this article is reproducible on the news impact by pair screen, which is free and needs no account.
This article explains what was measured, how, what the data says, and — importantly — the four places where these numbers will mislead you if you take them at face value.
Ask ten traders how big NFP is and you will get ten anecdotes. The reason there is no good public answer is that the question hides three separate measurement decisions, and most attempts get at least one of them wrong.
The obvious approach is to take the price 30 minutes after the release and subtract the price at the release. Call that the net move.
The net move is almost useless for a trader. Consider a release where EUR/USD runs 100 pips higher in eight minutes and then gives back 50. The net move is +50 pips. But if you were short with a 40-pip stop, you were stopped out at full size. The 100-pip excursion is what actually happened to your account; the 50-pip net is a bookkeeping artefact.
So FXTerminal measures maximum excursion: the furthest distance price travelled from the release price in either direction, whichever is larger.
impact = max(MFE, MAE)
Where MFE (maximum favourable excursion) is the furthest move up and MAE (maximum adverse excursion) is the furthest move down, both stored as positive distances. Their sum, MFE + MAE, is the whipsaw range — the full span price covered.
This single choice changes the answer materially. On EUR/USD at the 30-minute window, NFP's average net move is close to zero (the direction is a coin flip — more on that below), while its average excursion is 48 pips. If you sized a stop off the net figure you would be stopped out on most releases.
The release lands at, say, 13:30:00 UTC. Which candle do you measure from?
The tempting answer — the candle containing the release — is wrong. That candle's high and low mix pre-release and post-release trading, so it contaminates the reading with whatever the market was doing beforehand. FXTerminal uses the open of the first bar at or after the release instant. Nothing before the print contributes.
There is a separate avgPreDriftPips field recording how far price moved in the 30 minutes before the release, precisely so that pre-positioning drift can be inspected rather than silently folded into the impact number.
This is the one that quietly ruins most amateur attempts, including an early version of ours.
broker candles are timestamped in broker server time — typically EET/EEST, which is UTC+2 in winter and UTC+3 in summer. Economic calendar events are timestamped in UTC. Join the two naively and every measurement is two or three hours off, landing you in a quiet stretch of the Asian session instead of the US data release. The numbers still look plausible; they are just measuring nothing.
FXTerminal converts explicitly through a broker-clock module before any join happens. The smoke test that the conversion is right: impact must increase monotonically with window length. A 4-hour window physically cannot contain a smaller excursion than the 30-minute window nested inside it. Every table in this article satisfies that, which is a stronger correctness guarantee than it sounds.
| Step | What happens |
|---|---|
| 1. Source the releases | Economic calendar events stored in Postgres, with actual/forecast/previous and impact rating. |
| 2. Source the candles | OHLC history for 27 majors and crosses, plus DXY. |
| 3. Pick a resolution | Per release, walk a ladder: M5 → M10 → M15 → M30. Finer is better; the finest available wins. |
| 4. Find the reference bar | First bar opening at or after the release instant, with a maximum tolerance of 300 seconds. |
| 5. Walk forward once | A single forward pass records MFE and MAE for all four nested windows: 30m, 1h, 2h, 4h. |
| 6. Store one row per release × pair × window | Windows as rows, not columns, so a single index serves every possible grouping. |
| 7. Aggregate live | Averages, medians, p90, max, consistency and directional share are computed at query time so any date range works. |
rolling window of roughly 100,000 bars per symbol. That means finer timeframes have shallower history: M5 reaches back about a year, M15 about four years, M30 about eight. So recent releases are measured at 5-minute resolution and older ones degrade gracefully to 15 or 30 minutes.
Does coarse resolution break a 30-minute measurement? Usually no, and for a specific reason: 89% of economic releases land on the hour or half-hour, and over 99% land on a 5-minute boundary. A release at exactly 13:30 measured on M30 bars is measured exactly — one M30 bar is the true 30-minute high and low. Releases that are not aligned fall to a finer rung or are skipped outright rather than approximated.
H1 is deliberately excluded from the ladder. It cannot resolve a 30-minute window at all, and including it would have produced silently wrong rows.
Current resolution mix across the dataset:
| Timeframe | Observations |
|---|---|
| M5 | 92,877 |
| M10 | 87,125 |
| M15 | 77,019 |
| M30 | 48,366 |
All figures below are maximum excursion in pips, measured from the release price. Sample sizes are shown. Data runs from August 2021 to August 2026.
| Event | Pair | Releases | 30 min avg | 30 min median | 1 hr avg | 4 hr avg | p90 (30m) | Max |
|---|---|---|---|---|---|---|---|---|
| Non-Farm Payrolls | EUR/USD | 59 | 48.4 | 43.8 | 50.6 | 62.6 | 74.5 | 164.7 |
| Non-Farm Payrolls | USD/JPY | 59 | 77.1 | 60.5 | 82.5 | 102.4 | 147.7 | 219.5 |
| US CPI (Inflation Rate YoY) | EUR/USD | 60 | 46.5 | 38.2 | 49.7 | 62.6 | 74.2 | 201.5 |
| US CPI (Inflation Rate YoY) | USD/JPY | 60 | 68.2 | 54.9 | 74.5 | 91.5 | 106.3 | 320.7 |
| Fed Interest Rate Decision | EUR/USD | 40 | 34.9 | 27.6 | 51.4 | 61.6 | 66.1 | 85.4 |
| Fed Interest Rate Decision | USD/JPY | 40 | 45.8 | 41.0 | 67.0 | 92.2 | 76.5 | 222.2 |
Read the Fed row twice. At 30 minutes the Fed decision is the smallest of the three US events on EUR/USD — 35 pips against NFP's 48. By the 1-hour mark it has grown 47% to 51 pips, and by 4 hours it is level with NFP. That growth curve is the press conference. The statement itself is largely priced; the Q&A is where the repricing happens. A trader who sizes a Fed trade off the first 30 minutes is measuring the wrong event.
| Event | Pair | Releases | 30 min avg | 1 hr avg | 4 hr avg | Consistency |
|---|---|---|---|---|---|---|
| BoE Interest Rate Decision | GBP/USD | 40 | 48.1 | 53.1 | 74.3 | 0.42 |
| ECB Interest Rate Decision | EUR/USD | 32 | — | 42.6 | — | 0.42 |
| RBNZ Interest Rate Decision | NZD/USD | 33 | 39.6 | 40.7 | — | 0.58 |
| BoJ Interest Rate Decision | USD/JPY | 40 | 45.2 | 55.8 | 89.3 | 0.00 |
| SNB Interest Rate Decision | USD/CHF | 20 | 48.9 | 52.0 | 62.4 | 0.00 |
Two of those consistency scores are zero, and that is the most interesting column in the table.
Consistency is defined as 1 − coefficient of variation, clamped to 0–1. A score near 1 means the event moves a similar distance every time. A score of 0 means the standard deviation of the move is as large as or larger than its mean — the average tells you nothing about the next one.
The BoJ scores 0.00 with an average of 45 pips and a maximum of 404 pips. That is the signature of an event that does nothing for eight consecutive meetings and then reprices the entire yen complex in ninety seconds. The SNB is the same shape. Averaging these events is close to meaningless; the p90 and max columns are the ones that should size your risk.
By contrast the RBNZ scores 0.58 — reliably a 35–45 pip event on NZD/USD, meeting after meeting.
Grouped across every release and every pair carrying that currency, at the 1-hour window:
| Currency | Releases measured | Avg excursion | Median |
|---|---|---|---|
| GBP | 4,606 | 27.3 | 20.8 |
| CAD | 3,153 | 21.5 | 17.0 |
| USD | 18,551 | 19.9 | 14.9 |
| AUD | 3,154 | 18.8 | 13.8 |
| JPY | 3,710 | 18.7 | 14.4 |
| NZD | 1,573 | 18.5 | 12.5 |
| EUR | 8,281 | 17.6 | 13.9 |
| CHF | 1,047 | 16.5 | 12.2 |
Sterling tops the table, and it is not close. Part of this is genuine — GBP crosses are structurally more volatile than EUR crosses — and part is composition: the UK calendar publishes fewer, chunkier releases, while the eurozone publishes a long tail of national-level data that barely registers. The median column shows the same ordering, which suggests it is not driven by a handful of outliers.
| Rank | Event | Currency | Releases | Avg | Median | p90 | Consistency |
|---|---|---|---|---|---|---|---|
| 1 | RBNZ Interest Rate Decision | NZD | 33 | 72.6 | 64.6 | 149.1 | 0.36 |
| 2 | BoE Interest Rate Decision | GBP | 40 | 55.9 | 49.5 | 106.6 | 0.38 |
| 3 | MPC Meeting Minutes | GBP | 39 | 55.4 | 48.9 | 106.2 | 0.37 |
| 4 | SNB Interest Rate Decision | CHF | 20 | 52.0 | 33.1 | 135.9 | 0.00 |
| 5 | US Jobs Report (NFP block) | USD | 59 | 47.2 | 38.4 | 80.8 | 0.34 |
| 6 | US CPI (block) | USD | 60 | 46.6 | 36.5 | 87.0 | 0.22 |
| 7 | BoE Monetary Policy Report | GBP | 15 | 44.9 | 40.7 | 81.3 | 0.46 |
| 8 | RBA Interest Rate Decision | AUD | 47 | 43.8 | 34.2 | 83.4 | 0.27 |
| 9 | UK Services PMI Flash | GBP | 12 | 43.6 | 34.8 | 84.9 | 0.38 |
The RBNZ topping a global list is a measurement artefact worth understanding: it is averaged over NZD crosses like GBP/NZD and EUR/NZD, which are wide-ranging pairs where 120 pips is a normal day. Averaged over NZD/USD alone it is 40 pips. Always read these numbers per pair, not per event. The news impact by pair screen defaults to per-pair grouping for exactly this reason.
Every row carries an upShare field: the fraction of releases where the maximum excursion was upward.
| Event / Pair | upShare |
|---|---|
| NFP → EUR/USD | 0.475 |
| Fed decision → EUR/USD | 0.575 |
| BoE decision → GBP/USD | 0.450 |
| US CPI → EUR/USD | 0.633 |
| US CPI → USD/JPY | 0.417 |
Most sit within a few points of 0.50. These are volatility events, not directional ones. Knowing NFP is coming tells you the market will move; it tells you almost nothing about which way.
The CPI rows are the interesting exception — 0.63 up on EUR/USD and 0.42 up on USD/JPY over 60 releases are both dollar-negative, and they point the same way, which is what you would expect if the effect were real rather than noise. Sixty observations is still thin. Do not build a system on it. (If you want to test whether it survives costs, that is what the news and economic data backtester is for — and the answer there is sobering.)
I would rather you distrust this dataset correctly than trust it incorrectly.
Look at the "US Jobs Report" row above. In the raw data, Non-Farm Payrolls, Unemployment Rate, Average Hourly Earnings MoM and YoY, Participation Rate, Manufacturing Payrolls, Government Payrolls, U-6 and Average Weekly Hours all report identical numbers. They must: they print at the same instant, so they share one price window, and there is no way to attribute the move between them.
The honest reading is "the US jobs report moved EUR/USD 48 pips", not "Non-Farm Payrolls moved EUR/USD 48 pips". The same applies to the CPI block (headline and core, MoM and YoY) and the BoE block (decision, vote splits, minutes).
The USD/JPY CPI row averages 68 pips with a maximum of 321. Position sizing off the average would have been catastrophic on the tail days. Use the p90 column for risk decisions and the median for expectations. The average is mostly there for ranking.
The dataset starts in August 2021 and spans a violent hiking cycle followed by a cutting cycle. Inflation prints were market-defining events in 2022–23 and are considerably less so now. A single average over that period blends two different worlds. The screen lets you narrow the date range; use it.
A 100-pip excursion does not mean 100 pips were available. It means price reached 100 pips from the release before returning. With spreads widening 5–10× through a major release, and slippage on stops, the tradeable fraction of that excursion is much smaller than the number suggests.
The practical question is: how far can price go against me before I am proved wrong, versus before I am stopped out by noise? Use avgMaePips and p90ImpactPips for the specific event and pair you are trading.
Worked example — holding a EUR/USD position through NFP. Average adverse excursion at 30 minutes is 30 pips; p90 impact is 74.5 pips. A 25-pip stop is inside the average adverse move: you will be stopped on more than half of all NFPs regardless of whether your directional view was right. A stop wide enough to survive the noise needs to be north of 75 pips, which changes your position size by a factor of three. That is the calculation, and it is not a judgement call once you have the distribution.
If you are a swing trader with no view on the event, compare the event's p90 to your open risk. An event whose p90 exceeds your stop distance is an event you should be flat through, or hedged, or sized down.
The USD/JPY-versus-EUR/USD gap on US data is consistent and large — roughly 1.6× on both NFP and CPI, at every window. If you want maximum expression of a US data view, the yen pair delivers it. If you want to survive a US data release with a position on, the euro pair is the calmer venue.
Cross-reference the impact data with the forex economic calendar to see what is coming, and with the forex market hours and session clock to know whether a release lands in a liquid session or a thin one. A release into the Tokyo lunch break behaves differently from the same release at the London/New York overlap.
How many pips does NFP move EUR/USD? An average of 48 pips within 30 minutes of the release, measured as maximum excursion from the release price, across 59 releases since August 2021. The median is 43.8 pips and the 90th percentile is 74.5 pips. Over four hours the average grows to 63 pips. On USD/JPY the same event averages 77 pips at 30 minutes and 102 pips at four hours.
Is CPI or NFP more volatile for forex? They are close to identical on EUR/USD — 48.4 pips for the jobs report versus 46.5 for CPI at the 30-minute window. CPI has the fatter tail (a 320-pip maximum on USD/JPY against NFP's 220) and lower consistency, meaning CPI outcomes vary more from release to release. In practice, treat them as equal-sized risks with CPI carrying more tail risk.
Why does the Fed decision move less than NFP in the first 30 minutes? Because the decision itself is usually priced in advance by fed funds futures, while the press conference is not. The Fed's average EUR/USD excursion grows from 34.9 pips at 30 minutes to 51.4 at one hour — a 47% increase driven almost entirely by the Q&A session. NFP, by contrast, delivers its full surprise in a single instant.
What is maximum favourable excursion in news trading? MFE is the furthest price moved in your favour from the entry (or here, from the release price) before the trade closed. Its counterpart, MAE, is the furthest it moved against you. Measuring both separately, instead of only the net move, shows whether an event whipsaws or trends — a release with a 30-pip MFE and a 30-pip MAE is a very different animal from one with a 60-pip MFE and near-zero MAE.
Which economic events move USD/JPY the most? US data, by a wide margin over Japanese data. The US jobs report averages 77 pips at 30 minutes and US CPI 68 pips. The BoJ interest rate decision averages 45 pips but has a maximum of 404 pips and a consistency score of zero, meaning it is normally quiet and occasionally enormous — the highest tail risk of any regularly scheduled event in the dataset.
How far in advance does price start moving before a release?
Each row records avgPreDriftPips, the average move in the 30 minutes before the print. For most major releases it sits in the low single digits — RBNZ decisions show about −4 to −5 pips of drift on NZD crosses — which indicates positioning ahead of the event is modest and the move is genuinely a reaction, not an anticipation.
Can I see this data for my own pair and date range? Yes. The news impact by pair screen is free with no account required. You can group by event, by pair, by event-and-pair, by currency or by impact rating, filter by date range and minimum sample size, and switch between the 30-minute, 1-hour, 2-hour and 4-hour windows.
Does the dataset include gold or indices? Currently 27 FX pairs plus the dollar index (DXY). Metals and indices are not measured in this dataset, though gold and silver are available for live charting and watchlists elsewhere on the platform.
Most advice about trading the news is qualitative — "NFP is big", "watch out for the Fed", "the BoJ can be violent". Those statements are all true and none of them help you size a stop.
The measurable version is more useful and, in three places, contradicts the folklore. The Fed's first half-hour is smaller than NFP's. Sterling's calendar moves markets more than the dollar's on a per-release basis. And the events everyone treats as reliably large — the BoJ, the SNB — are statistically the least reliable of all, with consistency scores of zero and tails that run to four hundred pips.
The full dataset is live and free at fxterminal.app/news-impact. It updates hourly as new releases are measured, and every number above can be reproduced by setting the same grouping, window and date range. If you find a result that contradicts something in this article, the screen is the source of truth, not the article — the data grows every day.