OnTick e OnTimer in MQL5: come usarli nel design di un EA
Contenuti
In breve: decidere sulla nuova candela, gestire il tempo con OnTimer
Parto dalla conclusione. Se l'EA decide le operazioni su timeframe lunghi come H1 o H4, basta valutare solo al primo tick della nuova candela. Ripetere lo stesso calcolo a ogni tick consuma CPU senza cambiare la decisione. Per le operazioni che devono girare anche senza tick, invece, si usa OnTimer: scrivere lo stato nel fine settimana, riordinare gli ordini a un orario fisso e simili.
Quale dei due sia quello giusto, però, dipende dalla strategia. In questo articolo riassumo la differenza tra i due meccanismi e i punti che può verificare chi sceglie un EA.
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 funzionano: guidato dai tick e guidato dal tempo
OnTick (guidato dai tick)
OnTick viene chiamato ogni volta che arriva un nuovo prezzo (tick) per il simbolo su cui gira l'EA. Nelle fasi di forte volatilità può essere chiamato più volte al secondo; nel fine settimana, a mercato fermo, non viene chiamato mai.
C'è una specifica da conoscere. I tick che arrivano mentre l'esecuzione precedente di OnTick non è ancora terminata non vengono messi in coda: vengono saltati. Un EA con un'elaborazione pesante, quindi, perde tick proprio durante i movimenti bruschi.
OnTimer (guidato dal tempo)
OnTimer viene chiamato a intervalli definiti con EventSetTimer(). Funziona indipendentemente dai movimenti di prezzo, quindi viene chiamato anche a mercato chiuso. Per ogni EA c'è un solo timer e, se l'elaborazione è bloccata, gli eventi vengono saltati allo stesso modo. Inoltre non c'è garanzia che la chiamata avvenga esattamente all'intervallo indicato.
| Voce | OnTick | OnTimer |
|---|---|---|
| Cosa lo attiva | Aggiornamento del prezzo | Trascorrere di un intervallo di tempo |
| A mercato chiuso | Non viene chiamato | Viene chiamato |
| Numero di chiamate | Più alto quanto più il mercato è agitato | Pressoché costante |
| Adatto a | Decisioni di ingresso e uscita | Calcoli periodici, operazioni legate a un orario |
| Attenzione principale | Un'elaborazione pesante fa perdere tick | Gira anche se non sono arrivati nuovi prezzi |
Come scrivere strategie a bassa frequenza senza sprecare CPU
Per una strategia che decide su H4, durante le 4 ore di una candela OnTick può essere chiamato migliaia di volte, ma i valori della candela chiusa usati per decidere non cambiano. Per questo, di base, noi facciamo passare l'elaborazione pesante solo "quando cambia la candela":
datetime g_lastBar = 0;
void OnTick()
{
datetime cur = iTime(_Symbol, PERIOD_H4, 0);
if(cur == g_lastBar) return; // finché la candela è la stessa, non fare nulla
g_lastBar = cur;
// qui si decide usando la candela chiusa (shift 1)
}
È importante anche creare gli handle degli indicatori una sola volta in OnInit, senza ricrearli a ogni chiamata di OnTick. Se usi OnTimer, chiama EventKillTimer() in OnDeinit per fermare il timer.
Se sul VPS hai più grafici con EA attivi, queste differenze si traducono in carico CPU. Per orientarti nella scelta del VPS trovi una guida in Informazioni sul VPS.
Cosa può verificare chi sceglie un EA
Anche senza poter vedere il codice, alcune cose si possono controllare almeno in parte.
- Descrizione e parametri: c'è un'impostazione come "decidi solo sulla nuova candela"?
- Utilizzo CPU del VPS: se rimuovendo un singolo EA il carico scende in modo evidente, è possibile che quell'EA esegua un'elaborazione pesante a ogni tick
- Log degli Expert: lo stesso output compare ripetuto a ogni tick?
- Risultati nel tester: se l'EA decide sull'apertura della candela, i risultati con "Solo prezzi di apertura" e con "Ogni tick" non dovrebbero differire molto. Se divergono parecchio, l'EA reagisce anche ai movimenti all'interno della candela
Per le basi su come installare e configurare un EA, consulta Come impostare un EA.
Limiti e avvertenze
Vale la pena dire anche gli aspetti meno comodi.
- Il rischio dentro la candela non viene monitorato: se si decide solo sulla nuova candela, l'EA non reagisce ai movimenti improvvisi a candela in corso. Lo stop loss va protetto con uno stop impostato sull'ordine stesso; altrimenti si rischiano perdite inattese.
- Ritardo sulla nuova candela: anche quando nasce una nuova candela, l'elaborazione parte solo con l'arrivo del primo tick. Su simboli o fasce orarie poco mossi la decisione può arrivare dopo l'apertura della candela.
- OnTimer nel tester si discosta facilmente dal comportamento reale: nel tester il timer viene chiamato su un tempo virtuale, quindi gli intervalli non coincidono necessariamente con quelli di un conto reale.
- Un'elaborazione leggera non migliora i risultati: ridurre il carico CPU non rende l'EA più profittevole. La qualità della strategia è un altro discorso.
Negli EA su H4, come ETHEREUM EA, che operano poco, le differenze di design si notano ancora meno. Ma ciò che si può verificare dall'esterno ha dei limiti. Possiamo affermare con certezza solo ciò che riguarda il codice scritto da noi.
Riepilogo
- OnTick viene chiamato quando arriva un prezzo, OnTimer a intervalli regolari
- Gli eventi che arrivano durante l'elaborazione non vengono messi in coda ma saltati: un'elaborazione pesante porta a perderli
- Nelle strategie a bassa frequenza, decidere solo sulla nuova candela evita di sprecare CPU
- Per le operazioni che devono girare anche in assenza di tick, usa OnTimer
- Il rischio dentro la candela si copre con lo stop sull'ordine; un'elaborazione leggera non migliora i risultati
- Altri consigli sono raccolti in EA e MT5: guida pratica
Correlati
📧 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 ↗