In one sentence
GARCH (Generalised AutoRegressive Conditional Heteroskedasticity) forecasts how volatile the next price move will be, based on how big recent moves were and how volatile the market has been lately.
How it works
Anyone who has traded the last hour before kick-off knows that calm and chaos come in spells. A quiet market stays quiet; once a big move happens, more big moves tend to follow. Direction may be unpredictable, but the size of moves is not.
GARCH captures this. It keeps a running estimate of volatility and updates it every step: a large move pushes the estimate up, a quiet step lets it drift back down towards a long-run average. How fast it forgets a shock is controlled by one of the model's parameters.
For a trader this matters for risk rather than for picking direction. A stop-loss that is sensible in a calm market gets hit by noise in a volatile one; a stake that is fine in quiet conditions is too big when the market is jumping.
The maths
The GARCH(1,1) model for the variance of the next move:
- σₜ²: forecast variance of the next move (σₜ is the volatility).
- rₜ₋₁: the last move, here the percentage change in price over a minute.
- ω: a small baseline amount of variance.
- α: how strongly the latest move feeds into volatility.
- β: how much of the previous volatility carries over; α plus β near 1 means shocks fade slowly.
In plain English: next volatility = a baseline, plus a share of how big the last move was, plus a share of how volatile things already were.
Worked betting example
You fit GARCH(1,1) to one-minute percentage price changes for Match Odds favourites in the final hour before kick-off, and get ω = 0.05, α = 0.10, β = 0.85 (illustrative figures).
- Long-run level. Variance = 0.05 ÷ (1 − 0.10 − 0.85) = 1.0, so typical minute-to-minute volatility is 1%. Since α plus β = 0.95, a shock loses half its effect in about 13.5 minutes.
- Calm conditions. Previous variance 1.0, last move 0.5%. Next variance = 0.05 + 0.10 × 0.25 + 0.85 × 1.0 = 0.925, volatility ≈ 0.96%.
- After a shock. Previous variance 1.2, last move 3%. Next variance = 0.05 + 0.10 × 9 + 0.85 × 1.2 = 1.97, volatility ≈ 1.40%.
- Stops in ticks. The favourite is 2.50, where ticks are 0.02. A two-standard-deviation stop is 2 × 0.96% × 2.50 ≈ 0.048, about 2.4 ticks, when calm; and 2 × 1.40% × 2.50 ≈ 0.070, about 3.5 ticks, after the shock.
- In £. Back £50 at 2.50. A 3-tick stop at 2.56 means laying £48.83 for a loss of £1.17; a 4-tick stop at 2.58 means laying £48.45 for a loss of £1.55. To keep risk per trade the same after the shock, scale the stake by 0.96 ÷ 1.40, a cut of about 30%.
GARCH did not tell you which way the price would go, only how much room to give it.
Where it's good
- Setting stop-loss widths that adapt to current market conditions.
- Scaling trading stakes so the £ at risk per trade stays roughly constant.
- Spotting when a market has become unusually active, which may signal news or informed money.
- In-play markets where volatility spikes after goals, wickets or breaks of serve and then settles.
- Inputs to value-at-risk and risk-of-ruin calculations for a trading bank.
Limitations and pitfalls
- Betfair prices move in discrete ticks and sit still for long spells; GARCH was built for continuous financial returns and fits poorly when most moves are zero.
- Markets with a fixed end (kick-off, full time) have volatility that rises as that point nears, not just from recent shocks. Add time-to-kick-off as an input or fit separate models by stage.
- Goals and non-runners are jumps, not volatility clustering; GARCH will over-react for several minutes after them.
- Parameter estimates need plenty of data and can be unstable.
- It says nothing about direction, so it cannot create an edge by itself.
- Fitting across very different markets (favourites and 50.0 outsiders) mixes behaviours; percentage moves on the ladder differ enormously.
How to build it
- arch package in Python (arch_model); rugarch in R.
- Data: evenly spaced price series, converted to percentage changes or tick changes, from Betfair historical data.
- Practical tip: fit separate models by price band and by minutes to kick-off, then check that forecast volatility lines up with realised volatility on held-out matches.
Related methods
- ARIMA – forecasts direction of moves, where GARCH forecasts size.
- Value at risk – turns volatility into a worst-case loss figure.
- Jump diffusion – models the sudden jumps GARCH handles badly.
- Risk of ruin – how volatility feeds into the danger of busting a bank.
- Tick size maths – turning percentage moves into ticks.