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

 
Stanislav Dray:

Entonces dígame por qué la congelación ocurre en mi caso. Tengo la congelación de los datos en OnTick antes de la función de sondeo del indicador, es decir, la actualización de CopyTime por M1 actúa como un disparador para iniciar otro procesamiento en OnTick, y antes de CopyTime no hay funciones o sondeo del indicador.

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

Haz lo que te he aconsejado, por favor.

Por lo demás, se necesitan materiales completos para una reproducción del 100%.
 

¿Por qué los desarrolladores no escriben una función que garantice una matriz de datos sincronizada (entre varias herramientas) para que la gente no se moleste y pierda su tiempo en vano?

después de todo MT5 se posiciona como una herramienta fresca y práctica, ¿verdad?

con muchas ganas...

 
Vladimir Karputov:

Además, siempre se ha recomendado que si se trabaja con el marco temporal de otra persona, se obtenga el OHLC de ese marco temporal una vez por minuto (cualquier función CopyXXXX). Esto siempre ha sido así.

Slava dijo una vez cada dos minutos. Me da pereza buscarlo, pero lo recuerdo exactamente.

 
transcendreamer:

¿Por qué los desarrolladores no escriben una función que garantice una matriz de datos sincronizada (entre varias herramientas) para que la gente no se moleste y pierda su tiempo?

después de todo MT5 se posiciona como una herramienta fresca y práctica, ¿verdad?

estamos esperando...

Sí. Constructor OnCalculate para el número de símbolos y plazos requeridos. O, además de OnCalculate, introducir un nuevo objeto, por ejemplo "MainCalculate" para un máximo de 255 OnCalculate, en el que viven los objetos OnCalculate - quien no lo necesita, utiliza el antiguo OnCalculate, quien necesita mtf y diferentes símbolos utiliza "MainCalculate". El primer y el último tick de la barra es el mismo para todos los símbolos y los marcos temporales correspondientes. Dado que OnCalculate ya se ha desarrollado y establecido, es lógico que todas las llamadas a símbolos y plazos de terceros se emitan a través de la agregación de OnCalculate sin que haya otras funciones que medien hacia los plazos y los símbolos.

 

Piensa en que los datos (especialmente los garantizados) estarán disponibles cuando tus indicadores sean insoportablemente lentos, tardando cientos de milisegundos o incluso segundos en recibir/poner los ticks por tick. Como resultado, ninguna CPU es suficiente en el tiempo para procesar los ticks, lo que se traduce en un déficit acumulativo y el correspondiente estancamiento en el historial del gráfico.

Cuando se pide "garantía de dar", lo más probable es que sea una petición de "no quiero saber nada, quiero seguir escribiendo como quiero, no quiero pensar en el rendimiento y los cierres, sólo dar"...


Cuando tengas millones de barras a tu disposición, piensa en el rendimiento de tus indicadores y los de los demás. Un indicador mal escrito y caro puede ralentizar fácilmente la actualización de sus gráficos de símbolos.

Para empezar, empieza a medir el tiempo de respuesta de OnCalculate en microsegundos. A continuación, divida 1 segundo por el tiempo medio de respuesta de los ticks para obtener el desglose máximo del indicador en ticks por segundo.

Esto es inmediatamente aleccionador.

 
Artyom Trishkin:

Cada dos minutos, dijo Slava. Me da pereza buscarlo, pero lo recuerdo exactamente.

Lo recuerdo, pero siempre uso un intervalo de 1 minuto. Así es más fiable.

 
Farkhat Guzairov:

Perdona, pero en este caso la profundidad de la historia en el marco temporal M15 era de 120 barras y qué, ¿ya es crítica para MQL5?

No ha proporcionado ningún material reproducible.

He explicadopor qué las funciones de acceso a los datos de otras personas serán retrasadas cuando haya indicadores de retraso en sus símbolos. Estás hablando de tu caso particular de llamada, ignorando por completo la presencia de otros indicadores en los gráficos. Y son ellos los que deberían haber empezado, sobre todo porque yo escribo claramente sobre ello.

No hagas demagogia y afirmaciones comparativas con total falta de hechos técnicos y listas de indictores con expertos.

Dame el código para reproducirlo, por favor.

 
Farkhat Guzairov:

***

¿Y cómo se reproduce? Por favor, dame los datos para la reproducción.

 
Farkhat Guzairov:

Por supuesto no puedo poner todo el código aquí, pero ya he señalado la parte en la que se produce el problema, así que lo haré de nuevo:

O todo el código o no digas nada. Sin el código completo, es sólo un montón de aire.

 
Renat Fatkhullin:

Piensa en dónde estarán disponibles los datos (cuanto más garantizados), cuando tus indicadores sean insoportablemente lentos recibiendo/aplicando ticks, gastando cientos de milisegundos o incluso segundos para un tick. Como resultado, ninguna CPU es suficiente en el tiempo para procesar los ticks, lo que se traduce en un déficit acumulativo y el correspondiente estancamiento en el historial del gráfico.

Cuando se pide "garantía de dar", lo más probable es que sea una petición de "no quiero saber nada, quiero seguir escribiendo como quiero, no quiero pensar en el rendimiento y los cierres, sólo dar"...


Cuando tengas millones de barras a tu disposición, piensa en el rendimiento de tus indicadores y los de los demás. Un indicador mal escrito y costoso puede fácilmente paralizar la actualización del gráfico de su símbolo.

Comience por medir el tiempo de respuesta de OnCalculate en microsegundos. A continuación, divida 1 segundo por el tiempo medio de respuesta de los ticks para obtener el rendimiento máximo de los ticks del indicador en ticks por segundo.

Esto es inmediatamente aleccionador.


No siempre se necesita la supervelocidad, la usabilidad es muy importante, hoy en día el proceso de escribir indicadores multidivisa es como el "atardecer a mano", incluso en MT4 era más fácil, porque allí siempre se puede conseguir a través de i-funciones, aunque sea lentamente, pero se puede conseguir, pero en MT5 los datos están o no están, y necesitas crear un código especial por ti mismo.


Además, hay que tener en cuenta que no todos los usuarios son programadores de alto nivel, algunas personas sólo necesitan una herramienta cómoda y fiable, aunque no sea supersónica, y esa velocidad no suele ser necesaria para los sistemas de cartera, y el máximo rendimiento no es crítico en este caso, lo importante es que funcione de forma garantizada y fácil, de hecho, este es el factor para hacer el producto más popular y accesible.


La aparición de las funciones i en mt5 ha mejorado algo la situación, pero no ha resuelto el problema, no hay posibilidad de conseguir de forma fácil y sencilla una matriz sincronizada para varios instrumentos, quizás no sea necesario para todo el mundo, quizás ni siquiera sea una prioridad, lo puedo entender, pero sin embargo existe esa tarea.


Función: GetSyncData

Entrada: lista de símbolos, marco temporal, rango de barras y/o rango de fechas

Salida: array con elementos de MqlRates para que los índices de todos los símbolos correspondan al mismo tiempo