Due esecuzioni dello stesso robot possono dare risultati diversi con parametri visibili identici. Prima di cambiare strategia verifica anche codice, dati, specifiche del simbolo e modello esecutivo. Il manifesto del run registra queste condizioni: il comparatore confronta dichiarazioni, non esamina l’intero ambiente reale. Conserva report e log che sostengono ogni voce.

Prima di riprovare, conserva entrambe le prove

Archivia separatamente report, elenco delle esecuzioni, diari e parametri di A e B, compreso il risultato meno favorevole. Lo screenshot della curva non dimostra primo prezzo eseguito, numero di fill parziali o inizio effettivo. Devi poter risalire dalle condizioni alle operazioni e poi al risultato.

Un test singolo, una ricerca d’ottimizzazione e una valutazione su un periodo successivo sono operazioni diverse. «Stesso robot» può significare stesso nome ma compilazione o dipendenze diverse: conserva build del terminale, programma e librerie rilevanti. Il nome del file non identifica il contenuto.

Confronta data richiesta e inizio effettivo. La documentazione MetaQuotes descrive uno spostamento possibile quando manca storico preparatorio sufficiente. Un mese completo e uno accorciato sono valutazioni diverse. Backtest: controllare lacune, duplicati e conflitti CSV controlla la copertura dell’export CSV; qui consideriamo un insieme più ampio di condizioni.

Preparare due manifesti nello stesso formato

Incolla due oggetti JSON con esattamente i tredici nomi di campo documentati, senza tradurli o aggiungere altri campi principali. version è il numero 1 e identifica il formato, non la versione dell’Expert Advisor (EA). Gli altri valori sono stringhe; inputs, costs e initialState possono invece essere oggetti semplici che descrivono le impostazioni.

Tredici campi, significati da documentare
Nomi invariatiContenuto
version, platform, build, codeRevisionFormato, piattaforma, build e identificazione di codice e dipendenze.
inputs, dataSnapshotParametri e versione dei dati conservata.
symbolSpecification, executionModel, costsContratto, simulazione e tutti i costi assunti.
requestedStart, actualStart, endConfini richiesti ed effettivi del periodo.
initialStateSaldo, posizioni e condizioni rilevanti d’inizializzazione.

Per dataSnapshot inserisci identificatore d’archivio o checksum calcolato separatamente. «data-v1» resta una dichiarazione: la pagina non apre il file e scrivere «hash» non verifica un digest. Bastano etichette tecniche; escludi password, codici d’accesso e dati personali. Un valore sconosciuto resta da stabilire, senza un identificatore inventato per riempire il modulo.

Scrivi il fuso nelle date, preferibilmente con una rappresentazione UTC coerente. Il comparatore confronta testo, non calendario del provider. Due descrizioni dello stesso istante possono richiedere standardizzazione manuale. Aggiungere Z a un’ora del server non la converte in UTC; anche Europe/Rome richiede data e offset effettivi. La lingua italiana del modulo non cambia contratto, valuta o fuso del test.

Che cosa controlla il comparatore?

Modifica le due registrazioni d’esempio e confronta campi differenti o mancanti. Il calcolo resta nel browser, senza invio, importazione di file o conservazione persistente. Non avvia MT5, non legge conti e non verifica che le descrizioni corrispondano ai run effettivi. Oggetti uguali significano voci uguali, non ambiente completo o condizioni di mercato identiche.

Confronta due registrazioni di backtest

L’analisi avviene localmente nel browser. Lo strumento non invia dati e non li conserva in modo persistente. Non inserire password o dati personali.

Usa lo schema documentato con version: 1. Registra i numeri delle specifiche come stringhe con punto decimale. Campi vuoti o mancanti significano sconosciuto. Ogni record è limitato a 64 KiB.

Formato JSON: campi e limiti

version: 1. Altri campi accettati: platform, build, codeRevision, inputs, dataSnapshot, symbolSpecification, executionModel, costs, requestedStart, actualStart, end, initialState.

I valori dei campi principali sono stringhe. inputs, costs e initialState possono anche essere oggetti. Campi vuoti o omessi sono sconosciuti. Chiavi duplicate e campi principali non documentati sono rifiutati. Limiti: 8 livelli e 2.000 valori; numeri annidati fino a 15 cifre significative, esclusi interi grandi non sicuri. Indica il fuso nelle date. Il confronto è letterale: non riconcilia descrizioni o formati temporali differenti.

Limiti del formato. Ogni record massimo 64 KiB; profondità massima 8 livelli e 2.000 valori. I numeri annidati arrivano a 15 cifre significative, senza interi grandi non sicuri. Chiavi duplicate o campi principali non documentati sono rifiutati. I campi vuoti o omessi sono sconosciuti; il confronto resta letterale. Nei dati macchina usa punto decimale e nomi originali: la virgola italiana nella prosa non modifica lo schema JSON. Gli esempi sintetici mantengono etichette tecniche inglesi per conservare le dichiarazioni originarie, non descrivono dati di broker.

