What is spread in forex? Why it widens at rollover and news

5 min readMetaKit

Every forex quote has two prices. The bid is what the market will pay you if you sell; the ask is what it will charge you if you buy. The gap between them is the spread, and it's the one trading cost you pay on every single trade, win or lose, before the price has moved a point.

Spread, in pips and in money

EURUSD quoted at 1.08500 / 1.08512:

  • Spread = 1.08512 − 1.08500 = 0.00012 = 1.2 pips (12 points on a 5-digit quote).
  • On a standard lot (100,000 EUR), one pip on EURUSD is worth about $10, so a 1.2-pip spread costs about $12 per lot traded.

That cost is paid at entry: buy at the ask, and if you closed instantly you'd sell at the bid, 1.2 pips lower. Every trade starts that far in the red. The pip value post has the formula for other pairs and account currencies.

MT5 shows spread in points, not pips, in Market Watch (right-click, enable the Spread column) and in the symbol specification. On 5-digit FX and 3-digit JPY pairs, 10 points is one pip; on gold quoted to 2 digits, 100 points is $1.00.

Why the spread matters more than it looks

For a swing trader with a 100-pip target, a 1-pip spread is 1% of the target. For a scalper aiming at 5 pips, the same spread is 20% of the target, and it shifts the break-even win rate noticeably; the risk-reward post shows by how much. The shorter your trades, the more the spread decides whether a strategy works at all.

Fixed, variable and raw spreads

  • Variable (floating) spreads move with market liquidity. This is what most brokers offer. Tight in liquid hours, wider when it's thin.
  • Fixed spreads stay the same in normal conditions, usually wider than the floating average. The broker absorbs the variation, and often still widens them in extreme conditions.
  • Raw-spread (ECN) accounts pass through the interbank spread, which can be near zero on EURUSD, and charge a commission per lot instead.

To compare a raw account with a standard one, add them up per round turn: a 0.1-pip raw spread plus $7 round-turn commission per lot is about 0.8 pips total on EURUSD, which beats a 1.2-pip standard spread with no commission. The costs post shows where MT5 records the commission.

Why spreads widen at rollover

At 5 p.m. New York time every day, the forex market rolls over to the next value date. For a few minutes around it, many liquidity providers stop quoting or quote very wide while they reset, and brokers pass that on. Spreads on majors that are normally under a pip can blow out to several pips, and on crosses and gold much more.

This is the classic way tight stops die for no visible reason. The chart shows the bid, so a short's stop (which triggers on the ask) can be hit by the spread jumping up, even though the bid line never came near it. If you trade around the daily close, keep stops clear of rollover or accept that cost.

Why spreads widen at news

Before a major release like US non-farm payrolls, CPI or a central bank decision, liquidity providers pull back because they don't want to be on the wrong side of the number. Spreads widen in the minutes before, spike at the release, and normalise over the next few minutes. The same thing happens, more mildly, at session opens and around the weekend close and Sunday open.

If you trade news, the spread is part of your cost, and slippage usually comes with it; the slippage post covers that side. Prop firms that ban news trading, covered in the consistency and news rules post, do it partly for this reason.

How to see how wide your spread really gets

Your broker's "typical spread" page is an average, usually from liquid hours. What you want is your own spread by hour of day.

MT5 candles carry a spread value per bar, and over the MetaKit API you get it with every candle. On most brokers that value is the lowest spread seen during the bar, so it understates spikes, but a bar where even the lowest spread was wide is a bar to avoid. This pulls a week of M5 bars and finds the widest per-bar spread in each hour:

import os
from collections import defaultdict
 
import requests
 
BASE = "https://api.metakit.cloud/v1"
s = requests.Session()
s.headers["Authorization"] = f"Bearer {os.environ['METAKIT_KEY']}"
 
bars = s.get(f"{BASE}/accounts/2/candles", params={
    "symbol": "EURUSD", "timeframe": "M5", "from": "2026-10-05", "to": "2026-10-10",
}).json()["data"]
 
widest = defaultdict(int)
for b in bars:
    hour = int(b["time"][11:13])          # bar open time, broker server clock
    widest[hour] = max(widest[hour], b["spread"])
 
for hour in sorted(widest):
    print(f"{hour:02d}:00 server  {widest[hour]:>4} points  {'#' * (widest[hour] // 5)}")

Bar times come from the terminal, so they're the broker's server clock rather than UTC (the server time post explains why). Most brokers set that clock so a new trading day starts at 5 p.m. New York, which is why on most accounts you'll see a quiet line through the London and New York sessions and a spike in the hours either side of 00:00 server time: that's rollover. If you need the true peak rather than the per-bar figure, the ticks endpoint returns every bid and ask.

How to pay less spread

  • Trade the liquid hours for your pair, where spreads are tightest. The sessions post covers when those are.
  • Avoid opening or closing right at rollover and in the minutes around major releases unless that's your strategy.
  • Compare all-in costs, spread plus commission, when choosing an account type, not just the advertised spread.
  • Trade less often if you're a scalper and your spread costs are a large share of your gross profit. Your account statement will tell you: add up commission and estimated spread cost against your gross P&L.

The spread is the toll for crossing the market. It's unavoidable, but it's also measurable, and measuring it usually changes when you trade.