Error en MQL5 al trabajar con el acceso a series temporales iClose/iOpen, etc. - página 7

 
Renat Fatkhullin:

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

De este modo, puedes ver el tiempo que tardas en calcular un solo tick. A continuación, calcula cuántos ticks a esta velocidad puedes contar por segundo. Probablemente no será más que una docena de ticks, y se sabe que hay más ticks por segundo.


2) Mida el tiempo de cada OnCalculate en los indicadores que se adjuntan a los gráficos/plazos de los que está extrayendo datos.

Probablemente haya una situación similar allí. 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, lo que lleva a la congelación de los pagos de otros EAs.


A la hora de diseñar los indicadores hay que dar prioridad a los problemas de rendimiento y a los recálculos económicos. De lo contrario, matarás todo lo que te rodea.

Renat, es realmente muy triste. ¿Ahora tiki está esperando que solucione mis problemas? Hasta ahora, asumía que los tics eran autogenerados, y que o tengo tiempo o no lo tengo. Ahora resulta que puedo suspender el sistema.

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

Renate, ha sido bastante triste. ¿Los tics están esperando a que solucione mis problemas? Hasta ahora, asumía que los tics se generaban solos, y que o tenía tiempo o no lo tenía. Ahora resulta que puedo colgar el sistema.

El indicador se ejecuta en cada tic, sin saltos. Hay que controlar la duración de OnCalculate y la frecuencia de los ticks que llegan todo el tiempo. De lo contrario, se producirá un atasco.

La forma más fácil de reproducirlo es ejecutar el indicador en un símbolo personalizado y empezar a marcarlo con una frecuencia determinada. A medida que la frecuencia aumente, verás que se frena. Todo es lógico.

 

¿En qué casos el indicador no puede dibujar su valor? Los buffers se llenan con valores válidos, pero el gráfico del indicador está vacío.... al menos no es viceversa. construye 1940

1944 lo mismo. Debe ser así.

 
fxsaber:

El indicador se ejecuta en cada tick, sin saltos. Es necesario controlar la duración de OnCalculate y la tasa de llegada de ticks todo el tiempo. De lo contrario, se producirá un atasco.

La forma más fácil de reproducirlo es ejecutar el indicador en un símbolo personalizado y empezar a hacer tic-tac en él con una frecuencia determinada. A medida que la frecuencia aumente, verás que se frena. Todo tiene sentido.

Sí, exactamente así.

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

Renate, ha sido bastante triste. ¿Los tics están esperando a que solucione mis problemas? Hasta ahora, asumía que los tics se generaban solos, y que o tenía tiempo o no lo tenía. Ahora resulta que puedo colgar el sistema.

Las garrapatas siempre han estado esperando. Garantizamos la llamada a OnCalculate en cada tic.

Mientras que en los cuatros causaba la congelación de la GUI, en los cincos es sólo un retraso en un hilo individual que procesa un carácter particular. Y siempre fue así en el cinco. Es que sólo lo has visto ahora

 
Renat Fatkhullin:

Se ha solucionado y arreglado la actualización congelada del marco temporal invisible de los alienígenas después de la reconexión. La razón estaba en estados de caché erróneos después de la reconexión.

La versión beta 1946 está disponible a través de Ayuda -> Comprobar actualizaciones del escritorio -> Última versión beta.

Actualizado, vamos a probarlo.

La pregunta es si el problema actual también estaba relacionado con los casos de carga de otras herramientas (marco de tiempo invisible), me refiero a los indicadores multidivisa y EAs, o no son problemas interrelacionados?

 
Slava:

Las garrapatas siempre han estado esperando. Garantizamos la llamada a OnCalculate en cada tic.

Si en la cuarta, se congelaría la GUI, pero en la quinta, es sólo un retraso de un hilo separado que procesa un carácter particular. Y siempre fue así en quinto. Es que sólo lo has visto ahora.

el registro del terminal tendrá un mensaje sobre esta situación, algo así como "el indicador es demasiado lento" ?

?

 
Igor Makanu:

¿el registro del terminal mostrará un mensaje sobre esta situación, como "el indicador es demasiado lento"?

?

En el registro de expertos
 
Slava:
En el registro de expertos

Gracias, algo es algo, pero entiendo que no se puede determinar programáticamente que el indicador calcula ticks que no son relevantes y el indicador cuelga el hilo del terminal?

 
Igor Makanu:

Gracias, algo es algo, pero entiendo que no se puede determinar programáticamente que el indicador calcula ticks que no son relevantes y el indicador cuelga el hilo del terminal?

Es posible tratar de determinar.

Si son minutos, se puede comparar el tiempo de la última barra con TimeCurrent(). Si no es M1, puede pedir iTime(_Symbol,PERIOD_M1,0) y comparar con TimeCurrent().

Puede comparar el precio de compra o de venta (según el símbolo) con el precio de cierre de la última barra. Puede preguntar directamente a SymbolInfoTick por el símbolo actual. Además de la Oferta y la Última, también está la hora de la garrapata