BACKTESTMARKET
Formato File HST: Struttura, Versioni e Come Usarlo
algorithmic-trading·

Formato File HST: Struttura, Versioni e Come Usarlo

Cos'è un file HST in MetaTrader, come sono organizzati l'header di 148 byte e i record da 44 o 60 byte, e come importare e verificare i dati HST in sicurezza.

Di BacktestMarket Team
hst file format

Analista che controlla un file HST alla sua postazione

Un file HST è il file di storico binario di MetaTrader. Contiene le barre (time, open, high, low, close, volume) per un simbolo su un determinato timeframe. In MetaTrader 4, le quotazioni storiche sono memorizzate in file denominati SSSSSSPP.hst, uno per ogni simbolo e periodo, e il terminal li usa per disegnare i grafici e testare le strategie. "HST" è semplicemente l'estensione per "history". Non ha nulla a che vedere con la tassa sulle vendite canadese che domina i risultati di ricerca per questo termine.

Questa guida copre cosa contiene il file, la differenza tra la versione 400 e la versione 401, come importare i dati HST in MT4 e MT5, e come verificare un file prima di fidarsi di un backtest basato su di esso.

TL;DR

  • Un file HST è un contenitore binario: un header di 148 byte seguito da record di barre a dimensione fissa, un file per ogni simbolo e timeframe.
  • I record della versione 400 sono di 44 byte. I record della versione 401 sono di 60 byte e aggiungono spread e volume reale. Leggi il campo versione prima di fare il parsing.
  • In MT4 puoi importare lo storico tramite la History Center. In MT5, i simboli custom possono importare file HST, con le barre a un minuto come dati di base.
  • Timestamp duplicati, shift temporali errati e gap nei dati di base a un minuto sono le cause più comuni quando un'importazione va storta.
  • Verifica il numero di barre, l'ordinamento e i gap prima di eseguire un backtest serio.

Indice

Cos'è un file HST e cosa significa il nome

MetaTrader conserva il suo storico prezzi in una cartella history all'interno della directory dati del terminal. Ogni file prende il nome dal simbolo e dal timeframe in minuti. Un file chiamato EURUSD60.hst, ad esempio, contiene le barre orarie di EUR/USD, mentre EURUSD1.hst contiene le barre a un minuto. Il terminal legge questi file quando disegna un grafico e quando lo Strategy Tester esegue un Expert Advisor.

Il file non è testo. Non puoi aprirlo in un foglio di calcolo e leggere le righe. È una struttura binaria compatta, motivo per cui ci si interroga sul "formato": per leggere, scrivere o riparare un file del genere, devi sapere esattamente quanti byte occupa ciascun campo.

Anche la convenzione di denominazione è importante. Il periodo nel nome del file è il timeframe in minuti, e lo stesso numero è memorizzato all'interno dell'header. Se i due non coincidono, il terminal può comportarsi in modo imprevedibile, quindi mantienili sincronizzati quando generi file tu stesso.

Quali piattaforme usano i file HST

MT4 è la casa nativa del formato. La sua History Center è lo strumento integrato per sfogliare, importare ed esportare le quotazioni memorizzate.

MT5 conserva il suo storico prezzi in modo diverso. Mantiene i propri database interni, e lo storico prezzi è conservato principalmente come barre a un minuto, da cui vengono generati gli altri timeframe. HST gioca comunque un ruolo: in MT5, i simboli custom possono importare lo storico prezzi dai file di storico MetaTrader (HST) oltre che da file di testo. Quindi un file HST creato per MT4 può servire come sorgente per un simbolo custom di MT5. La nostra guida ai simboli custom di MT5 illustra come crearne uno e caricare i tuoi dati.

Anche la compatibilità tra le build di MT4 è ragionevole. MetaQuotes ha dichiarato, introducendo il nuovo MQL4, che i programmi compilati che lavorano con i file .hst mantengono la loro compatibilità sulle build più recenti del terminal, e che sia il vecchio che il nuovo formato storico sono supportati.

La struttura: prima l'header, poi i record

Ogni file HST di MetaTrader ha la stessa forma generale: un header fisso, seguito da una sequenza continua di record di barre fino alla fine del file. Non c'è un indice né un footer. Il numero di barre è la dimensione del file meno l'header, diviso per la dimensione del record.

L'header di 148 byte

Un riferimento della community, compilato a partire dal vecchio file di help del terminal e dal più recente period converter, elenca l'header come 148 byte in totale. I campi sono:

