Sistemi Esperti: New Candle or Bar formation. - pagina 2

 
Maxim Kuznetsov # :

1. Previous_time inizializzato in modo improprio, che causa falsi allarmi subito dopo l'avvio del codice.

2. Accesso costoso a iTime a ogni tick.

3. Non tutti i tick formano una barra (in rari casi, un tick può verificarsi in un giorno non lavorativo e non è una transazione, ma solo una procedura interna del server).

Il lavoro del codice consiste nel rilevare la formazione di nuove candele, che può essere scritto solo all'interno di una funzione Ontick o OnTimer.
 

Non è possibile sapere quando una candela si chiude. Solo quando arriva un nuovo tick che dà inizio a una nuova barra la vecchia barra è chiusa, e quel tick potrebbe arrivare quasi alla fine della durata di una barra.

Per un test di una nuova barra, Bars è inaffidabile (un aggiornamento/ricollegamento può cambiare il numero di barre sul grafico), il volume è inaffidabile (mancano i tick), il prezzo è inaffidabile (prezzi duplicati e l'operando ==. - Forum di programmazione MQL4.) Usate sempre il tempo.
MT4: Nuova candela - MQL4 programming forum #3 (2014)
MT5: Accesso alle variabili - MQL4 programming forum #3 (2022)

Non sono d'accordo con la creazione di una funzione nuova barra, perché può essere chiamata solo una volta per tick (la seconda chiamata restituisce false). Una variabile può essere testata più volte.
Eseguire l'EA una volta all'inizio di ogni barra - MQL4 programming forum (2011)

 static datetime curDT=0; datetime preDT=curDT; curDT=iTime(_Symbol,_Period,0);
 if(curDT != preDT){ … }
 
William Roeder #:

Non sono d'accordo con la creazione di una nuova funzione barra, perché può essere chiamata solo una volta per tick (la seconda chiamata restituisce false). Una variabile può essere controllata più volte.

Sono riuscito a creare una funzione generica IsNewBar(symbol, timeframe), che funziona correttamente all'interno di un EA per diverse combinazioni di simbolo e timeframe, e può essere richiamata più volte nell'ambito dell'elaborazione di un tick, restituendo la stessa cosa la seconda volta (e le volte successive) come la prima.

 
Il codice William che hai scritto qui e il mio codice vengono eseguiti allo stesso modo, ma il mio codice continua a funzionare fino a quando non cambia l'ora della candela, il che è davvero unico.