Deux exécutions annoncées comme « le même backtest » donnent des résultats différents. Ne choisissez pas la courbe la plus rentable et ne supprimez pas immédiatement le cache. Commencez par préserver les preuves : même nom de fichier ne signifie ni même compilation, ni mêmes dépendances, données ou coûts. Le comparateur ci-dessous repère des différences de déclarations ; il ne certifie pas l'environnement.

Préserver les deux exécutions avant toute modification

Archivez rapports, liste des exécutions, journaux, paramètres et fichiers disponibles pour A et B, y compris la version perdante. Notez plateforme, build, révision du code et dépendances. Une image d'equity ne révèle pas la première exécution divergente, les remplissages partiels ou le début réellement utilisé. Distinguez un test unique, une recherche d'optimisation et une évaluation ultérieure : leurs choix ne sont pas interchangeables.

Un identifiant de données comme « data-v1 » reste une déclaration. Pour une empreinte de fichier, calculez-la séparément sur l'archive exacte. Le comparateur ne lit aucun historique de terminal et ne calcule pas l'empreinte du code. Gardez les mots de passe et données personnelles hors de ce dossier de comparaison.

Préparer deux manifestes comparables

Le schéma accepte treize champs principaux : version, platform, build, codeRevision, inputs, dataSnapshot, symbolSpecification, executionModel, costs, requestedStart, actualStart, end et initialState. Ces clés techniques restent inchangées. version doit être le nombre 1 : c'est la version du format, pas celle de l'EA.

Les autres valeurs principales sont des chaînes ; inputs, costs et initialState peuvent aussi être des objets. Un champ absent, vide ou inconnu ne devient pas une preuve d'égalité. Les clés répétées ou principales non documentées sont refusées. Chaque enregistrement est limité à 64 KiB, huit niveaux et 2 000 valeurs. Les nombres imbriqués doivent rester dans la précision acceptée de quinze chiffres significatifs, sans grands entiers non sûrs ; inscrivez plutôt les nombres de spécification en chaînes à point décimal.

Écrivez une zone explicite dans les horodatages, UTC si la conversion est connue. Ajouter Z à une heure serveur ne la convertit pas. La comparaison est littérale : deux descriptions ou formats équivalents ne sont pas réconciliés automatiquement. Uniformisez la représentation à partir des preuves, sans effacer une différence réelle.

Ce que le comparateur peut établir

Le calcul s'effectue localement dans le navigateur, sans transmission ni conservation persistante par l'outil. Il compare les champs déclarés et marque différences, concordances et inconnues. Il ne lance pas MT5, ne contrôle pas le courtier, ne récupère pas un compte et ne prédit pas le rendement. Une dépendance omise des deux manifestes reste omise, même si toutes leurs lignes concordent.

Comparer deux enregistrements de backtest

L’analyse s’effectue localement dans votre navigateur. L’outil ne transmet pas les données et ne les conserve pas de façon persistante. Ne saisissez ni mot de passe ni données personnelles.

Utilisez le schéma documenté avec version: 1. Inscrivez les nombres de spécification sous forme de chaînes à point décimal. Les champs vides ou absents sont inconnus. Chaque enregistrement est limité à 64 KiB.

Format JSON : champs et limites

version: 1. Autres champs acceptés : platform, build, codeRevision, inputs, dataSnapshot, symbolSpecification, executionModel, costs, requestedStart, actualStart, end, initialState.

Les valeurs principales sont des chaînes. inputs, costs et initialState peuvent aussi être des objets. Les champs vides ou absents sont inconnus. Les clés répétées et champs principaux non documentés sont refusés. Limites : 8 niveaux et 2 000 valeurs ; nombres imbriqués de 15 chiffres significatifs au maximum, sans grands entiers non sûrs. Indiquez une zone explicite dans les dates. La comparaison est littérale : elle ne rapproche pas automatiquement des descriptions ou formats de dates différents.