CampoDimensioneSignificato
version4 byteVersione del database, 400 o 401
copyright64 byteTesto del copyright o del provider
symbol12 byteNome del simbolo
period4 byteTimeframe in minuti
digits4 byteNumero di cifre dopo la virgola decimale
timesign4 byteMomento di creazione del database
last sync4 byteMomento dell'ultima sincronizzazione
unused52 byteSpazio riservato

I primi sette campi sommano a 96 byte. Il resto dei 148 è riservato e normalmente pari a zero. Il reader Python documentato da uno sviluppatore estrae lo stesso insieme: version, copyright, symbol, period, digits, creation time e last-sync time.

Due campi meritano attenzione. Il valore digits indica come interpretare i prezzi: i prezzi sono memorizzati come normali numeri in virgola mobile, ma un file EUR/USD a cinque cifre e un file USD/JPY a tre cifre hanno senso solo con la precisione corretta. Il campo period è ciò che permette di confermare che un file contenga realmente il timeframe dichiarato dal suo nome.

Record della versione 400: 44 byte

Il layout originale, in uso dalla MT4 Build 509, memorizza ogni barra come 44 byte contenenti il time in secondi, seguito da open, low, high, close e volume. Nota l'ordine inusuale: open, low, high, close. Chiunque dia per scontato il consueto ordine open-high-low-close finirà con high e low scambiati, il che corrompe silenziosamente ogni indicatore calcolato a partire dal file.

La scomposizione: un time di 4 byte, seguito da cinque valori double-precision da 8 byte (open, low, high, close, volume). Sono 4 + 40 = 44 byte.

Record della versione 401: 60 byte

A partire dalla MT4 Build 574, il formato è passato alla versione 401. L'header mantiene la stessa dimensione, ma ogni record diventa di 60 byte con timestamp, open, high, low, close, volume, spread e volume reale. L'ordine ora è il più familiare open, high, low, close.

In pratica questo significa un timestamp di 8 byte, quattro prezzi da 8 byte, un tick volume di 8 byte, uno spread di 4 byte e un volume reale di 8 byte. Il timestamp più ampio elimina il vecchio limite del valore time a 4 byte, e i campi aggiuntivi portano informazioni che il vecchio layout semplicemente non poteva contenere.

Confronto tra i layout dei record HST versione 400 e 401

Perché devi leggere il campo versione

La stessa fonte è esplicita: un'implementazione deve scegliere il layout del record in base alla versione indicata nell'header piuttosto che assumere che ogni file sia del vecchio tipo a 44 byte. Se codifichi in modo fisso 44 byte e apri un file versione 401, il parser leggerà dati spazzatura a partire dal secondo record in poi, e i numeri potrebbero comunque sembrare plausibili abbastanza a lungo da trarti in inganno.

Un rapido test di coerenza: sottrai 148 dalla dimensione del file e dividi per la dimensione del record corrispondente alla versione rilevata. Il risultato deve essere un numero intero. Se non lo è, il file è troncato oppure la versione è sbagliata.

Versione 400 contro 401 a colpo d'occhio

Versione 400Versione 401
IntrodottaIn uso dalla MT4 Build 509MT4 Build 574 e successive
Header148 byte148 byte
Dimensione record44 byte60 byte
Ordine dei campiTime, open, low, high, close, volumeTime, open, high, low, close, volume, spread, real volume
Supporto buildMantenuto per compatibilitàFormato MT4 attuale

I dettagli su build e versioni provengono dal riferimento della community citato sopra. Essendo mantenuto dalla community, trattalo come una mappa e verificalo su un file di cui conosci la validità prima di costruirci sopra degli strumenti.

Come aprire e importare dati HST

Il file HST in sé non è pensato per essere modificato a mano. I percorsi pratici sono questi.

In MT4: la History Center

La History Center consente di importare dati storici, dopo di che il terminal mostra i grafici e testa gli Expert Advisor su di essi. Durante l'importazione, puoi impostare parametri come il separatore, lo shift temporale, il numero di colonne da saltare e la gestione del volume. I passaggi abituali:

  1. Chiudi qualsiasi grafico o sessione del tester che usa il simbolo.
  2. Apri Strumenti, poi History Center (F2).
  3. Seleziona il simbolo e il periodo 1 Minute.
  4. Clicca su Importa e scegli il tuo file.
  5. Conferma l'anteprima, poi lascia che il terminal costruisca le barre.
  6. Riavvia il terminal affinché i timeframe superiori vengano ricostruiti.

Per una guida dettagliata con screenshot, consulta il nostro articolo sull'importazione di dati storici in MetaTrader 4 e 5 e quello specifico per l'importazione di dati CSV in MT4.

