Ti stai perdendo delle opportunità di trading:
- App di trading gratuite
- Oltre 8.000 segnali per il copy trading
- Notizie economiche per esplorare i mercati finanziari
Registrazione
Accedi
Accetti la politica del sito e le condizioni d’uso
Se non hai un account, registrati
Prival:
Raramente, ma ci sono situazioni in cui le quotazioni di uno strumento si bloccano per molto tempo (ho visto una situazione del genere nello yen). Se l'Expert Advisor si blocca su questa coppia, siete nei guai se non avete tradotto tutto il codice in OnTime().
Lizar:
Un evento di questo tipo può essere ricevuto usando TimeCuurent(), ma cosa farne poi, come sincronizzarlo, è un problema.
Cosa c'entra TimeCuurent() con questo?
La guida dice:
Nel gestore OnTick(), questa funzione restituisce l'ora del tick elaborato in entrata. In altri casi (ad esempio, nei gestori OnInit(), OnDeinit(), OnTimer() e così via) si tratta dell'ora di arrivo dell'ultima quotazione per qualsiasi simbolo disponibile nella finestra "Market Watch", la stessa che viene mostrata nel titolo di questa finestra.
La sinossi recita:
Nel gestore OnTick(), questa funzione restituisce l'ora di arrivo del tick in corso di elaborazione. In altri casi (ad esempio, chiamata nei gestori OnInit(), OnDeinit(), OnTimer() e così via) si tratta dell'ora di arrivo dell'ultima quotazione per qualsiasi simbolo disponibile nella finestra "Market Watch", la stessa ora che viene mostrata nell'intestazione di questa finestra.
Sì, è chiaro. Solo che se lo mettiamo in OnTime possiamo aggiornare l'ora non più di una volta al minuto, e se lo mettiamo nell'attuale OnTick() rischiamo di perdere i tick su alcune coppie (in mute).
E cosa fare nel blocco di elaborazione è chiaro (per le mute): otteniamo un nuovo valore, lo confrontiamo con quello esistente e traiamo le conclusioni se c'è stato un nuovo tick o meno.
Ma ditemi, perché farlo nell'Expert Advisor?
La sinossi recita:
errore. ecco cosa dice la guida https://www.mql5.com/it/docs/basis/function/events
L'evento NewTick viene generato solo per gli Expert Advisor quando viene ricevuto un nuovo tick per un simbolo al cui grafico è collegato l'Expert Advisor.
Ancora una volta. Stiamo parlando di un Expert Advisor che si aggancia a un simbolo. Viene attivato dall'evento
void OnTick() {}
Se vi trovate all'interno di questa funzione e non ci sono tick su questa coppia per più di un'ora, non potete fare nulla entro un'ora. Finora, l'unica via d'uscita è quella di farlo in un timer, che si avvia indipendentemente dall'arrivo di tick sullo strumento.
Ma se lo mettiamo in OnTime possiamo aggiornare l'ora non più di una volta al minuto, e se lo mettiamo nell'attuale OnTick() rischiamo di perdere i tick su alcune coppie (in multa).
Errore. Ecco cosa dice la guida https://www.mql5.com/it/docs/basis/function/events.
Ancora una volta. Si tratta di un Expert Advisor che si blocca su un simbolo. Viene lanciato dall'evento
void OnTick() {}
Se ci si trova all'interno di questa funzione e non ci sono tick su questa coppia per più di un'ora, non è possibile fare nulla entro un'ora. Finora, l'unica via d'uscita è farlo nel timer, che viene avviato indipendentemente dall'arrivo di tick sullo strumento.
Sì, se agiamo nell'ambito di questo https://www.mql5.com/it/docs/basis/function/events, sono d'accordo che l'opzione migliore, come vediamo ora, è OnTime. Ma ci salverà solo dalla dipendenza dall'arrivo dei tick. E non ci salverà dalla monotematicità: mentre elaboriamo un segnale per uno strumento, rischiamo di perdere o ritardare l'elaborazione di altri strumenti. Questo è particolarmente vero quando "il tempo di elaborazione degli ordini di compravendita va da 2 a 7 secondi" + requote.
Mi sono ricordato di TimeCuurent() perché l'Interesse ha iniziato a parlare di tick in tempo reale per tutte le coppie nella revisione del mercato.
Articolo molto interessante. Grazie per aver condiviso tutto questo.
Tuttavia, alcune osservazioni:
Parlando di questa funzione, lei dice :
If you call this prototype function from one place, then we have what we need. But if we want to use this function, for example, again in another place in the same calculation loop, it will always return false, which means that there is no bar. And this will not always be true. Static variable in this case imposes an artificial limit on the number of prototype function calls.
Avete sostituito una variabile locale statica con una variabile globale, che è la stessa cosa, e non avete risolto il problema.
Tuttavia, il tuo articolo ha il merito di spingere a riflettere e di offrire spunti interessanti.
Ottimo articolo, grazie per averlo condiviso! Tutto ciò è stato molto utile!
Comunque, ho preso la tua funzione isNewBar e in fase di compilazione mi lancia il seguente messaggio:"possibile perdita di dati a causa della conversione di tipo".
Ho quindi cambiato i tipi di var da datetime a long in questo modo:
Ora compila senza alcun avviso e sembra funzionare bene. Grazie!