Spread Profile by Hour
- Utilità
-
Quoc Dat Quach
Software engineer with 8 years in fintech and mobile, writing MQL4/MQL5 since 2017. I build Expert Advisors, indicators, trade and risk-management panels and utilities for MT4/MT5, and I trade forex and gold on MT5 myself. - Versione: 1.0
Spread Profile by Hour costruisce la distribuzione dello spread di un simbolo per ogni ora della giornata del server a partire dallo storico tick del tuo broker, e la disegna come 24 barre. La parte piena di una barra è lo spread mediano di quell'ora, il cappuccio più chiaro arriva al 90° percentile. Inserisci la dimensione dello stop che usi normalmente e ogni barra viene etichettata con il suo spread mediano come quota di quello stop, così il costo è nella stessa unità del tuo rischio.
È uno strumento di misura. Non piazza ordini, non usa DLL né WebRequest e non scrive alcun file tranne l'esportazione CSV che attivi tu.
Perché esiste: per le regole intraday e di scalping è spesso lo spread, non il segnale di ingresso, a decidere se un edge sopravvive. Il terminale mostra lo spread di questo momento, e lo storico delle barre conserva un solo valore di spread per barra, il che nasconde ciò che è accaduto all'interno dell'ora. Le stesse regole possono funzionare nelle ore tranquille e perdere al rollover giornaliero o all'apertura di una sessione semplicemente perché lì lo spread è parecchie volte più ampio. Questo indicatore legge le quotazioni stesse - ogni tick bid e ask degli ultimi N giorni di calendario tramite CopyTicksRange - e le raggruppa per ora del giorno nell'orario del server.
Cosa calcola per ogni ora del server, sugli ultimi N giorni di calendario escluso oggi, così il quadro non cambia mentre stai facendo trading:
- Spread mediano e al 90° percentile in punti per ogni ora sul pannello; media, massimo e numero di quotazioni alla base di ciascuna ora nell'esportazione CSV.
- Due modalità di campionamento. Tick count: ogni quotazione conta una volta. Time-weighted: ogni quotazione conta per il tempo in cui è rimasta valida, fino a 60 secondi. La modalità Tick count sovrarappresenta i mercati veloci, e i mercati veloci hanno spesso spread ampi; la modalità Time-weighted risponde alla domanda su quale spread avresti trovato in un momento casuale di quell'ora.
- Un filtro per giorno della settimana, da lunedì a venerdì, per regole che operano solo in un giorno della settimana; con questo filtro è opportuno aumentare la profondità dello storico, poiché 20 giorni di calendario contengono solo due o tre occorrenze dello stesso giorno della settimana.
- La vista dei costi: con una dimensione dello stop in punti inserita, ogni barra viene etichettata con lo spread mediano come percentuale di quello stop, e l'intestazione mostra la mediana e il 90° percentile dell'ora corrente nella stessa unità. Quando la finestra è troppo stretta per un'etichetta su ogni barra, solo la barra con la mediana più alta mantiene la sua etichetta.
- Lo spread mediano dell'ora corrente nella valuta del conto per 1,00 lotto, ricavato dal valore del tick e dalla dimensione del tick del simbolo.
- Le ore ai due estremi della classifica delle mediane, fino a tre per ciascun estremo, nell'intestazione. Le ore che condividono la stessa mediana vengono elencate insieme o riassunte, per esempio "Cheapest: 23 hours at 6 pt", così valori uguali non vengono mai presentati come una classifica; se tutte le ore hanno la stessa mediana, l'intestazione lo dice.
- L'ora del server corrente evidenziata e lo spread live disegnato come linea tratteggiata attraverso le barre.
- Esportazione CSV facoltativa della tabella oraria in MQL5\Files\SpreadProfile_<symbol>_<yyyymmdd>.csv in UTF-8, scritta dopo ogni calcolo.
Come tratta lo storico tick, che è la parte che decide se i numeri sono affidabili: viene caricato un giorno per ogni passo del timer e rilasciato subito, così il grafico resta reattivo su oro o cripto con più di 100.000 tick al giorno. Un giorno che il terminale sta ancora scaricando viene ritentato per qualche secondo, e un giorno i cui tick non coprono le sue stesse barre M1 viene ritentato prima di essere usato. I giorni vengono letti dal più recente all'indietro. Quando tre giorni di trading consecutivi non restituiscono tick (con un filtro per giorno della settimana, tre giorni consecutivi di quel giorno della settimana), oppure dieci consecutivi non hanno né tick né barre M1, quei giorni vengono letti una seconda volta dopo una pausa, e se sono ancora vuoti il caricamento si ferma e l'intestazione mostra la data del giorno più vecchio effettivamente usato; un buco di quella lunghezza all'interno dell'archivio tick del broker termina il caricamento nello stesso modo. L'intestazione conta anche i giorni usati come parziali, cioè con tick che non hanno raggiunto l'ultima barra M1, e i giorni non disponibili, cioè con barre M1 ma senza tick. Un simbolo senza alcuno storico tick lo segnala entro una ventina di secondi invece di disegnare un pannello vuoto. Il giornale riceve una riga di riepilogo per ogni calcolo - giorni usati, tick letti, ore riempite - più una riga con il nome del file CSV quando l'esportazione è attiva.
Come leggere il pannello. Ogni barra è un'ora del giorno nell'orario del server. La parte piena è la mediana: metà delle quotazioni, o metà del tempo in modalità Time-weighted, aveva uno spread pari o inferiore a essa. Il cappuccio più chiaro è il 90° percentile: una quotazione su dieci era più ampia di così. Misurazioni dagli screenshot, effettuate su un conto demo su 20 giorni di calendario, 17 dei quali con tick:
- EURUSD, Tick count, stop di 50 punti: la mediana è di 6 punti in 23 delle 24 ore. Alle 21:00 orario del server, il rollover giornaliero, è di 34 punti con un 90° percentile di 58. Cioè il 12 percento dello stop per la maggior parte della giornata e il 68 percento in quell'unica ora.
- GBPUSD, Time-weighted, nessuno stop inserito: 7 punti in 23 ore, mediana 46 e 90° percentile 94 alle 21:00. In modalità Tick count la stessa ora indica 54 e 100, perché le quotazioni si concentrano attorno al rollover, dove lo spread è ampio.
- XAUUSD, Tick count, stop di 1500 punti: la mediana è di 182 punti in ogni ora che ha dati, cioè il 12 percento dello stop e 18,20 USD per 1,00 lotto, per cui l'intestazione dice questo invece di classificare valori uguali. La pausa giornaliera alle 21:00 ha meno del numero minimo di tick ed è mostrata con un trattino.
L'uso pratico è una decisione sulle ore: se il tuo sistema opera in un'ora in cui lo spread mediano è una quota importante del tuo stop, salta quell'ora, allarga lo stop, oppure verifica che il movimento atteso lo ripaghi. Il 90° percentile mostra come appare un'esecuzione sfavorevole ma non rara.
Verifica indipendente. Le statistiche orarie sono state ricalcolate dagli stessi tick grezzi con un'implementazione Python separata. Mediana, 90° percentile, media, massimo e numero di tick coincidevano per ogni ora in entrambe le modalità di campionamento, per esempio EURUSD 20:00 con 10.692 tick e 21:00 con 8.097 tick, e GBPUSD 21:00 in entrambe le modalità. Test di caricamento sulla stessa macchina: 20 giorni di XAUUSD, 4,29 milioni di tick, in un tempo da 1 a 3 secondi; 60 giorni filtrati sui lunedì, 2,60 milioni di tick, in 1,3 secondi; 365 giorni di EURUSD, 9,37 milioni di tick su 232 giorni con tick, in circa 30 secondi inclusa la seconda lettura dei giorni precedenti l'inizio dello storico tick. I tuoi tempi dipendono dalla densità dei tick del tuo broker e dal fatto che i tick siano già su disco.
Parametri di input: profondità dello storico in giorni di calendario (da 1 a 365, predefinito 20), modalità di campionamento, filtro per giorno della settimana, intervallo dell'istogramma in punti con una classe di overflow, numero minimo di tick perché un'ora venga mostrata, dimensione dello stop in punti (0 disattiva le etichette percentuali), altezza della finestra, sette colori, quattro dei quali vengono derivati automaticamente se lasciati su None (sfondo dal grafico, testo e griglia da quello sfondo, il cappuccio del 90° percentile dal colore delle barre), dimensione del carattere e l'opzione CSV. Ogni parametro è documentato dal proprio commento nel terminale.
Note e limiti. La profondità dello storico tick dipende dal tuo broker e da ciò che il terminale ha già scaricato. Alla primissima esecuzione su una profondità lunga il terminale potrebbe ancora scaricare tick; un giorno ancora in arrivo viene ritentato per qualche secondo e poi usato come parziale o saltato, quindi se il caricamento si ferma presto, ricollega l'indicatore una volta terminato il download - la seconda esecuzione legge da disco. Tutte le ore sono ore del server, quindi un evento come il rollover può spostarsi di un'ora del server tra ora legale e ora solare, e un periodo di storico che comprende il cambio lo mostra diviso tra due ore vicine. Conti demo e live, e tipi di conto standard, raw e zero, possono avere spread molto diversi per lo stesso simbolo - effettua la misura sul conto con cui operi. Lo storico dello spread non predice gli spread futuri: notizie, festività e bassa liquidità possono produrre spread ben superiori al 90° percentile mostrato qui. Il costo per lotto usa il valore del tick attuale, che per i cross si muove con il tasso di cambio. Il profilo viene ricalcolato una volta per ogni nuovo giorno del server e ogni volta che cambiano i parametri di input, il simbolo o il timeframe. L'indicatore si apre in una finestra separata e più copie possono funzionare su un grafico, ciascuna nella propria finestra.