Stessa operazione USD, commissione diversa

Modello originario fittizio: contratto lineare, conto USD, una operazione chiusa con due fill, risultato sui prezzi 10 USD. Prezzi, quantità e periodo coincidono; finanziamento e altri oneri zero. A dichiara commissione 1 USD per fill, B 2 USD: sono ipotesi didattiche, non tariffario reale.

A produce 10−2 × 1 = 8 USD, B 10−2 × 2 = 6 USD. La differenza di 2 USD deriva dal solo costo nel modello, non dimostra segnale peggiore, dati errati o slippage. Il campo costs deve risultare cambiato, ma interpretarlo richiede ancora report e verifica delle altre ipotesi.

Una operazione, due ipotesi di costo

Prezzi uguali, commissioni diverse

Prezzi uguali, commissioni diverseUna operazione USD con due fill. Risultato sui prezzi 10 USD. A costa 1 per fill, totale 2, netto 8. B costa 2 per fill, totale 4, netto 6. Differenza 2 USD spiegata dal costo nel modello, non da segnali o slippage.Stesso risultato sui prezzi: +10 USDRun ARun B1 USD per fill2 USD per fillDue fill: 2 USD costiDue fill: 4 USD costiNetto: +8 USDNetto: +6 USDDifferenza: 2 USD · finanziamento e altri oneri 0
La commissione spiega il caso costruito. Il comparatore non certifica le condizioni reali dichiarate.

Scorri orizzontalmente o ingrandisci il diagramma per leggere i dettagli.

Controesempio EUR distinto. Conto EUR, stessa quantità complessiva, risultato sui prezzi 12 EUR e tariffa fittizia minima 1 EUR per fill senza altri oneri. A ha due fill: netto 10 EUR. B ha tre fill per esecuzione parziale e successivo completamento: netto 9 EUR, pur lasciando identico il numero «1» della tariffa. Confronta numero e importo degli addebiti, non soltanto il prezzo unitario del servizio. La differenza di 1 EUR non dimostra cambiamento della logica del segnale. Per preservare la stessa quantità considera per esempio A: ingresso 10 unità, uscita 10; B: ingressi 4+6, uscita 10, con risultato sui prezzi assegnato uguale.

Tariffa EUR uguale, conteggio fill diversoRisultato prezzi 12 EUR, minimo 1 EUR per fill, nessun altro onere; quantità totale invariata con ingresso parziale in B.ESEMPIO DI CALCOLORun A10 EUR nettiRun B9 EUR nettiDifferenza1 EUR
Tariffa EUR uguale, conteggio fill diverso. Risultato prezzi 12 EUR, minimo 1 EUR per fill, nessun altro onere; quantità totale invariata con ingresso parziale in B.

Due confronti: prezzo unitario e numero di addebiti.

Run A
10 EUR netti – Due fill: ingresso 10, uscita 10; costo 2.
Run B
9 EUR netti – Tre fill: ingressi 4+6, uscita 10; costo 3.
Differenza
1 EUR – Non prova un segnale diverso; verifica i report.

Se le dichiarazioni sembrano ancora uguali

Cerca la prima esecuzione diversa: ora del segnale, simbolo, lato, quantità e motivo d’ingresso o uscita. Il saldo finale può nascondere una divergenza già alla prima lettura dell’indicatore. Conserva anche le decisioni senza trade. Nel nuovo run controllato cambia una sola condizione e conserva il precedente: modificare tutto insieme rende difficile attribuire l’effetto.

Verifica dipendenze dei file e inizializzazione del programma. L’agente del tester ha un ambiente distinto dal terminale, incluse variabili globali e operazioni sui file. Se il codice usa numeri casuali conserva come è inizializzato il generatore. Non attribuire ogni differenza alla cache e non eliminare l’unico archivio che permette di riprodurla. Stessi nomi nel manifesto possono omettere una dipendenza o descrivere male i dati.

Non scegliere automaticamente il risultato migliore né chiamare guasto della piattaforma quello peggiore. Validare una strategia: regole, backtest, demo e registro delle prove approfondisce registro e validazione; Backtest in MT4 e MT5: pratica, tick, costi e orologi tratta le impostazioni. Prima riconcilia condizioni, poi torna a valutare economicamente la strategia con costi, drawdown e osservazioni separate dallo sviluppo.

Tre passi dopo il confronto

  1. Conserva A e B e compila i tredici campi collegando etichette ad archivi corretti di codice, dati e impostazioni. Registra ciò che manca senza inventare versioni.
  2. Isola una differenza in un piccolo caso controllato: commissione richiede fill e addebiti; data iniziale richiede primo segnale disponibile. Conserva anche prove che smentiscono l’ipotesi iniziale.
  3. Se le voci coincidono cerca il primo evento divergente nel diario e amplia l’archivio con l’informazione necessaria. Il comparatore non prevede rendimenti né certifica il risultato storico.