La plupart des parieurs qui "backtestent" se souviennent vaguement de quelques matchs qui correspondent à leurs critères et concluent que leur stratégie fonctionne. Ce n'est pas du backtesting. C'est de la confirmation bias.

Un vrai backtest c'est une analyse systématique de tous les matchs qui validaient tes critères sur une longue période — sans exception, sans sélection après coup.

"Les Sharps testent sur des données réelles avant de risquer de l'argent. Les gamblers espèrent que ça va marcher. La différence entre les deux commence là."

Étape 1 — Télécharger les données depuis Datafoot

Première chose importante à comprendre sur Datafoot : tu ne sélectionnes pas de saison. Chaque fichier téléchargé contient l'intégralité de l'historique disponible pour la ligue choisie — tous les matchs depuis les premières données disponibles jusqu'à aujourd'hui. Pour la Belgique Pro League par exemple, ça représente plus de 4700 matchs depuis 2010.

  1. 1

    Connecte-toi à Datafoot

    Va sur datafoot.fr et connecte-toi à ton compte. L'export est inclus dans l'abonnement (29€/an soit ~2.42€/mois).

  2. 2

    Navigue vers la section "Télécharger"

    Dans le menu, trouve la section d'export de données. Tu sélectionnes directement ta ligue.

  3. 3

    Choisis ta ligue et télécharge

    Un fichier par ligue = l'historique complet. Si tu veux backtester sur plusieurs ligues, télécharge un fichier par ligue et tu fusionneras ensuite.

  4. 4

    Ouvre dans Google Sheets ou Excel

    Le fichier est en CSV avec le point-virgule (;) comme séparateur — pas la virgule. C'est important. Si tout s'affiche dans une seule colonne, c'est pour cette raison.

Ouvrir correctement dans Google Sheets : Fichier → Importer → sélectionne ton fichier → Type de séparateur : "Personnalisé" → tape ; → Importer. Sans ça, toutes les données restent dans une seule colonne.

La structure exacte du fichier Datafoot

Chaque ligne = un match. Voici les colonnes disponibles avec leurs noms exacts tels qu'ils apparaissent dans le fichier :

Nom exact de la colonneCe que ça représenteType
sportType de sport (FOOTBALL)Info
leagueCode ligue (ex : BE1, FR1, EN1, DE1)Info
countryNamePaysInfo
homeTeamÉquipe domicileMatch
awayTeamÉquipe extérieureMatch
eventDateDate du match (AAAA-MM-JJ)Match
statusMatch Finished / Not StartedMatch
goalsHomeFullTimeButs domicile temps pleinRésultat
goalsAwayFullTimeButs extérieur temps pleinRésultat
goalsHomeHalfTimeButs domicile mi-tempsRésultat
goalsAwayHalfTimeButs extérieur mi-tempsRésultat
expectedGoalsHomexG domicileAvancé
expectedGoalsAwayxG extérieurAvancé
cornerKicksHomeCorners domicileStats
cornerKicksAwayCorners extérieurStats
oddsFT_1 / oddsFT_X / oddsFT_2Cotes 1N2 temps pleinCotes
oddsFT_Over_2_5Cote Over 2.5 butsCotes
oddsFT_Under_2_5Cote Under 2.5 butsCotes
oddsFT_Over_1_5Cote Over 1.5 butsCotes
oddsFT_Under_3_5Cote Under 3.5 butsCotes
oddsFT_BTTS_YesCote les deux équipes marquentCotes
oddsFT_BTTS_NoCote les deux équipes ne marquent pasCotes
oddsHT_Over_0_5 / Over_1_5Cotes Over mi-tempsCotes HT

Étape 2 — Préparer les données

Filtrer les matchs terminés

Le fichier inclut les matchs à venir (status = "Not Started"). Pour le backtest on travaille uniquement sur les matchs terminés.

Dans Google Sheets : Données → Créer un filtre → colonne "status" → cocher "Match Finished" uniquement

Ajouter une colonne "Année"

Pour analyser les résultats par année et voir si ta stratégie est cohérente dans le temps :

Extraire l'année depuis eventDate : =GAUCHE(H2;4) → H2 = colonne eventDate — extrait les 4 premiers caractères

Étape 3 — Construire le backtest

L'exemple ci-dessous est un backtest virtuel sur le marché Over 2.5 buts avec un critère de cote minimum. C'est un exemple pour comprendre la logique — tu peux adapter chaque formule à n'importe quelle sélection : BTTS, Over 1.5, 1N2, Under 3.5, Over 0.5 ext... Il suffit de changer les colonnes de cotes et de résultat selon le marché que tu veux tester.

Principe : Sans critère tu backtestes tous les matchs de la ligue — ce qui ne veut rien dire. L'intérêt c'est d'ajouter des colonnes "critère validé" pour ne sélectionner que les matchs qui respectent tes conditions. C'est là que tu trouves ton edge.

