Backtesting is the bridge between a betting idea and a live system. Done properly, it separates theories with genuine edges from theories that just look good on paper.
Step 1: Gather Your Data
You need two datasets: match results and historical odds.
Free Sources
- football-data.co.uk: Closing odds from major bookmakers for 20+ European leagues
- oddsportal.com: Odds archives with movement data
- transfermarkt.com: Squad data, market values, injuries
Paid Sources
- a betting exchange Historical Data: Exchange odds with volume
- Sportmonks / API-Football: Comprehensive match statistics and odds via API
Download data into a spreadsheet or database. Ensure you have at minimum: date, home team, away team, result, and closing odds from at least one bookmaker.
Step 2: Apply Your Rules Mechanically
Run your selection criteria against every match in the dataset. Do not make exceptions or adjustments mid-process — this introduces bias.
For each qualifying bet, record:
- Match details
- Odds at selection
- Stake (use level stakes for initial testing)
- Result (win/loss/void)
- Profit/loss
Step 3: Split Your Data
Divide your historical data into two non-overlapping sets:
- Training set (70%): Use this to develop and refine your rules
- Validation set (30%): Test the final rules on this set, which was never used to build them
If the system is profitable on both sets, the edge is more likely genuine. If it is profitable only on the training set, you have probably overfitted.
Step 4: Analyse Key Metrics
Yield (ROI)
Total profit divided by total staked, expressed as a percentage. A realistic target is 2-8%.
Strike Rate
Percentage of winning bets. Combined with average odds, this determines profitability. A 40% strike rate at average odds of 2.80 yields +12% ROI. A 55% strike rate at 1.60 yields -12% ROI.
Maximum Drawdown
The longest consecutive losing run in your sample. At 40% strike rate, expect runs of 12-15 losses in 500 bets. Your bankroll management must survive these drawdowns.
Profit Graph
Plot cumulative profit over time. A steadily rising line suggests a genuine edge. A flat line with one large spike suggests luck or a small number of high-odds winners carrying the entire system.
Step 5: Test for Statistical Significance
With N bets and a yield of Y%, calculate the probability that random betting at those odds would produce the same result.
A rough formula: if yield × square root of N > 2, the result is likely significant at the 95% confidence level. For example, 5% yield over 400 bets: 0.05 × 20 = 1.0 — not significant. 5% yield over 1,600 bets: 0.05 × 40 = 2.0 — borderline significant.
Step 6: Paper Trade Before Going Live
Even a robust backtest is not sufficient. Paper-trade the system for 50-100 live events, recording selections before matches start. Compare live results to backtest performance. If live results are within 2-3% of the backtest yield, the system is ready for cautious live deployment.