Un 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.

Versioni assegnate e decisioni
Disponibile dalle UTCValore del recordDecisione di esempio
12:00"1.0"12:30 seleziona 1,0
13:00"1.4"13:30 seleziona 1,4
14:00null14:30: non disponibile

La versione di allora, non quella di oggi

Disponibilità prima della selezione

Disponibilità prima della selezioneGDP-model fittizio, 1 ottobre 2026 UTC.12:00 valore 1.0,13:00 revisione 1.4,14:00 null. Le decisioni 12:30,13:30,14:30 selezionano rispettivamente 1.0,1.4,non disponibile. Null non diventa zero e non riutilizza 1.4.Quale record era già disponibile?12:00 UTC · valore "1.0"Decisione 12:30 → seleziona "1.0"13:00 UTC · revisione "1.4"Decisione 13:30 → seleziona "1.4"14:00 UTC · valore nullDecisione 14:30 → non disponibileNessun ripiego automatico sul vecchio dato.Eventi inventati · 1 ottobre 2026 · tutti in UTC
La revisione non riscrive ciò che conosceva la decisione precedente. Nel nostro modello null blocca la valutazione di un nuovo segnale.

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.

Conoscenza futura può peggiorare il report EURPercorso inventato 100 → 99, due unità long da 1 EUR/punto/unità, 1 EUR costi separati.ESEMPIO DI CALCOLOInput corretto 12:301,0≤1,2: nessun nuovoordineRevisione anticipata1,4>1,2: ordine nelmodelloNetto dell’ordine errato−3 EUR
Conoscenza futura può peggiorare il report EUR. Percorso inventato 100 → 99, due unità long da 1 EUR/punto/unità, 1 EUR costi separati.

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.

Formato e limiti del modello

version: 1; events: da 1 a 200 oggetti con esattamente i campi availableAt, observation, value, revision. availableAt: YYYY-MM-DDTHH:mm:ssZ. observation: stringa fino a 128 caratteri; revision: stringa fino a 64 caratteri; value: stringa numerica con punto decimale (fino a 128 caratteri), oppure null. Assente non significa zero.

Si seleziona l’ultima versione con availableAt non successivo alla decisione. Due record con stessa observation e availableAt sono ambigui e bloccano l’analisi. Limiti JSON: 64 KiB, 8 livelli, 2.000 valori. Gli orari sono dichiarati: la pagina non verifica la pubblicazione reale.

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

  1. 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.
  2. 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.
  3. 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.