Les lettres de colonnes ci-dessous sont indicatives — elles dépendent de l'ordre dans ton fichier. Utilise Ctrl+F pour retrouver chaque colonne par son nom exact.

1. Colonne "Total buts"

goalsHomeFullTime + goalsAwayFullTime : =L2+M2 → Adapte L et M selon tes colonnes

2. Colonne "Résultat sélection"

Ici on teste Over 2.5 — mais remplace par le marché de ton choix :

Over 2.5 gagné ? : =SI(L2+M2>2,5;"OUI";"NON")

→ Pour BTTS : =SI(ET(L2>0;M2>0);"OUI";"NON")
→ Pour Over 1.5 : =SI(L2+M2>1,5;"OUI";"NON")
→ Pour Over 0.5 ext : =SI(M2>0;"OUI";"NON")

3. Colonne "Critère 1 — Cote dans la fenêtre"

Tu n'as pas de critère = tu backtestes tous les matchs sans filtre. Ici on filtre sur la cote oddsFT_Over_2_5 :

Cote Over 2.5 comprise entre 1.70 et 2.20 : =SI(ET(AL2>=1,70;AL2<=2,20);"OUI";"NON") → Pour BTTS : utilise oddsFT_BTTS_Yes à la place
→ Pour 1N2 domicile : utilise oddsFT_1

4. Colonne "Critère 2 — xG élevé" (optionnel)

Tu peux empiler autant de critères que tu veux. Exemple avec les xG combinés :

xG total >= 2.0 (expectedGoalsHome + expectedGoalsAway) : =SI(N2+O2>=2,0;"OUI";"NON") → N2 = expectedGoalsHome | O2 = expectedGoalsAway

5. Colonne "Tous les critères validés ?"

On combine tous les critères avec ET() — le pick n'est sélectionné que si tous sont respectés :

Critère cote ET critère xG : =SI(ET(AN2="OUI";AO2="OUI");"OUI";"NON") → Ajoute autant de critères que nécessaire dans le ET()

6. Colonne "Profit/Perte" — mise fixe 1 unité

Si tous les critères validés → calcule gain ou perte : =SI(AP2="OUI";SI(AM2="OUI";AL2-1;-1);0) → AP2 = tous critères validés | AM2 = résultat sélection | AL2 = cote prise

7. Bilan global

Nombre de picks : =NB.SI(AP:AP;"OUI")

Profit total (unités) : =SOMME(AQ:AQ)

ROI (%) : =SOMME(AQ:AQ)/NB.SI(AP:AP;"OUI")*100

Win rate (%) : =NB.SI.ENS(AP:AP;"OUI";AM:AM;"OUI")/NB.SI(AP:AP;"OUI")*100

Étape 4 — Analyser par année et par ligue

C'est l'étape la plus importante pour valider que ton edge est réel. Un ROI positif sur l'historique complet peut masquer une seule saison exceptionnelle qui tire tout vers le haut.

Crée un tableau croisé dynamique (Insertion → Tableau croisé dynamique) avec l'année en ligne et la somme du profit en valeur. Si le ROI est positif et relativement cohérent sur 5-6 ans différents — c'est un signal sérieux. Si c'est uniquement 2020 ou 2021 qui performent — cherche pourquoi avant de conclure.

Pour plusieurs ligues, télécharge un fichier par ligue, ajoute une colonne "Ligue" dans chacun avant de tout coller dans un seul onglet. Tu pourras ensuite filtrer et comparer.

Ce qui constitue un backtest valide

✓ Minimum 200-300 picks sur la période analysée

✓ ROI cohérent d'une année à l'autre — pas un seul pic isolé

✓ Drawdown maximum supportable — idéalement moins de 20 unités

✓ Testé sur plusieurs ligues pour vérifier la robustesse

✓ Paper trading 2-3 mois avant de passer en conditions réelles

Les pièges à éviter

L'overfitting — Plus tu as de critères, plus tu risques de créer un système parfait sur le passé mais inutile sur le futur. Commence simple. 3-4 critères maximum. La robustesse vaut mieux que la performance parfaite sur l'historique.

Ignorer le drawdown — Un ROI de +12% avec un drawdown de 40 unités est pratiquement inutilisable psychologiquement. Calcule toujours le drawdown maximum — la perte maximale consécutive — avant de valider une stratégie.

Ne tester que les bonnes périodes — Un vrai backtest teste tout, les mauvaises saisons incluses. Si ton système ne survit pas aux mauvaises périodes du passé, il ne survivra pas à celles du futur.

⚠️ Rappel : Un backtest positif ne garantit pas des profits futurs. Les marchés évoluent et les bookmakers s'adaptent. Testez toujours en paper trading avant de risquer de l'argent réel. Les paris sportifs comportent des risques de pertes financières.