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

 
Por ejemplo, dado que los desarrolladores son claramente profesionales, expertos en arquitectura y optimización de la velocidad, no debería ser difícil para ellos escribir una función de este tipo de forma correcta e incluirla en la biblioteca estándar, por lo que los usuarios agradecidos estarán sumamente agradecidos.
 
Renat Fatkhullin:

Piense en dónde estarán disponibles los datos (cuanto más se garantice), cuando sus indicadores sean tremendamente lentos recibiendo/poniendo 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.

Comienza midiendo 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.

Dejemos sólo un tick (una nueva barra) para el nuevo tipo de procesamiento de datos por parte del indicador en la versión propuesta. Aquellos que gusten de los recálculos múltiples de las barras cero y del grial en la barra cero deberían disfrutar de la versión existente. Añadir una nueva función a OnInit - iOnCalculate - un asa a una de las funciones TF / OnCalculate en el indicador, como iCustom, pero es ligeramente más cerca, los búferes del indicador en OnCalculate deben estar vinculados a la manija iOnCalculate. En las funciones del indicador como OnCalculate, envía sólo una nueva barra de ticks. Para el terminal no cambiará nada, la lógica básica de OnCalculate será la misma, se añadirá el cuerpo principal del indicador, por ejemplo OnMain. (Ahora todo lo hace el indicador(es), unido al indicador principal como recurso y llamado desde él en una nueva barra).

 
transcendreamer:


No siempre se necesita supervelocidad, la usabilidad también es muy importante, hoy en día escribir indicadores multidivisa es como "poner el sol a mano", incluso en MT4 era más fácil, porque siempre podías conseguirlo a través de i-funciones, aunque fuera lentamente, pero podías conseguirlo, pero en MT5 puedes conseguirlo o no, y sigues necesitando hacer un código especial tú mismo.

Dejemos de lado las teorías.

Sólo tiene que enviar un ejemplo para que lo reproduzcamos y veremos qué horror hay en su caso. Hasta ahora parece un desprecio total por el rendimiento, ocultando los indicadores de retardo del asesino y tratando de hacer sombra.

 
Renat Fatkhullin:

Dejemos de lado las teorías.

Sólo tienes que aportar un ejemplo para reproducirlo y veremos qué horror rodea tu caso. Hasta ahora parece un desprecio total por el rendimiento, ocultando los indicadores de retardo del asesino y tratando de poner una sombra sobre él.


El ejemplo en el archivo adjunto, no es el código terminado, está incompleto en algunos lugares, pero es posible ejecutarlo, también adjunto una plantilla para mayor comodidad,

Te lo digo de inmediato, no soy programador, seguro que el código no es óptimo, soy un economista humanitario, realmente sufrí en MT5, sufrí menos en MT4,

Realmente quiero una función sencilla y fiable que construya un array sincronizado como el descrito anteriormente https://www.mql5.com/ru/forum/289897/page2#comment_9363454.

No me quejo, no pido escribir mi indicador, sólo quiero (no sólo yo por cierto) una función estándar agradable.


EDIT: corregido los archivos adjuntos

Баг MQL5 при работе c доступом к таймсериям iClose/iOpen и т.д.
Баг MQL5 при работе c доступом к таймсериям iClose/iOpen и т.д.
  • 2018.11.14
  • www.mql5.com
Общее обсуждение: Баг MQL5 при работе c доступом к таймсериям iClose/iOpen и т.д.
Archivos adjuntos:
 
Renat Fatkhullin:

Haz lo que te he aconsejado, por favor.

De lo contrario, se necesitan materiales completos para una reproducción del 100%.

Su actitud ante los informes de errores es extraña. No es que me paguen para demostrar nada. Describí la situación lo mejor que pude.

No soy el único con este problema. Este problema se produjo después de su 30ª actualización, pero aun así insinúa que soy un idiota y que la culpa la tienen unos indicadores lentos.

¿No fueron lentos durante un año antes de eso?

Aquí hay un ejemplo de código que se cuelga después de 25 minutos en M30:

//+------------------------------------------------------------------+
//|                                                      Feezzzz.mq5 |
//|                                   Copyright 2018, Dray Stanislav |
//|                               https://www.mql5.com/ru/users/fan9 |
//+------------------------------------------------------------------+
#property copyright "Copyright 2018, Dray Stanislav"
#property link      "https://www.mql5.com/ru/users/fan9"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
    datetime CM1_T[1];
    if(CopyTime(_Symbol,PERIOD_M1,0,1,CM1_T)==-1){
      Comment("\n\n CopyTime return -1");
      return;
    }
    Comment("\n\n CopyTime : "+TimeToString(CM1_T[0],TIME_DATE | TIME_SECONDS));   
  }
