In one sentence
A moving average replaces each noisy price or result with the average of the last few, so you can see the trend underneath the bounce.
How it works
Watch any team's Match Odds price in the hour before kick-off and it zigzags: a big bet knocks it in a tick, a small lay pushes it back out. Reacting to every tick means reacting mostly to noise. Averaging the last few readings smooths that out.
A simple moving average (SMA) gives equal weight to the last n readings. An exponential moving average (EMA) gives the newest reading the most weight and older ones steadily less, so it reacts faster while still smoothing. Traders often compare a fast average with a slow one: when the fast one sits above the slow one, recent movement is stronger than the longer trend.
The same tool works on results. A team's rolling six-match average of expected goals is far more stable than any single match figure, and tells you more about current form.
The maths
- xₜ: the reading at time t, ideally implied probability (1 ÷ price) rather than raw odds.
- n: how many readings the simple average uses.
- α: the EMA's weight on the newest reading, between 0 and 1; higher means faster and noisier.
In plain English: the SMA is a plain average of a recent window; the EMA is a running average that keeps a fraction of the old value and tops it up with the new one.
Worked betting example
The home side's best back price in Match Odds, sampled every minute for 10 minutes after team news: 5.0, 4.9, 4.8, 4.9, 4.7, 4.6, 4.5, 4.6, 4.4, 4.3. Work in implied probability: 20.0% rising to 23.3%.
- Minute 8 wobble. The price drifts from 4.5 to 4.6. Looking at raw ticks you might think the move is over.
- Averages at minute 8. 3-minute SMA = 21.90% (≈ 4.57); 5-minute SMA = 21.48% (≈ 4.66). The fast average is still above the slow one, so the shortening trend is intact. The drift was noise.
- Minute 10. Price 4.30 (23.26%). 3-minute SMA = 22.57% (≈ 4.43), 5-minute SMA = 22.34% (≈ 4.48). An EMA with α = 1/3 is at 22.37% (≈ 4.47). All the averages lag the live price by one to two ticks: that is the price of smoothing.
- Trade. Back £30 at 4.30. If it shortens to 4.00, lay £32.25 (30 × 4.30 ÷ 4.00) for +£2.25 whatever the result, £2.21 after 2% commission. If it reverts to 4.60, lay £28.04 for minus £1.96.
- Break-even. You need to be right about 1.96 ÷ (2.21 + 1.96) ≈ 47% of the time just to stand still. The averages do not tell you that you will be.
Where it's good
- Filtering tick noise before deciding whether a steamer or drifter is real.
- Rolling form measures: xG, shots, speed figures over the last few runs or matches.
- Tracking your own strategy's ROI so one bad day does not trigger a panic change.
- Providing inputs (trend, distance from average) for more formal models.
- Setting reference prices for mean-reversion or momentum rules.
Limitations and pitfalls
- Every moving average lags. By the time a crossover appears, much of a move may be over, especially just before kick-off.
- Window length and α are easy to over-tune on past matches; a setting that looks brilliant in a backtest is often curve-fitted.
- Averaging raw decimal odds is misleading because the ladder is uneven; use implied probability or tick positions.
- Pre-match markets are not stationary: activity and volatility rise sharply around team news and near kick-off, so one window size does not suit the whole period.
- Crossover rules on their own have no known edge; treat them as a filter, not a strategy.
How to build it
- pandas rolling().mean() and ewm().mean() cover both; TA-Lib has many variants.
- Data: time-stamped best back/lay or traded prices from Betfair historical data or the stream API.
- Practical tip: sample on a fixed time grid (every second or every minute) before averaging, or busy periods will dominate the average.
Related methods
- Momentum – trading the trend that averages reveal.
- Mean reversion – trading the gap between price and its average.
- Kalman filter – a smoother that adjusts its own weight to the noise level.
- ARIMA – moving averages inside a formal forecasting model.
- Weight of money and VWAP – volume-weighted averages of traded prices.