In questo articolo
Dopo questo articolo saprai…
- Distinguere funzione indisponibile e archivio inadeguato.
- Selezionare la versione disponibile senza riuso implicito di null.
- Registrare provenienza e limiti prima di valutare risultati.
I concetti senza lasciare l’articolo
Backtesting Expert Advisor (EA) Calendario economicoUn Expert Advisor (EA) può scaricare dati API su demo senza ottenere risposte equivalenti nel tester. Non significa necessariamente guasto del server. Prima dell’archivio controlla disponibilità della funzione nell’ambiente di esecuzione. Prendere il valore odierno e assegnarlo a decisioni storiche produce un altro test. Qui riproduciamo versioni esplicite, distinguendo revisione e indisponibilità senza contattare alcuna API.
Perché un WebRequest funzionante non basta?
La documentazione MQL5 specifica che WebRequest non viene eseguito in Strategy Tester. Inserire l’endpoint fra gli URL permessi non rimuove questo vincolo. Distingui funzione non disponibile nel tester, guasto di rete, autorizzazione fallita e risposta ricevuta durante l’uso ordinario dell’EA. Servono contesto di esecuzione, codice d’errore e punto della chiamata, non soltanto «non funziona».
Se la regola richiede una misura esterna, non sostituire automaticamente una richiesta fallita con zero: zero può essere una misura valida, mentre il fallimento indica input non disponibile. Anche sostituire HTTP con un file resta insufficiente se il file contiene revisioni ignote alla decisione. Expert Advisor: regole, prove e posizioni del robot separa dati, decisioni ed esecuzione; qui specifichiamo il livello dei dati.
Adattatore online e adattatore storico
L’adattatore online interpreta la risposta del provider; quello storico seleziona un record conservato disponibile al momento della decisione. Entrambi dovrebbero presentare alla logica lo stesso tipo di risultato: valore valido, indisponibilità esplicita oppure errore. È una proposta di organizzazione, non un robot completo o compatibilità garantita con ogni API. Cambiare adattatore non deve cambiare silenziosamente significato dell’osservazione o trattamento dell’assenza.
Conserva risposte grezze separate dai record preparati, indicando fonte, versione dello schema, recupero e prove della disponibilità. Periodo misurato e momento in cui il dato diventa noto sono distinti. Se conosci soltanto una data vintage, non inventare un’ora UTC. FRED descrive periodi real-time per distinguere conoscenza odierna e storica: è un esempio di dati versionati, non API universale forex. La sola data non stabilisce disponibilità intraday.
FileOpen opera in un’area definita anche nel tester, che può essere la cartella dell’agente. Un percorso relativo non punta necessariamente alla cartella del terminale ordinario. Controlla apertura e lettura riuscite, numero di record e versione: file assente non significa storia completa ma senza eventi. Un dataset comune a più processi richiede progettazione esplicita, senza sovrascriverlo con risposte live durante lo studio.
Quale versione conosceva la decisione?
Tre risposte fittizie, tutte in UTC
Osservazione inventata GDP-model del 1 ottobre 2026. Nessun dato PIL reale o endpoint consultato. availableAt dichiara quando il modello può usare il record, non quando esegue un ordine. Alle 12:00 UTC è disponibile revision initial con value stringa "1.0"; alle 13:00 revision revised con "1.4"; alle 14:00 revision unavailable con null. Le etichette restano valori macchina del dataset, senza tradurle in un’altra cronologia.
Su uno schermo piccolo scorri la tabella per leggere tutte le colonne.
| Disponibile dalle UTC | Valore del record | Decisione di esempio |
|---|---|---|
| 12:00 | "1.0" | 12:30 seleziona 1,0 |
| 13:00 | "1.4" | 13:30 seleziona 1,4 |
| 14:00 | null | 14:30: non disponibile |
La versione di allora, non quella di oggi
Disponibilità prima della selezione
Scorri orizzontalmente o ingrandisci il diagramma per leggere i dettagli.
Una regola ipotetica valore> 1,2 è falsa alle 12:30 con 1,0. Sostituire la revisione 1,4 la renderebbe vera anche con identici prezzi. Alle 14:30 il record più recente ammissibile è null: non riutilizziamo 1,4 e non trasformiamo l’assenza in zero. Trattenere l’ultimo valore noto richiede una politica separata, con età consentita e motivo dell’assenza definiti prima dei risultati. Aggiungerla dopo un esito più attraente cambia la regola.
Controesempio EUR distinto. Su un contratto inventato da 1 EUR per punto e unità, una decisione autorizzata aprirebbe due unità long a 100 e chiuderebbe a 99, con 1 EUR ulteriore di costi complessivi: netto −3 EUR. Con la regola e il dato 1,0 di 12:30 non apre alcun nuovo ordine e il contributo di questa singola idea è zero. Usare 1,4 in anticipo produrrebbe l’ordine e −3 EUR nel percorso assegnato. Il leakage può quindi peggiorare, non soltanto migliorare un report. Questa differenza dimostra cambio dell’informazione, non rendimento o vantaggio della strategia.
La differenza dimostra test cambiato, senza prova di vantaggio.
- Input corretto 12:30
- 1,0≤1,2: nessun nuovo ordine – Contributo della singola idea 0 EUR.
- Revisione anticipata
- 1,4>1,2: ordine nel modello – P/L di prezzo −2 EUR.
- Netto dell’ordine errato
- −3 EUR – −2 di prezzo −1 di costi; leakage non necessariamente favorevole.
Controllo locale del replay
Incolla oggetto JSON con version numerico 1 ed events. Ogni evento ha esattamente availableAt, observation, value e revision. availableAt richiede YYYY-MM-DDTHH:mm:ssZ, senza frazioni di secondo o altri offset. observation e revision sono stringhe; value è testo numerico con punto decimale oppure null, senza conversione in Number. Mantieni il punto nel JSON anche se nel testo italiano leggiamo la virgola.
Limiti:1–200 eventi, 64 KiB JSON, otto livelli e 2000 valori; observation e value fino a 128 caratteri, revision fino a 64. Indica decisionAt separatamente nello stesso formato UTC. Il record scelto è l’ultimo di ogni osservazione con availableAt non successivo alla decisione. Prima del primo non esiste valore disponibile; due eventi della stessa osservazione con identico availableAt sono ambigui e rifiutati, non risolti dall’ordine di incollaggio. revision non è un contatore cronologico numerico.
Riproduci i dati disponibili alla decisione
Il modello didattico funziona nel browser: non si collega a conti o API, non trasmette gli input né li conserva in modo persistente. Non inserire password o dati personali.
Il controllo usa soltanto eventi incollati: non scarica comunicati, non chiede credenziali, non contatta un conto e non verifica timestamp del provider. JSON valido non prova archivio autentico. Se attribuisci a tutte le revisioni l’ora del primo rilascio, una selezione corretta ripete la tua assunzione errata. Conserva documentazione della provenienza dei dati effettivamente usati.
Per un lettore in Italia puoi affiancare Europe/Rome con conversione alla data pertinente, mantenendo UTC come asse del modello. Non rinominare 12:00 UTC in 12:00 ora locale: cambieresti l’istante. Gli ambienti separati degli agenti richiedono copia fissa del dataset e verifica del file letto. Stesso backtest, risultato diverso: confrontare condizioni e prove registra il dataset effettivo, non soltanto il nome dell’endpoint.
Backtest Python: dati, tempi ed eseguiti riconciliati approfondisce join temporali e Calendario economico: fusi, revisioni e disponibilità revisioni dei comunicati. Replay del dato non significa replay dell’esecuzione: Bid/Ask, quantità, costi e stato delle posizioni restano componenti separate. Inizia confrontando poche decisioni senza inserire ordini.
Tre verifiche prima di giudicare l’EA
- Definisci contratto dei dati e adattatori. Conserva risposte grezze, significato dell’osservazione e prove della disponibilità. Segna versioni storiche mancanti come limite, senza usare il valore odierno quale conoscenza archiviata.
- Traccia un caso prima del primo record, fra rilascio e revisione e dopo null. Controlla confine esatto di disponibilità e timestamp ambigui prima di un campione grande. Conserva output selezionato e politica dell’assenza.
- Nel tester verifica lettura del file previsto e gestione dell’assenza. Archivia versione e report; poi controlla segnale, esecuzione e costi. Replay corretto non dimostra profitti futuri.
Verifica ciò che hai imparato
Circa 3 minuti di esercizio.
Mostra risposta e spiegazione
Il record 12:00 è ammissibile. La revisione successiva non riscrive input di allora.
Altre domande
Consentire un URL abilita WebRequest nel tester?
No: non modifica il vincolo documentato da MetaQuotes. Definisci ambiente e errore. L’adattatore storico deve leggere record conservati con versione e disponibilità, non soltanto la risposta attuale di un endpoint che funziona su demo.
Basta una tabella odierna di dati passati?
Non necessariamente: può contenere revisioni ignote alla decisione. Periodo misurato e tempo di disponibilità sono distinti. Verifica archivio, provenienza e precisione; non inventare un’ora UTC da una sola data vintage. Il selettore non scopre una data iniziale assegnata erroneamente alla revisione.
Null significa zero o riuso del dato precedente?
In questo modello significa indisponibilità esplicita. Alle 14:30 il precedente 1,4 non viene ripreso e non si sostituisce zero. Un altro comportamento richiede politica distinta, età permessa e motivo, dichiarati prima della valutazione.
Replay corretto valida tutto il backtest?
No: verifica soltanto selezione dei record forniti. Provenienza, parsing, regola, assenze, prezzi eseguibili, costi e quantità richiedono controlli separati. Conserva versione del dataset e log degli input; una selezione corretta non dimostra vantaggio o redditività futura.
Il leakage migliora sempre il risultato?
No. Nel nuovo caso EUR introdurre 1,4 prima del rilascio abilita una posizione che perde 3 EUR nel percorso assegnato; col dato corretto non si apre. Cambia il test anche quando peggiora il report.
Fonti e verifica
- MQL5 — WebRequest
Sezioni 129–138 lette: URL consentiti, funzione sincrona e non disponibile nello Strategy Tester; nessuna chiamata API di prova effettuata qui.
- MQL5 — FileOpen
Sezioni 103–132 lette: flag, INVALID_HANDLE, sandbox e cartella agente. Percorso relativo distinto dall’ambiente normale.
- St. Louis Fed — FRED Real-Time Periods
Sezioni 21–25 lette: conoscenza odierna/storica e intervalli di date, non prova di timestamp intraday universali.
- MetaQuotes — Testing Features
Sezioni 127–135 e 210–242 lette nella stessa sessione: isolamento degli agenti e file. Non sono prove native sul terminale del lettore.
I calcoli usano ipotesi esplicite. Non sostituiscono i dati attuali di mercato o le condizioni dell’intermediario.
