Quando si utilizza un Expert Advisor (EA) su MetaTrader, ogni volta che arriva un nuovo tick, il terminale chiama la funzione di gestione eventi predefinita OnTick(). Tuttavia, non esiste una funzione di gestione eventi predefinita per l'apertura di un nuovo bar (candele).
Per rilevare l'apertura di un nuovo bar, è necessario monitorare il tempo di apertura dell'ultimo bar corrente. Una volta che questo cambia, significa che è iniziato un nuovo bar e si può reagire di conseguenza. Ecco un esempio di codice, compatibile sia con MQL4 che MQL5, per implementare questa funzionalità:
// Gestore eventi per i tick predefiniti void OnTick() { // Controlla se c'è un nuovo bar (compatibile con MQL4 e MQL5). static datetime dtBarCorrente = WRONG_VALUE; datetime dtBarPrecedente = dtBarCorrente; dtBarCorrente = iTime( _Symbol, _Period, 0 ); bool bNuovoBarEvento = ( dtBarCorrente != dtBarPrecedente ); // Reagisci a un evento di nuovo bar e gestiscilo. if( bNuovoBarEvento ) { // Rileva se questo è il primo tick ricevuto e gestiscilo. /* Ad esempio, quando è attaccato per la prima volta a un grafico e il bar è a metà del suo progresso e non è effettivamente l'inizio di un nuovo bar. */ if( dtBarPrecedente == WRONG_VALUE ) { // Fai qualcosa al primo tick o a metà bar ... } else { // Fai qualcosa quando inizia un bar normale ... }; // Fai qualcosa a prescindere dalle condizioni sopra ... } else { // Fai qualcos'altro ... }; // Fai altre cose ... };
Nel codice sopra, la variabile statica tiene traccia del tempo di apertura del bar, anche quando si torna dalla funzione OnTick(). A differenza di una normale variabile locale, essa memorizza il suo contenuto e non lo rilascia quando si esce dalla funzione. Questo è fondamentale per rilevare un cambiamento nel tempo di apertura del bar attuale.
È importante notare che quando l'EA viene posizionato per la prima volta su un grafico, il codice sopra reagisce come se il bar fosse appena aperto. Questa condizione richiede una gestione speciale se la situazione deve essere trattata in modo diverso.
Ricorda che tutto il codice sorgente delle mie pubblicazioni su CodeBase è ora disponibile anche nella scheda "Progetti Pubblici" di MetaEditor con il nome "FMIC".
Post correlati
- Rilevare il Venerdì della Prima Settimana del Mese: La Guida per il Giorno NFP
- EA Efficiente: Come Aggiungere la Chiusura del Venerdì per Migliorare le Performance
- Utilità Market Watch Panel: il tuo alleato in MetaTrader 4
- X-liquidex: Il Miglior EA per Trading di Volatilità e Breakout su MetaTrader 4
- Expert Advisor Basato sulla Teoria della Probabilità per Forex su MetaTrader 5