Se la History Center rifiuta un file o mostra un errore, segui le soluzioni in MT4 History Center: 5 soluzioni sicure prima della riparazione del file prima di eliminare qualsiasi cosa.

In MT5: simboli custom

Crea un simbolo custom, apri la sua scheda Bars e importa. La finestra di importazione accetta file di testo e file di storico MetaTrader, con le stesse opzioni di separatore, salto colonne e shift temporale. Il nostro articolo passo-passo su come caricare dati in MT5 copre l'intera procedura.

Gli sviluppatori possono spingersi oltre a livello di codice. La funzione MQL5 CustomRatesReplace aggiorna lo storico di un simbolo custom usando la struttura MqlRates, utile quando generi le barre dalla tua pipeline anziché importare file.

Leggere file HST nel tuo codice

Poiché il layout è fisso, uno script breve può fare il parsing. La logica è sempre la stessa:

  1. Leggi i primi 148 byte ed estrai version, symbol, period e digits.
  2. Scegli la dimensione del record in base alla versione (44 o 60).
  3. Verifica che la dimensione rimanente del file sia divisibile esattamente per la dimensione del record.
  4. Leggi i record in un ciclo e mappa ciascuno sull'ordine dei campi corretto per quella versione.
  5. Converti i timestamp dai secondi dal 1970 e decidi esplicitamente quale fuso orario rappresentano.

Quest'ultimo passaggio è dove iniziano la maggior parte dei problemi.

Problemi di compatibilità comuni

Timestamp duplicati. MT5 tratta le barre duplicate con lo stesso orario come errori in fase di importazione, e i dati devono essere ordinati dal più vecchio al più recente. Un file ottenuto concatenando due download sovrapposti è la causa classica.

Barre a un minuto mancanti. In MT5, i timeframe superiori vengono generati a partire dalle barre a un minuto, quindi un gap nei dati di base a un minuto si ripercuote come gap su ogni altro timeframe. L'help di MT5 afferma che i dati importati devono soddisfare specifici requisiti di formato, come la struttura a barre di un minuto per i dati di base. In MT4, i tratti mancanti nello storico memorizzato sono una ragione frequente per cui un backtest segnala una scarsa qualità di modellazione. Consulta come risolvere i dati mancanti in MT4 per una procedura di recupero.

Scostamenti di fuso orario. I file HST non portano alcuna etichetta di fuso orario. I server dei broker spesso operano su un orario GMT+2 o GMT+3 legato alla chiusura di New York, mentre altre fonti forniscono dati in UTC. L'opzione di time shift nella finestra di importazione, espressa in ore, esiste proprio per questo, ma devi sapere quale fuso ha usato la fonte. Uno shift con il segno sbagliato sposta ogni barra di ore, e le candele giornaliere non si allineeranno più con la sessione reale del mercato.

Assunzioni errate sulla versione. Come sopra, un parser o un convertitore che indovina il layout disallinea ogni record a partire dal primo.

Limiti sul numero di barre. Anche un file perfetto può essere troncato dalle impostazioni del terminal. Se i tuoi grafici smettono di caricarsi prima del tempo, controlla MT4 max bars.

Corruzione da scritture interrotte. Se il terminal è stato chiuso mentre scriveva, il controllo delle dimensioni della sezione precedente di solito rivela un record parziale alla fine.

Problemi di compatibilità comuni

Come verificare i dati HST prima di fare il backtest

Un file che si importa senza errori non è necessariamente un file di cui ti puoi fidare. Prima di un test di strategia, esegui una breve verifica. Questa checklist è il nostro metodo di lavoro, non una procedura ufficiale:

  1. Controllo dell'header. Conferma che symbol, period e digits corrispondano a quanto ti aspetti.
  2. Controllo della dimensione. La dimensione del file meno 148 deve dividersi esattamente per la dimensione del record.
  3. Controllo dell'ordine. I timestamp crescono in modo strettamente monotono, senza duplicati.
  4. Logica OHLC. Per ogni barra, high è almeno pari a open, close e low, e low non è superiore a nessuno di essi. I campi scambiati del layout 400 emergono qui immediatamente.
  5. Scansione dei gap. Sui dati a un minuto di una coppia forex liquida, elenca i gap più lunghi di qualche minuto al di fuori di weekend e festività. Indaga ogni cluster.
  6. Controllo di weekend e rollover. Osserva le aperture della domenica e le chiusure del venerdì per confermare che il fuso orario sia quello che pensi.
  7. Scansione degli outlier. Segnala le barre il cui range è molte volte superiore al range tipico. Esistono picchi di notizie genuini, ma anche glitch da singolo tick.
  8. Confronto a campione con una seconda fonte per alcuni eventi noti.