//+------------------------------------------------------------------+
//| Trade function                                                   |
//+------------------------------------------------------------------+
void OnTrade()
  {
//---
   
  }
//+------------------------------------------------------------------+

Y aquí está el resultado:

1

 
transcendreamer:


El ejemplo en el archivo adjunto, aún no es código completo, no está escrito en algunos lugares, pero es posible ejecutarlo, también adjunto una plantilla para mayor comodidad,

Puedo prometer que no soy un programador, seguro que el código no es óptimo, soy un economista humanitario, realmente sufro en MT5, sufrí menos en MT4,

Realmente quiero una función sencilla y fiable que construya un array sincronizado como el descrito anteriormente https://www.mql5.com/ru/forum/289897/page2#comment_9363454.

No me quejo, no busco problemas,

No me quejo, y no pido que escriban mi indicador por mí, sólo quiero (no sólo yo por cierto) una función estándar agradable.


EDIT: corregido los archivos adjuntos

Gracias, lo comprobaremos ahora.
 
Stanislav Dray:

Su actitud ante los informes de errores es extraña. No es que me paguen para demostrar nada. He descrito la situación lo mejor que he podido.

Lo que he escrito antes en este hilo no se puede considerar un informe de error de ninguna manera.

Todo siguió la pauta de las quejas sin ningún detalle técnico. Sólo después de mis indagaciones empezaron a surgir los detalles.

 
Stanislav Dray:

Su actitud ante los informes de errores es extraña. No es que me paguen para demostrar nada. He descrito la situación lo mejor que he podido.

El problema no es sólo mío, el problema apareció después de tu 30ª actualización, pero aun así insinúas que soy un tonto y culpas a unos indicadores retrasados.

¿No fueron lentos durante un año antes de eso?

Aquí hay un ejemplo de código que se cuelga después de 25 minutos en M30:

Y aquí está el resultado:


Subido a

2018.11.14 17:33:32.570 Experts expert Feezzzz (USDCHF,M30) loaded successfully

Ahora es 18.10 Todo funciona.


 
transcendreamer:


Se adjunta el ejemplo, aún no es código completo, está infravalorado en algunas partes, pero se puede ejecutar, también adjunto una plantilla para mayor comodidad,

Te mostraré el código y el trabajo de inmediato:

  1. Las funciones CopyXXX de los indicadores no esperan a que se descarguen todos los datos de forma sincrónica, sino que dan lo que está disponible. De lo contrario, los indicadores habrían congelado todo por completo.

  2. Aparentemente hay un problema con el seguimiento, si no se sincronizaron todos los datos la primera vez.
    Es necesario cambiar a un modo suave "esperaré cuidadosamente a que se descargue con éxito". Por ejemplo, no se llama a OnCalculate.

  3. Lo malo es que una inicialización global con la máxima carga se coloca en OnInit donde el indicador cuenta y espera durante mucho tiempo.
    En este caso, la actualización de los gráficos de este símbolo se bloquea y muchos otros participantes tienen que esperar y no recibir datos frescos. El indicador no debe tomar recursos durante mucho tiempo. Es mejor estirar la larga inicialización paso a paso/inicialización de símbolos en OnCalculate, contando paso a paso.

  4. He hecho que este indicador bombee unos 800 MB de datos históricos a través de la red para su sincronización

  5. El indicador tiene 512 líneas de dibujo para las que se asigna memoria explícitamente. Esto es extremadamente caro. Sólo se utilizan 100 líneas.

  6. El código es poco legible


 
Stanislav Dray:

Su actitud ante los informes de errores es extraña. No es que me paguen para demostrar nada. He descrito la situación lo mejor que he podido.

El problema no es sólo mío, el problema apareció después de tu 30ª actualización, pero aun así insinúas que soy un tonto y culpas a unos indicadores retrasados.

¿No fueron lentos durante un año antes de eso?

Aquí hay un ejemplo de código que se cuelga después de 25 minutos en M30:

Y aquí está el resultado:

Puse el código a trabajar. Hasta aquí todo bien.

Un archivo sin cuerpo, por cierto.