Una candela assente non dimostra da sola un errore del fornitore. Prima stabilisci quali aperture di barra ti aspetti e secondo quali regole. Il controllo CSV qui sotto segnala posizioni vuote in una griglia temporale, duplicati, prezzi discordanti e righe non valide. Non crea quotazioni per riempire i buchi e non giudica la redditività di un Backtesting.

Definisci la finestra prima di contare

Registra strumento, fornitore, base di prezzo e timeframe. Le serie Bid, Ask e midpoint sono diverse: «EUR/USD» non identifica da solo il contenuto. Verifica che timestamp rappresenti l’apertura della candela. Un’esportazione etichettata con la chiusura appare spostata rispetto a una etichettata con l’apertura, anche se entrambi gli archivi contengono prezzi validi.

L’intestazione richiesta è timestamp,open,high,low,close. Ogni riga successiva deve avere esattamente cinque campi separati da virgole. I prezzi usano il punto decimale e nessun separatore delle migliaia. Campi fra virgolette, colonne aggiuntive e separatori punto e virgola vanno convertiti prima: il controllo li rifiuta, senza indovinare l’intenzione dell’esportazione. Anche in un’interfaccia italiana il formato macchina rimane questo.

Scrivi un istante completo: 2026-10-12T08:00:00Z e 2026-10-12T10:00:00+02:00 identificano lo stesso momento. I secondi sono obbligatori; sono ammesse fino a tre cifre frazionarie dei secondi. Un orario server senza offset resta ambiguo. Aggiungere Z non converte un’ora locale in UTC, ma le attribuisce un significato diverso.

Inserisci separatamente prima e ultima apertura attese, entrambe incluse. Da 08:00 a 08:11, intervallo di un minuto, significa dodici posizioni. La griglia parte dal primo estremo e l’ultimo deve cadervi esattamente. È una griglia di intervalli trascorsi uguali: un mese civile o una giornata locale che cambia durata con l’ora legale non corrispondono sempre a un numero fisso di minuti. I parametri dailyAlignment e alignmentTimezone documentati da OANDA illustrano perché allineamento di calendario e griglia UTC vadano distinti.

Riproduci il controllo locale

Carica il CSV e scegli un intervallo intero da 1 a 1440 minuti, poi entrambi gli estremi. Il contenuto viene analizzato nel browser, senza inviarlo o salvarlo in archiviazione persistente da parte dello strumento. Il limite è 2 MiB, massimo 100.000 righe e 100.000 posizioni attese. Dividi periodi più lunghi in finestre documentate e senza sovrapposizione. Ogni prezzo ammette fino a 15 cifre significative e 48 caratteri: valori più precisi vengono rifiutati, evitando che un arrotondamento nasconda un conflitto.

Controlla la copertura temporale del CSV

Il file è analizzato localmente, senza invio o salvataggio persistente. Formato: timestamp,open,high,low,close. Massimo 2 MiB. Gli istanti richiedono Z o un offset esplicito.

Scarica esempio pulito · Scarica esempio diagnostico

Dodici righe non provano la completezza

I due file dell’esercizio sono sintetici. Usa M1 dal 12 ottobre 2026 alle 08:00 fino alle 08:11 UTC. Il file pulito ha dodici istanti distinti e nessuna posizione vuota. Il diagnostico ha dodici righe, ma soltanto otto posizioni valide sulla griglia. Le anomalie non sono gruppi esclusivi da sommare per ricostruire il numero di righe.

  • Quattro posizioni vuote: 08:03; 08:04; 08:10; 08:11.
  • Due righe ripetute: ricompaiono gli istanti 08:02 e 08:06.
  • Un gruppo in conflitto: due candele valide delle 08:06 hanno valori OHLC diversi.
  • Una riga non valida: il massimo delle 08:04 è inferiore all’apertura.
  • Una riga fuori griglia alle 08:07:30 e un’inversione temporale: 08:08 compare dopo 08:09.

I vuoti più lunghi comprendono due aperture attese ciascuno. A parità, il rapporto mostra il primo: 08:03–08:04. Non è una misura della durata di un’interruzione del servizio: indica posizioni attese mancanti. Per interpretare le condizioni del periodo servono informazioni esterne al CSV.

Otto posizioni occupate, un’ambiguità ancora aperta

Dodici posizioni M1, otto occupate

Dodici posizioni M1, otto occupateGriglia fittizia del 12 ottobre 2026 dalle 08:00 alle 08:11 UTC. Mancano record validi alle 08:03, 08:04, 08:10 e 08:11. La posizione 06 è occupata ma ha prezzi in conflitto. Dodici righe non equivalgono a dodici posizioni utilizzabili.Conta gli istanti, poi controlla i prezzi2026-10-12 · orari UTC · intervallo M108:00 ✓08:01 ✓08:02 ✓08:03 × 08:04 × 08:05 ✓08:06 ?08:07 ✓08:08 ✓08:09 ✓08:10 × 08:11 × ✓ valido × nessun record valido ? conflitto12 attesi − 8 occupati = 4 vuoti
L’istante 08:06 conta una sola volta nella copertura, ma i due prezzi discordanti restano da risolvere. File costruiti per l’esercizio, non dati di un broker.