Exemple fictif : seul le coût des exécutions change

Un contrat linéaire produit 10 USD de résultat de prix, pour une seule opération close en deux exécutions. Financement et autres frais sont nuls. A paie 1 USD par exécution, donc 10 − 2 × 1 = 8 USD nets ; B paie 2 USD, donc 10 − 2 × 2 = 6 USD. L'écart de 2 USD n'indique ni signal différent, ni manipulation, ni glissement. Il est entièrement expliqué par cette hypothèse de Commission de transaction.

Un résultat de prix, deux hypothèses de frais

De dix dollars bruts à huit ou six dollars nets

De dix dollars bruts à huit ou six dollars netsLes deux barres représentent dix dollars de résultat de prix. A enlève deux dollars de commission totale ; B quatre. Les montants nets valent huit et six.Résultat de prix identique : 10 USDABNet 8 USDFrais 2Net 6 USDFrais 4Différence nette : 2 USD, expliquée par les frais.
Deux exécutions par opération dans ce cas ; ce nombre ne se généralise pas aux sorties fractionnées.

Faites défiler horizontalement ou agrandissez le schéma pour lire les détails.

Comparer des hypothèses de coûtUne opération close, deux exécutions, 10 USD de résultat de prix ; aucun autre coût.EXEMPLE DE CALCULA : 1 USD par exécution8 USD netsB : 2 USD par exécution6 USD netsDifférence2 USD
Comparer des hypothèses de coût. Une opération close, deux exécutions, 10 USD de résultat de prix ; aucun autre coût.

L’écart de 2 USD est expliqué avant toute hypothèse sur les signaux ou les données.

A : 1 USD par exécution
8 USD nets – 10 − 2 × 1.
B : 2 USD par exécution
6 USD nets – 10 − 2 × 2.
Différence
2 USD – Coûts seuls dans ce modèle.

Contre-exemple indépendant en euros : une opération fractionnée comporte trois exécutions et un résultat de prix de 12 EUR. À 0,50 EUR puis 1 EUR par exécution, les résultats nets deviennent 10,50 et 9 EUR ; l'écart est 1,50 EUR. Compter seulement deux côtés ferait manquer la troisième exécution. Aucun de ces tarifs n'est une offre de courtier.

Si les manifestes semblent identiques

Cherchez la première divergence d'exécution ou de signal : heure, symbole, sens, quantité, prix, justification, y compris une décision de ne pas entrer. Comparez ce cas avec les données archivées avant d'interpréter le rendement total. Examinez initialisation, fichiers et bibliothèques, état des positions, générateur aléatoire s'il existe et variables de l'agent. Les variables globales du terminal et celles du testeur ne sont pas un même état partagé.

Le début demandé peut différer du début effectif si l'historique préalable manque. Consultez rapport et journal plutôt que recopier les dates souhaitées. Ne remplacez pas la période ou l'unité de temps uniquement pour faire disparaître le message : cela peut changer la règle. Le cache est une hypothèse à documenter, pas une explication universelle. Recompiler ou nettoyer avant archivage détruit parfois la possibilité de comparer.

Conclure sans choisir le résultat qui arrange

  1. Figez A et B avec les inconnues explicites ; recherchez la première divergence vérifiable.
  2. Changez une seule condition à la fois, en conservant les hypothèses réfutées et les nouvelles versions.
  3. Une fois les calculs réconciliés, évaluez séparément stratégie, coûts et pertes possibles sur une période préservée.

Utilisez Backtest : contrôler les lacunes et conflits d’un CSV pour la couverture CSV et Backtesting MT4 et MT5 : données, indices et horloges pour les modes. Puis Valider une stratégie : backtest, preuves et reprise après incident organise les preuves du Backtest : test historique d’une règle ; un Expert Advisor (EA), robot MetaTrader reproductible n'est toujours pas une stratégie rentable certifiée.