Perché gli EA a barra chiusa non fanno repaint
Contenuti
In sintesi: i segnali di un EA che decide solo sulle barre chiuse cambiano di rado perché i dati su cui si basa la decisione, a quel punto, non si muovono più. In una barra in formazione, chiusura, massimo e minimo possono cambiare al tick successivo. I quattro prezzi (OHLC) di una barra chiusa, invece, di norma non si modificano dopo la chiusura.
Tuttavia, leggere le barre chiuse non basta a garantire la sicurezza. A seconda di come sono calcolati gli indicatori e di come vengono gestiti i timeframe superiori, anche credendo di usare barre chiuse possono infiltrarsi valori futuri.
Perché la barra in formazione è pericolosa
In MQL5 lo shift 0 è la barra in formazione e lo shift 1 è l'ultima barra chiusa. La chiusura dello shift 0 è semplicemente "il prezzo di adesso". Se la usi per decidere, si presentano questi problemi:
- A ogni tick la condizione si verifica o scompare, quindi il motivo per cui sei entrato può svanire a posteriori
- L'ordine viene eseguito su un segnale momentaneo che, a barra chiusa, non resta sul grafico
- Nel tester i risultati cambiano facilmente in base al modo in cui vengono generati i tick, e se il movimento interno alla barra differisce da quello reale, la differenza si riflette direttamente sulla performance
| Voce | Barra in formazione (shift 0) | Barra chiusa (shift 1 e successivi) |
|---|---|---|
| Valore usato per decidere | Cambia fino alla chiusura | Di norma non cambia |
| Riproducibilità del segnale | Bassa | Alta |
| Rapidità d'ingresso | Rapida | Più lenta, per l'attesa della chiusura |
| Effetto del metodo di generazione dei tick nel tester | La decisione stessa può cambiare | Effetto ridotto sulla decisione (resta sull'uscita) |
Usare la barra in formazione non è sempre un errore. Esistono progettazioni che cercano di cogliere subito un breakout. In quel caso occorre riconoscere che si dipende dal movimento interno alla barra e dare più peso alla verifica con tick reali.
Confronto broker consigliati →
🎁 Scarica EA gratis📧 Corso email gratuito (8 email) + pacchetto di 13 indicatori MT5 riservato agli iscritti
Subito dopo l'iscrizione ricevi il link per scaricare un pacchetto riservato agli iscritti con i nostri 13 indicatori MT5: file compilati (.ex5), codice sorgente e una guida all'installazione. Poi 8 email sui fondamenti del trading algoritmico, sulla corretta lettura dei backtest e sulla scelta del broker (una al giorno per i primi 5 giorni, poi a 7, 14 e 30 giorni dall'iscrizione). Ricevi anche un avviso prima di ogni aumento di prezzo delle versioni vendute su MQL5 Market (prezzo di lancio che sale a scaglioni con le vendite). Su questo sito i nostri EA sono gratuiti con un conto reale presso un broker partner.
* Privacy rigorosamente protetta. Potete cancellarvi in qualsiasi momento.
Come progettare la conferma del segnale
CopyRates: indica sempre posizione iniziale e ordinamento
Leggi la barra chiusa una sola volta, al primo tick della nuova barra.
datetime g_lastBar = 0;
void OnTick()
{
datetime t = iTime(_Symbol, _Period, 0);
if(t == 0 || t == g_lastBar) return;
MqlRates r[];
ArraySetAsSeries(r, true);
if(CopyRates(_Symbol, _Period, 1, 2, r) != 2) return;
g_lastBar = t;
// r[0] è l'ultima barra chiusa, r[1] quella precedente
}
Tre punti chiave: impostare la posizione iniziale a 1 per escludere la barra in formazione dall'intervallo; stabilire l'ordinamento con ArraySetAsSeries; se il recupero fallisce, non aggiornare g_lastBar e riprovare al tick successivo. Se dimentichi di specificare l'ordinamento, il primo elemento dell'array sarà la barra più vecchia.
iBarShift: una trappola con i timeframe superiori
Quando si fa riferimento a un timeframe superiore, iBarShift restituisce "la barra che contiene quell'istante". Passandogli l'ora corrente, di norma ottieni la barra in formazione del timeframe superiore.
int s = iBarShift(_Symbol, PERIOD_H1, TimeCurrent(), false);
if(s < 0) return;
double closedH1 = iClose(_Symbol, PERIOD_H1, s + 1);
Se ti serve la barra chiusa del timeframe superiore, indica la barra più vecchia di uno, come qui sopra.
Il repaint tipico si verifica negli indicatori che disegnano su un grafico di timeframe inferiore valori del timeframe superiore. Se a ogni barra passata del timeframe inferiore si assegna la chiusura della barra superiore che contiene lo stesso istante, nel passato vengono disegnati valori finali che in quel momento non esistevano ancora. Sul grafico sembra che il segnale sia azzeccato, ma in tempo reale non si può prendere la stessa decisione.
Se il quarto parametro exact è false, quando la barra cercata non esiste viene restituita quella più vicina. Questo rende più difficile accorgersi di dati mancanti, quindi è più sicuro controllare anche l'orario della barra ottenuta. I dati di altri simboli o altri timeframe possono aggiornarsi in ritardo: prima di decidere, verifica che la barra sia quella dell'orario atteso.
Evitare la doppia valutazione al riavvio
g_lastBar nel codice sopra torna al valore iniziale quando l'EA viene riavviato. Per evitare che la stessa barra chiusa venga rivalutata e generi un doppio ingresso, la progettazione deve controllare anche le posizioni aperte e l'orario dell'ultima esecuzione.
Verifiche che può fare l'utente
Anche senza poter leggere il codice sorgente, si può verificare qualcosa così:
- Guardare in modalità visuale: nella modalità visuale del tester, controlla se gli orari d'ingresso si concentrano all'inizio delle barre. Se gli ordini vengono eseguiti spesso a metà barra, forse viene usata la barra in formazione (l'uscita è un'altra questione).
- Confrontare diversi modelli di tick: con lo stesso periodo e le stesse impostazioni, prova "solo prezzi di apertura", "ogni tick" e "ogni tick basato su tick reali". Se il numero o l'orario degli ingressi cambia molto, sospetta una dipendenza dal movimento interno alla barra.
- Registrare le frecce degli indicatori: salva con uno screenshot l'orario in cui compare una freccia e confrontalo con alcune barre dopo. Se la posizione cambia o la freccia scompare, c'è repaint.
- Chiedere a chi distribuisce: domanda se si decide sulle barre chiuse e come vengono gestiti i timeframe superiori.
Sono tutti indizi circostanziali: da soli non dimostrano l'assenza di repaint. Se vuoi provare un indicatore, esercitati con la procedura usando gli indicatori gratuiti e, per l'installazione dell'EA, consulta la guida alla configurazione dell'EA.
Limiti e avvertenze
Decidere sulle barre chiuse ha anche i suoi svantaggi.
- L'ingresso è in ritardo: mentre si aspetta la chiusura il prezzo avanza e si può entrare in una posizione sfavorevole. Nei rialzi o ribassi improvvisi la differenza può essere notevole.
- Il costo dell'inizio barra: se la progettazione concentra gli ordini sul primo tick della nuova barra, si può subire l'effetto di spread ampi o gap di apertura.
- Non si evitano gli indicatori che guardano al futuro: indicatori come ZigZag, la cui forma cambia a posteriori, o che richiedono barre successive per confermarsi, possono cambiare valore anche su barre chiuse, a seconda della posizione che si legge.
- Anche la barra chiusa varia da broker a broker: se l'orario del server o i prezzi forniti sono diversi, cambiano anche i quattro prezzi, quindi lo stesso EA può decidere diversamente con broker diversi. Non si può escludere nemmeno che lo storico venga corretto in un secondo momento.
- L'uscita avviene dentro la barra: anche se la decisione d'ingresso è su barra chiusa, stop loss e take profit vengono eseguiti a metà barra. Questa parte continua a dipendere dalla qualità dei tick.
E soprattutto, non fare repaint non significa guadagnare. Anche tra i nostri EA ce ne sono alcuni con ottimi risultati sui dati storici ma in perdita nel forward test su conto demo. Che si usino barre chiuse è solo una delle premesse per poter fidarsi dei risultati di un test, non un'indicazione sui risultati futuri. Inoltre, l'uso delle barre chiuse dipende dalla progettazione di ciascun EA: quando scegli un EA, verificalo caso per caso e valutalo insieme ai numeri della classifica con misurazioni reali. Le idee di verifica correlate sono raccolte in Know-how su EA e MT5.
Riepilogo
- Il valore della barra in formazione si muove fino alla chiusura, quindi i segnali possono sparire o cambiare
- Decidendo sulle barre chiuse, i dati di decisione restano fissi e si risente meno del metodo di generazione dei tick
CopyRatesrichiede posizione iniziale e ordinamento espliciti e, se il recupero fallisce, va riprovatoiBarShifttende a restituire la barra in formazione del timeframe superiore: per leggere la barra chiusa, sposta lo shift- Il disegno di valori di timeframe superiori e gli indicatori che guardano al futuro sono esempi tipici di repaint
- Le barre chiuse comportano ritardo e costi, e non promettono alcun profitto
Correlati
2026-07-14
[68] Backtest di massa su 43 EA Gold con 11,5 anni di dati
2026-10-29
OnTick e OnTimer in MQL5: come usarli nel design di un EA
2026-10-19
Backtest non riproducibile: i 5 punti da controllare
2026-10-12
Dark Algo MT5: PF 2.08, DD max 35.05% a parità di condizioni
📧 Corso email gratuito (8 email) + pacchetto di 13 indicatori MT5 riservato agli iscritti
Subito dopo l'iscrizione ricevi il link per scaricare un pacchetto riservato agli iscritti con i nostri 13 indicatori MT5: file compilati (.ex5), codice sorgente e una guida all'installazione. Poi 8 email sui fondamenti del trading algoritmico, sulla corretta lettura dei backtest e sulla scelta del broker (una al giorno per i primi 5 giorni, poi a 7, 14 e 30 giorni dall'iscrizione). Ricevi anche un avviso prima di ogni aumento di prezzo delle versioni vendute su MQL5 Market (prezzo di lancio che sale a scaglioni con le vendite). Su questo sito i nostri EA sono gratuiti con un conto reale presso un broker partner.
* Privacy rigorosamente protetta. Potete cancellarvi in qualsiasi momento.
Hai domande su EA o Forex?
Puoi pubblicarle sul forum di trading di Nattzy (registrazione gratuita). Sono benvenute anche domande che vanno oltre questo articolo: impostazioni degli EA, scelta del broker e altro.
Chiedi su Nattzy ↗