Caratteristiche del linguaggio mql5, sottigliezze e tecniche - pagina 27

 

Forum sul trading, sistemi di trading automatico e test di strategie di trading

Bug, bug, domande

fxsaber, 2017.02.07 13:41

SymbolInfoTick negli indicatori funziona in modo abbastanza diverso rispetto agli EA.

In un indicatore restituisce sempre il tick che è stato l'iniziatore della chiamata OnCalculate. E questi tick iniziatori nell'indicatore non dovrebbero essere saltati - questa è l'ideologia degli sviluppatori. Il problema è nella formazione della coda di queste zecche.

In Expert Advisor, SymbolInfoTick in OnTick non restituisce il tick che ha iniziato la chiamata di OnTick, ma fa una richiesta completa dello stato attuale.

 
fxsaber:

In altre parole:

L'indicatore mostrerà il primo tick dell'intero pacchetto quando arriva un lotto di tick, mentre l'EA mostrerà l'ultimo tick.

Sto leggendo bene?

 
Artyom Trishkin:

In altre parole:

L'indicatore mostrerà il primo tick dell'intero pacchetto quando arriva un pacchetto di tick, mentre l'EA mostrerà l'ultimo tick.

Ho capito bene?

Sì. OnCalculate non sarà chiamato ad ogni tick del pacchetto nell'ordine della coda.
 
fxsaber:
Sì. OnCalculate non sarà chiamato ad ogni tick del pacchetto nell'ordine della coda.

Ad ogni spunta? Perché NON hai scritto...

Risulta che con l'arrivo di un pacchetto di tick, l'indicatore partirà nell'ordine dei tick del pacchetto in arrivo?

Mi chiedo, se il pacchetto è stato ricevuto all'apertura di una nuova barra, quante volte durante questo pacchetto di tick l'indicatore eseguirà il ricalcolo completo?

 
Artyom Trishkin:

Ad ogni spunta? Perché tu NON hai scritto...

Probabilmente non ha scritto molte cose.

Risulta che con l'arrivo di un pacchetto di zecche, l'indicatore sarà avviato nell'ordine delle zecche nel pacchetto in arrivo?

Mi chiedo, se il pacchetto è arrivato all'apertura di una nuova barra - quante volte durante questo pacchetto di tick l'indicatore farà un ricalcolo completo?

L'evento Calcola viene generato su OGNI tick. Pertanto, c'è una coda di tick per gli indicatori. Se raggiunge una certa quantità, il giornale riceverà un avviso che l'indicatore è troppo lento.

Le barre stesse sono indicatori per natura e sono formate da eventi-calcolo. Quindi, se il TF M1 ed è 10:15:00.020 e arriva un pacchetto di 50 ms, allora il primo tick in esso ha ancora tempo 10:14:59.970. E tutti gli indicatori sono chiamati prima su questo evento Calculate - prima l'indicatore delle serie temporali e poi gli indicatori personalizzati con queste serie temporali. Cioè in questa disposizione la barra delle 10:15 non è ancora formata come la barra zero. E la barra zero è 10:14.


Poi, quando il pacchetto inizia a srotolarsi tramite gli eventi Calculate, apparirà anche la barra delle 10:15. Credo di averne parlato in dettaglio.

 
fxsaber:

Probabilmente ci sono molte cose che non ho scritto.

L'evento Calcola viene generato su OGNI tick. Quindi c'è una coda di tick per gli indicatori. Se raggiunge una certa quantità, c'è un avviso nel registro che l'indicatore è troppo lento.

Le barre stesse sono indicatori per natura e sono formate da eventi Calculate. Quindi, se TF M1 e sono le 10:15:00.020 e sta arrivando un pacchetto di 50 ms, allora il primo tick in esso ha ancora il tempo 10:14:59.970. E tutti gli indicatori sono chiamati prima su questo evento Calculate - prima l'indicatore delle serie temporali e poi gli indicatori personalizzati con queste serie temporali. Cioè in questa disposizione la barra delle 10:15 non è ancora formata come la barra zero. E la barra zero è 10:14.


Poi, quando il pacchetto inizia a srotolarsi tramite gli eventi Calculate, apparirà anche la barra delle 10:15. Credo di averne parlato in dettaglio.

Grazie.
 

Di conseguenza, è abbastanza normale che l'EA riceva un tick di una barra che non si è ancora formata. Ma questo è un punto così sottile che anche riprodurlo di proposito richiederebbe molto sforzo. In generale, è più teorico che pratico.


Se siamo paranoici sulla velocità, usare gli indicatori (e le barre, ovviamente) non è un'opzione. Tutto è nell'EA.

 

fxsaber:

Poi, quando il pacchetto inizia a srotolarsi tramite gli eventi Calculate, apparirà anche la barra delle 10:15. Credo di averne parlato in dettaglio.

Informazioni interessanti.
C'è un modo per determinare che un pacchetto è arrivato, ignorare le prime zecche da esso e prendere solo l'ultima zecca per l'elaborazione?
 
Vasiliy Pushkaryov:
C'è un modo per rilevare l'arrivo di un pacchetto, ignorare i primi tick da esso e prendere solo l'ultimo tick per l'elaborazione?
In OnCalculate tramite CopyTicks.
 
fxsaber:
In OnCalculate tramite CopyTicks.
Grazie, ne terrò conto.
Motivazione: