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

 
Ciao!
 

#proprietà tester_everytick_calculate può risolvere i problemi?

MQL5: Aggiunta una nuova proprietà per gli indicatori personalizzati #property tester_everytick_calculate. Si usa nel tester delle strategie e permette di abilitare forzatamente il calcolo degli indicatori su ogni tick.

25.Tester: ora, durante i test/ottimizzazione non visivi, tutti gli indicatori utilizzati (standard e personalizzati) sono calcolati solo richiedendo i dati. Fannoeccezione gli indicatori che contengono chiamate della funzioneEventChartCustome usano il gestoreOnTimer. In precedenza, nel tester delle strategie, quando arrivava un qualsiasi tick (anche da un altro simbolo), tutti gli indicatori venivano calcolati incondizionatamente. Questa innovazione ha accelerato notevolmente i test e l'ottimizzazione.

Per forzare il calcolo degli indicatori ad ogni tick, aggiungete la #proprietà tester_everytick_calculate al programma.

Gli indicatori compilati dalle versioni precedenti del compilatore, saranno calcolati come prima - ad ogni tick.
 

È anche sempre raccomandato, se si lavora con un altro timeframe - poi una volta al minuto è necessario ottenere OHLC da questo timeframe (qualsiasi funzione CopyXXXXXX).

Quindi viene fuori - quando si lavora con il tempo di qualcun altro non è necessario usare gli atavismi iXXXXXXXX, ma usare le funzioni CopyXXXXXX.

 
Vladimir Karputov:

È anche sempre raccomandato, se si lavora con un altro timeframe - poi una volta al minuto è necessario ottenere OHLC da questo timeframe (qualsiasi funzione CopyXXXXXX).

Quindi esce - quando si lavora con un altro timeframe non è necessario usare gli atavismi iXXXXXXXX, ma è necessario usare le funzioni CopyXXXXXXXX.

Non è grave!

Perché allora:iHigh(Symbol(),TF,i);

P.S. Tutto funziona in mt4 senza problemi dai primi giorni della sua esistenza, perché non fare lo stesso in mt5, così non ci sarà nessun tamburello? Se funziona in mt4 - allora è possibile farlo funzionare anche in mt5
 
Vitaly Muzichenko:

Non è serio!

Perché allora:iHigh(Symbol(),TF,i);

P.S. In mt4 tutto funziona senza problemi dai primi giorni della sua esistenza, perché non fare lo stesso in mt5, così non ci sarà nessun tamburello? Se funziona in mt4 - significa che è possibile farlo funzionare anche in mt5

Inoltre, è stato sempre raccomandato, se si lavora con un altro timeframe - è necessario ottenere OHLC da questo timeframe una volta al minuto (qualsiasi funzione CopyXXXX). Questo è sempre stato il caso.

 
double high_k = NormalizeDouble(iHigh(Symbol(),TimeFrames, k),DigitsM);
double low_k = NormalizeDouble(iLow(Symbol(),TimeFrames, k),DigitsM);
double open_k = NormalizeDouble(iOpen(Symbol(),TimeFrames, k),DigitsM);
double close_k = NormalizeDouble(iClose(Symbol(),TimeFrames, k),DigitsM);

Prova ad aggiornare le quotazioni prima di farlo tramite RefreshRates.

 
Dmitry Fedorchenko:

Prova ad aggiornare le quotazioni tramite RefreshRates prima.

"RefreshRates" è una funzione inesistente.

 
Vladimir Karputov:

"RefreshRates" è una funzione inesistente.

Sto per
https://www.mql5.com/ru/docs/standardlibrary/tradeclasses/csymbolinfo/csymbolinforefreshrates

C'era un problema simile solo in EA, mi ha aiutato.

 
Farkhat Guzairov:
La versione MQL4 di questo indicatore funziona da più di 2 anni e non sono stati riscontrati problemi/errori del genere.

Nessun CopyXXX vi aiuterà. Questo è un bug di MT5 che è iniziato con la build 30 e non è stato risolto dalla build 44. Leggete le ultime 5-6 paginehttps://www.mql5.com/ru/forum/285631/page29 e non sarete soli.

Новая версия платформы MetaTrader 5 build 1930: Плавающие окна графиков и .Net библиотеки в MQL5
Новая версия платформы MetaTrader 5 build 1930: Плавающие окна графиков и .Net библиотеки в MQL5
  • 2018.11.13
  • www.mql5.com
26 октября 2018 года будет выпущена обновленная версия платформы MetaTrader 5...
 
Farkhat Guzairov:

Buona giornata!

Attualmente sto trasferendo gli indicatori scritti in precedenza da MQL4 a MQL5. Non ho ballato molto e tutto sembra essere a posto, ma....

Ad un certo punto i dati dell'indicatore smettono di aggiornarsi, non sono riuscito a capire esattamente dove fosse l'errore e solo per caso ho notato che iClose/iOpen, ecc. smettono di aggiornarsi, cioè restituiscono lo stesso valore.

La cosa divertente è che anche se ricompilo il codice sorgente l'indicatore non si aggiorna correttamente, ma vedo che esegue le funzioni:

Solo se si aprono le proprietà dell'indicatore e lo si chiude tramite "Ok", i dati vengono aggiornati e visualizzati correttamente, ma fino ad un certo punto che può verificarsi in qualsiasi momento (ma al 100% succede). In questo caso l'indicatore ha smesso di aggiornare i dati al 2018.11.14 00:00, in generale succede dopo qualche tempo regolarmente.

Prima è stato rivelato un altro bug, la funzione iBars(Symbol(),TimeFrames)/Bars(Symbol(),TimeFrames) restituisce un valore zero. Fortunatamente, non è un errore costante, ma si verifica comunque e dobbiamo controllarlo.

Si scopre che MQ smette di supportare MQL4. Questo è fantastico, ma MQL5 avrà tali bug.

Quindi come risolvere il problema di cui sopra?

1) Misurare il tempo di esecuzione di un calcolo OnTick/OnCalculate in microsecondi e stamparlo in log.

In questo modo si può vedere quanto tempo si spende nel calcolo delle zecche. Poi stimate quanti ticchettii a questa velocità potete calcolare al secondo. Probabilmente non troverete più di una dozzina di zecche, e avrete più zecche al secondo.


2) Misura il tempo di ogni OnCalculate sugli indicatori che sono attaccati ai grafici / timeframes, da cui estrai i dati.

Probabilmente c'è una situazione simile. A causa della lentezza dei calcoli, il terminale attende che il simbolo calcolato:timeframe sia sbloccato. Sono gli indicatori lenti, soprattutto su una storia profonda, che portano al congelamento dei payoff dei grafici altrui.


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

 
Renat Fatkhullin:

Sono gli indicatori di frenata, soprattutto sulla storia profonda, che portano al congelamento dei grafici degli altri.

Allora dimmi perché il congelamento succede a me? Ho un congelamento delle uscite in OnTick prima della funzione di interrogazione degli indicatori. Cioè l'aggiornamento di CopyTime da parte di M1 agisce come un trigger che avvia l'altra elaborazione in OnTick, ma prima di CopyTime non ci sono funzioni o interrogazione di indicatori.

E perché non c'erano questi problemi prima della build 30 e da ottobre 2017 tutto funzionava bene?

Motivazione: