tekkick/xauusd-hourly-spread-volatility
XAUUSD Hourly Spread and Volatility, 2025–2026 One year of gold (XAUUSD) bid-ask spread and volatility aggregated by hour of the broker trading day, built from 70,546 five-minute MetaTrader 5 bars across 312 sessions, 1 August 2025 to 31 July 2026. MetaTrader records the spread on every bar. Almost nobody publishes it, so most advice about when spreads widen on gold is folklore. This is the measurement. DOI: 10.5281/zenodo.21973215 · Write-up: techkick.me/research… See the full description on the dataset page: https://huggingface.co/datasets/tekkick/xauusd-hourly-spread-volatility.
XAUUSD Hourly Spread and Volatility, 2025–2026
One year of gold (XAUUSD) bid-ask spread and volatility aggregated by hour of the broker trading day, built from 70,546 five-minute MetaTrader 5 bars across 312 sessions, 1 August 2025 to 31 July 2026.
MetaTrader records the spread on every bar. Almost nobody publishes it, so most advice about when spreads widen on gold is folklore. This is the measurement.
DOI: 10.5281/zenodo.21973215 · Write-up: techkick.me/research
Columns
The last column is the one worth reading. Spread is constant; what changes across the day is the size of the move it is charged against.
Findings
- Median spread is $0.16 and identical in all 24 hours. It exceeded $1.00 in 3 bars out of 70,546.
- Median daily range is $76.12 (10th percentile $25.84, 90th percentile $162.62).
- Median five-minute range runs from $2.86 to $6.97 across the day — roughly 2.4×.
- Median weekend gap is $7.60 across 52 breaks; 48% exceeded $10.
The practical consequence: the cost of trading as a share of the move is driven almost entirely by the denominator.
Limitations
Read these before using the numbers.
- One broker, one account type, one year. Every spread figure belongs to a single raw-spread account. A standard account folding cost into the quote looks completely different, and that comparison is not in this data.
- Hours are broker server time, not UTC, and not yours. The daily maintenance break leaves two hours with reduced coverage; they are not comparable like-for-like with the rest and
coverage_pctidentifies them. - Gold ran from roughly $3,288 to $4,044 over the period. Ranges are in dollars, so they are not directly comparable to a period at a very different price level.
- One year characterises a regime, not an instrument.
Reproducing it
build.py is the exact script that produced the CSV, verified to reproduce it byte for byte. It expects the gzipped pickled MT5 bar frames it was written against, so it will not run as-is without that archive — it is published so the arithmetic is auditable, not as a turnkey tool.
make_chart.py regenerates the chart from the CSV.
Licence
Data: CC BY 4.0 — use it, cite it. Script: MIT.
Tech Kick (2026). "XAUUSD hourly spread and volatility, 2025-2026."
Dataset: 70,546 M5 bars, 312 sessions, 2025-08-01 to 2026-07-31.
DOI: 10.5281/zenodo.21973215Corrections
If you find an error, open a discussion. Two claims were corrected as a direct result of running this, and both are documented rather than quietly edited:
- "Gold has a $10–$30 daily range" — repeated from memory, never checked. The measured median is $76.
- "A $1.00 spread filter removes a meaningful share of entries" — on a raw account it is reached in 3 bars out of 70,546, so it does not.