Il senso di tutto questo è la riproducibilità. Se due esecuzioni della stessa strategia sugli stessi dati danno lo stesso risultato, puoi confrontare i cambiamenti nella strategia. Se i dati differiscono silenziosamente tra un'esecuzione e l'altra, non puoi. Il nostro articolo sulle fonti di dati per backtest MT4 riproducibili approfondisce l'argomento, e la guida su come fare il backtest di un Expert Advisor in MetaTrader 4 mostra dove la qualità dei dati entra nel processo.

Dati a barre contro dettaglio a livello di tick

Un file HST memorizza barre aggregate, non singole operazioni o quotazioni. Questo è sufficiente per la grande maggioranza dei test di strategia, ma vale la pena capire cosa si perde passando dai record tick alle barre. I feed a livello di tick registrano ogni stampa con il proprio timestamp e dimensione; la nostra lettura su campi time and sales e confronto con il Level 2 spiega cosa contiene questo tipo di record. Le barre a un minuto comprimono tutto ciò in un unico open, high, low, close e volume per minuto, motivo per cui la qualità della costruzione delle barre conta così tanto.

Il nostro punto di vista

Raccogliamo e manteniamo i nostri dati a barre di un minuto da soli, e trattiamo il file come il prodotto. Un backtest è onesto solo quanto lo sono le barre che lo sostengono, e il formato HST non offre alcuna protezione: memorizzerà tranquillamente un high e un low scambiati, un fuso orario sfasato o un buco nel mezzo di una settimana di negoziazione senza alcuna segnalazione.

Per questo il nostro approccio è costruito attorno alla verifica. Controlliamo i dati barra per barra, documentiamo le rettifiche, e manteniamo i dataset a uno standard di qualità rigoroso, pensato sia per i trader umani che per il backtesting guidato dall'AI. Il nostro storico parte dal 2014 e copre forex, metalli, obbligazioni e indici azionari, consegnato come dataset completi progettati per l'importazione diretta in MT4 e MT5, in modo che tu passi il tuo tempo a testare strategie anziché a riparare file.

Quando qualcosa effettivamente non torna, puoi parlare con gli ingegneri che raccolgono i dati, non con un generico servizio di assistenza. Pensiamo che sia così che un fornitore di dati dovrebbe lavorare per i quant.

Inizia

Salta il passaggio di conversione

Se preferisci non costruire e verificare file HST da solo, i nostri set di dati storici sono storici puliti a barre di un minuto a partire dal 2014, preparati per l'importazione in MT4 e MT5. Inizia con il Forex Major Full Pack se testi le coppie principali, oppure dai un'occhiata all'Annual Plan, al prezzo di 119€ all'anno.

Forex Major Full Pack

Stai costruendo un portafoglio di strategie? Il nostro articolo sul backtesting di portafoglio in MT4 mostra come individuare i drawdown reali tra più sistemi.

FAQ

Cosa significa HST in MetaTrader?

È l'estensione per i file di storico. MT4 memorizza le quotazioni storiche per ogni simbolo e timeframe in questi file per poter disegnare i grafici ed eseguire i test. Non ha alcun collegamento con l'imposta armonizzata sulle vendite canadese (HST).

Posso aprire un file HST in Excel?

Non direttamente, perché è binario e non testuale. Esporta i dati in CSV dalla History Center, oppure leggi il file con uno script che segue il layout di header e record descritto sopra.

MT5 e MT4 usano lo stesso formato HST?

MT5 mantiene un proprio storico interno, ma un simbolo custom può importare file di storico MetaTrader. Usa le barre a un minuto come base, perché gli altri timeframe vengono generati a partire da esse.

Perché il mio storico importato è pieno di gap?

Le cause abituali sono barre a un minuto mancanti nella fonte, uno shift temporale errato, timestamp duplicati o limiti sul numero di barre del terminal. Esegui la checklist di verifica indicata sopra, e consulta la nostra guida su come risolvere i dati mancanti in MT4.

Fonti

Consigliati

Risorse correlate

Esplora i robot Expert Advisor di BacktestMarket per mettere in pratica le idee di questo articolo.

Newsletter

Rimani aggiornato

Nuovi dataset, Expert Advisor, sconti e approfondimenti di trading — direttamente nella tua casella di posta.

Carrello

Il carrello è vuoto

Aggiungi prodotti per iniziare.