Scorri orizzontalmente o ingrandisci il diagramma per leggere i dettagli.

Copertura uguale, risultato EUR diversoDue chiusure assegnate della stessa candela: apertura 100, massimo 102, minimo 98 e chiusura 99 oppure 101 EUR; acquisto a 100, due unità, costo completo 1 EUR.ESEMPIO DI CALCOLOVersione AChiusura 99 EURVersione BChiusura 101 EURDifferenza4 EUR
Copertura uguale, risultato EUR diverso. Due chiusure assegnate della stessa candela: apertura 100, massimo 102, minimo 98 e chiusura 99 oppure 101 EUR; acquisto a 100, due unità, costo completo 1 EUR.

La griglia non stabilisce quale versione del prezzo sia corretta.

Versione A
Chiusura 99 EUR – 2 × (99−100)−1 = −3 EUR; istante occupato.
Versione B
Chiusura 101 EUR – 2 × (101−100)−1 = +1 EUR; stesso istante occupato.
Differenza
4 EUR – Non scegliere per il profitto: riconcilia la fonte e conserva le versioni.

Cosa indagare invece di riparare automaticamente

La copertura conta istanti validi distinti, non righe. Un duplicato identico non aggiunge copertura; due OHLC validi ma discordanti occupano una sola posizione e generano anche un conflitto. Perciò zero vuoti non equivale a dati utilizzabili. Conserva entrambe le versioni e confrontale con la fonte: lo strumento non sceglie quella più alta, più recente o favorevole alla strategia.

Una riga non valida non occupa la griglia. I prezzi devono essere finiti; il massimo non può essere inferiore ad apertura, chiusura o minimo, e il minimo non può superare gli altri prezzi. Righe esterne alla finestra o fuori griglia non migliorano la copertura. Tutte le anomalie vengono contate, ma per ciascun gruppo vengono mostrati al massimo venti esempi, così un archivio danneggiato non sommerge la pagina.

Confronta un vuoto del fine settimana con il calendario effettivo del prodotto. Per un vuoto durante una sessione dichiarata controlla il log di scaricamento e la fonte originale. Nella documentazione OANDA, complete descrive una candela il cui periodo è terminato: non certifica la completezza dell’intero archivio. Non attribuire al campo una garanzia più ampia.

Riempire ogni intervallo con l’ultimo prezzo crea candele sintetiche e può cambiare indicatori e simulazione degli stop. Ordinare le righe non risolve un conflitto OHLC. Conserva esportazione originale e registro separato di correzioni, con motivo e fonte di ciascuna modifica.

Nuovo controesempio EUR: una strategia didattica ha un acquisto assegnato a 100 EUR e due possibili chiusure della stessa candela, 99 oppure 101 EUR, entrambe valide rispetto a apertura 100, massimo 102 e minimo 98. Con due unità e commissione completa 1 EUR, i risultati sono −3 EUR e +1 EUR. Entrambe le versioni occupano lo stesso istante, quindi la copertura è identica; scegliere la seconda per il risultato migliore aggiunge 4 EUR senza aver ottenuto informazione su quale prezzo sia corretto. Non è un prezzo reale né una regola per operare sul conflitto.

OHLC completi non ricostruiscono tutti i tick

Le barre non descrivono l’intera sequenza di prezzi. MetaQuotes documenta la generazione di tick quando è presente una barra al minuto priva dei relativi tick registrati. Un CSV M1 completo non dimostra quindi che il test abbia usato soltanto osservazioni registrate. Controlla modello scelto, intervallo disponibile e log del tester. Spread storici, commissioni e sequenza degli ordini restano controlli separati.

Confronta anche date richieste e date effettive: la preparazione della cronologia MT5 può spostare l’avvio quando i dati sono insufficienti. Con CopyRates confronta quantità richiesta e quantità restituita, perché il caricamento può proseguire dopo una risposta parziale. Continua con Backtest in MT4 e MT5: pratica, tick, costi e orologi per le impostazioni e Backtest di una strategia: regole, costi e dati verificabili per la validazione metodologica. Questo controllo non esegue un terminale né certifica un fornitore.

Tre passi per accettare o respingere la finestra

  1. Salva originale, impostazioni e rapporto con strumento, base Bid/Ask/mid, fuso e fonte delle sessioni. La lingua italiana non determina il fuso del server; Europe/Rome non è sinonimo di UTC.
  2. Indaga il vuoto più lungo e tutti i conflitti. Documenta la sessione chiusa oppure ottieni un’esportazione corretta. Ripeti la stessa finestra e conserva anche il rapporto precedente.
  3. Esegui poi un breve test visivo della strategia sul periodo accettato: segnali attorno ai vuoti, costi e sequenza delle esecuzioni. Per un motore separato passa a Backtest Python: dati, tempi ed eseguiti riconciliati. Il controllo dati non predice rendimenti futuri.