Error en MQL5 al trabajar con el acceso a series temporales iClose/iOpen, etc.

 
¡Hola!
 

#La propiedad tester_everytick_calculate puede resolver problemas?

MQL5: Añadida nueva propiedad para los indicadores personalizados #property tester_everytick_calculate. Se utiliza en el probador de estrategias y permite habilitar forzosamente el cálculo de los indicadores en cada tick.

25.Tester: Ahora, durante la prueba/optimización no visual, todos los indicadores utilizados (estándar y personalizados) se calculan sólo solicitando datos. Una excepción son los indicadores que contienen llamadas de la funciónEventChartCustomy utilizan el manejadorOnTimer. Anteriormente, en el probador de estrategias, cuando llegaba cualquier tick (incluso de otro símbolo), todos los indicadores se calculaban incondicionalmente. Esta innovación ha acelerado enormemente las pruebas y la optimización.

Para forzar el cálculo de los indicadores en cada tick, añada la #propiedad tester_everytick_calculate al programa.

Los indicadores compilados por las versiones anteriores del compilador, se calcularán como antes - en cada tick.
 

También se recomienda siempre, si usted trabaja con otro marco de tiempo - entonces una vez por minuto que necesita para obtener OHLC de este marco de tiempo (cualquier función CopyXXXXXX).

De ahí se desprende que, cuando se trabaja con el marco temporal de otra persona, no es necesario utilizar los atavismos de iXXXXXX, sino las funciones de CopyXXXXXX.

 
Vladimir Karputov:

También se recomienda siempre, si usted trabaja con otro marco de tiempo - entonces una vez por minuto que necesita para obtener OHLC de este marco de tiempo (cualquier función CopyXXXXXX).

Por lo tanto, cuando se trabaja con otro marco temporal, no es necesario utilizar los atavismos iXXXXXX, sino que hay que utilizar las funciones CopyXXXXXX.

¡No es serio!

Por qué entonces:iHigh(Symbol(),TF,i);

P.D. Todo funciona en mt4 sin problemas desde los primeros días de su existencia, ¿por qué no hacer lo mismo en mt5, para que no haya ninguna pandereta? Si funciona en mt4 - entonces es posible hacerlo funcionar en mt5 también
 
Vitaly Muzichenko:

¡No es serio!

Por qué entonces:iHigh(Symbol(),TF,i);

P.D. En mt4 todo funciona sin problemas desde los primeros días de su existencia, ¿por qué no hacer lo mismo en mt5, para que no haya pandereta? Si funciona en mt4 - significa que es posible hacerlo funcionar en mt5 también

Además, siempre se recomendó, si usted trabaja con otro marco de tiempo - usted tiene que obtener OHLC de este marco de tiempo una vez por minuto (cualquier función CopyXXXX). Esto siempre ha sido así.

 
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);

Intente actualizar las cotizaciones antes de hacerlo a través de RefreshRates.

 
Dmitry Fedorchenko:

Pruebe a actualizar las cotizaciones a través de RefreshRates de antemano.

"RefreshRates" es una función inexistente.

 
Vladimir Karputov:

"RefreshRates" es una función inexistente.

Estoy a punto de
https://www.mql5.com/ru/docs/standardlibrary/tradeclasses/csymbolinfo/csymbolinforefreshrates

Hubo un problema similar sólo que en EA, me ayudó.

 
Farkhat Guzairov:
La versión MQL4 de este indicador lleva más de 2 años funcionando y no se han encontrado estos problemas/errores.

Ningún CopyXXX le ayudará. Este es un error de MT5 que comenzó con la build 30 y no ha sido corregido desde la build 44. Lee las últimas 5-6 páginas dehttps://www.mql5.com/ru/forum/285631/page29 y no estarás solo.

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

¡Buenos días!

Actualmente estoy transfiriendo los indicadores escritos anteriormente de MQL4 a MQL5. No he bailado mucho y todo parece estar bien, pero....

En algún momento los datos del indicador dejan de actualizarse, no pude averiguar exactamente dónde estaba el error y sólo por casualidad me di cuenta de que iClose/iOpen, etc. dejan de actualizarse, es decir, devuelven el mismo valor.

Lo curioso es que aunque recompile el código fuente el indicador no se actualiza correctamente, pero veo que ejecuta funciones:

Solo si abres las propiedades del indicador y lo cierras mediante "Ok", los datos se actualizan y se muestran correctamente, pero hasta cierto punto eso puede ocurrir en cualquier momento (pero al 100% ocurre). En este caso el indicador dejó de actualizar los datos a las 2018.11.14 00:00, en general sucede después de algún tiempo regularmente.

Anteriormente se reveló otro error, la función iBars(Symbol(),TimeFrames)/Bars(Symbol(),TimeFrames) devuelve un valor cero. Afortunadamente, no es un error constante, pero sigue ocurriendo y hay que controlarlo.

Resulta que MQ deja de dar soporte a MQL4. Esto es genial, pero MQL5 tendrá esos fallos.

Entonces, ¿cómo resolver el problema anterior?

1) Medir el tiempo de ejecución de un cálculo OnTick/OnCalculate en microsegundos e imprimirlo en el registro.

De este modo, podrá ver el tiempo que dedica al cálculo de las garrapatas. A continuación, calcula cuántos ticks a esta velocidad puedes calcular por segundo. Es probable que no encuentres más de una docena de garrapatas, y tendrás más garrapatas por segundo.


2) Medir el tiempo de cada OnCalculate en los indicadores que se adjuntan a los gráficos / plazos, de los que se extraen los datos.

Probablemente exista una situación similar. Debido a la lentitud de los cálculos, el terminal espera hasta que se desbloquee el símbolo calculado:timeframe. Son los indicadores lentos, especialmente en una historia profunda, los que llevan a la congelación de los pagos de las cartas de los demás.


Al elaborar los indicadores hay que poner en primer lugar los problemas de rendimiento y los recálculos económicos. De lo contrario, matarás todo lo que te rodea.

 
Renat Fatkhullin:

Son los indicadores de frenado, especialmente en la historia profunda, los que provocan la congelación de los gráficos de los demás.

Entonces dime por qué me pasa la congelación. Tengo un congelamiento de salidas en OnTick antes de la función de interrogación de indicadores. Es decir, la actualización de CopyTime por M1 actúa como un disparador que inicia el otro procesamiento en OnTick, pero antes de CopyTime no hay funciones o interrogación de indicador.

Y por qué no había esos problemas antes de la build 30 y todo funcionaba bien desde octubre de 2017?

Razón de la queja: