Bug MQL5 quando si lavora con accesso alle serie temporali iClose/iOpen, ecc. - pagina 7

 
Renat Fatkhullin:

1) Misurare il tempo di esecuzione per ogni calcolo OnTick/OnCalculate in microsecondi e visualizzarlo nel log.

In questo modo puoi vedere quanto tempo ci vuole per calcolare un singolo tick. Poi stimate quanti ticchettii a questa velocità potete contare al secondo. Probabilmente non sarà più di una dozzina di tic, e ci sono consapevolmente più tic al secondo.


2) Misura il tempo per ogni OnCalculate sugli indicatori che sono collegati ai grafici/timeframes da cui stai estraendo i dati.

Probabilmente lì c'è una situazione simile. A causa della lentezza dei calcoli, il terminale attende che il simbolo calcolato:timeframe sia sbloccato. Sono gli indicatori lenti, specialmente su una storia profonda, che portano al congelamento dei payoffs di altri EAs.


Quando si progettano gli indicatori è necessario mettere al primo posto i problemi di performance e i ricalcoli economici. Altrimenti ucciderai tutto ciò che ti circonda.

Renat, è davvero molto triste. Tiki ora sta aspettando che io risolva i miei problemi? Fino ad ora, ho dato per scontato che i tic fossero autogenerati, e che o ho tempo o non ce l'ho. Ora si scopre che posso sospendere il sistema.

 
Алексей Тарабанов:

Renate, è stato piuttosto triste. I tic stanno aspettando che io risolva i miei problemi? Fino ad ora, ho dato per scontato che i tic si generassero da soli, e che o ho tempo o non ce l'ho. Ora si scopre che posso bloccare il sistema.

L'indicatore gira su ogni tick, senza salti. Dovete monitorare la durata di OnCalculate e la frequenza dei tick che arrivano in continuazione. Altrimenti vi ritroverete inceppati.

Il modo più semplice per riprodurlo è eseguire l'indicatore su un simbolo personalizzato e iniziare a farlo ticchettare con una certa frequenza. Man mano che la frequenza aumenta, vedrete la frenata. È tutto logico.

 

In quali casi l'indicatore non può disegnare il suo valore? i buffer sono riempiti con valori validi, ma il grafico dell'indicatore è vuoto.... almeno non è viceversa. costruire 1940

1944 lo stesso. deve essere così.

 
fxsaber:

L'indicatore viene eseguito su ogni tick, senza salti. È necessario monitorare la durata di OnCalculate e il tasso di arrivo dei tick per tutto il tempo. Altrimenti vi ritroverete inceppati.

Il modo più semplice per riprodurlo è quello di eseguire l'indicatore su un simbolo personalizzato e iniziare il ticchettio in esso con una certa frequenza. Man mano che la frequenza aumenta, vedrete la frenata. Tutto ha un senso.

Sì, esattamente così.

 
Алексей Тарабанов:

Renate, è stato piuttosto triste. I tic stanno aspettando che io risolva i miei problemi? Fino ad ora, ho dato per scontato che i tic si generassero da soli, e che o ho tempo o non ce l'ho. Ora si scopre che posso bloccare il sistema.

Le zecche sono sempre state in attesa. Garantiamo di chiamare OnCalculate ad ogni tick.

Mentre nei quattro causava il blocco della GUI, nei cinque è solo un ritardo di un singolo thread che elabora un particolare carattere. Ed era sempre così in cinque. È solo che l'hai visto solo ora

 
Renat Fatkhullin:

L'aggiornamento congelato dell'alieno invisibile dopo la riconnessione è stato risolto e fissato. La ragione era in stati di cache sbagliati dopo la riconnessione.

La versione beta 1946 è disponibile tramite Help -> Check Desktop Updates -> Latest Beta Version.

Aggiornato, mettiamolo alla prova.

La domanda è se il problema attuale era anche legato a casi di caricamento di altri strumenti (timeframe invisibile), intendo indicatori multivaluta e EAs, o questi non sono problemi correlati?

 
Slava:

Le zecche sono sempre state in attesa. Garantiamo di chiamare OnCalculate ad ogni tick.

Se in quarta, congelerebbe la GUI, ma in quinta, è solo un ritardo di un thread separato che elabora un carattere particolare. Ed era sempre così in quinta. È solo che l'hai visto solo ora.

Ci sarà un messaggio nel log del terminale su questa situazione, qualcosa come "l'indicatore è troppo lento"?

?

 
Igor Makanu:

ci sarà un messaggio nel log del terminale su questa situazione, come "l'indicatore è troppo lento"?

?

Nel registro degli esperti
 
Slava:
Nel registro di Expert

Grazie, questo è qualcosa, ma capisco che non può essere determinato programmaticamente che l'indicatore calcola tick che non sono rilevanti e l'indicatore blocca il thread del terminale?

 
Igor Makanu:

Grazie, è qualcosa, ma capisco che non si può determinare programmaticamente che l'indicatore calcola tick che non sono rilevanti e l'indicatore blocca il thread del terminale?

È possibile cercare di determinare.

Se sono minuti, potete confrontare il tempo dell'ultima barra con TimeCurrent(). Se non è M1, potete chiedere iTime(_Symbol,PERIOD_M1,0) e confrontare con TimeCurrent().

Puoi confrontare il prezzo Bid o Last (a seconda del simbolo) con il prezzo Close dell'ultima barra. Potete chiedere direttamente a SymbolInfoTick il simbolo corrente. Oltre al Bid e Last, c'è anche il tick time

Motivazione: