Errores, fallos, preguntas - página 595

 
-Alexey-:
Intente transferir a C - el error se encontrará solo. Y en general - con tales proyectos es la única manera de escribir, si no quieres problemas en el futuro. Desgraciadamente, yo mismo lo he entendido demasiado tarde y ahora lo reescribo :).
Probablemente estudiaré C++ en un futuro próximo. Durante los últimos seis meses mi cabeza ya está llena: MQL4, MQL5, HTML, CSS, XML. Y ahora también estoy estudiando JavaScript. Todavía no tengo suficiente espacio y tiempo para C++, aunque realmente quiero hacerlo)).
 

Tenemos un indicador que se ejecuta en TF M15, en el código el indicador solicita la serie temporal MqlRates de TF M1.

El indicador no se pone en marcha de inmediato, ya que los datos M1 no están listos y no es posible cargarlos durante la primera ejecución.

Como resultado tenemos un pase falso y el indicador ya no accede a los datos, pensando que ya están calculados y no es necesario recalcularlos.

Ahora estoy ejecutando el indicador de dos maneras:

  1. Arranco el indicador en M15, borro el indicador y lo vuelvo a arrancar (funciona).
  2. Antes de ejecutar el indicador en M15 abro un gráfico en M1, ejecuto el indicador en M15 (todo funciona la primera vez).

De ahí la pregunta: ¿cómo automatizar la comprobación y la carga correctas de los datos necesarios para otra TF?

 
Urain:

De ahí la pregunta: ¿cómo automatizar la comprobación y la carga de los datos necesarios de la otra TF?

En una situación similar, controlo el proceso de inicialización en OnCalculate. Si hay un error durante la inicialización, entonces devuelvo prev_calculated=0, y así sucesivamente hasta que todo se cuente correctamente.
 
Lizar:
En una situación similar, controlo el proceso de inicialización en OnCalculate. Si hay un error durante la inicialización, entonces devuelvo prev_calculated=0 y sigo haciéndolo hasta que todo esté calculado correctamente.

La idea es buena, aunque no se puede asignar nada a prev_calculado, la variable está declarada como const, pero entiendo que se puede tener otra variable similar.

Queda una duda: si no hay datos, ¿qué debo hacer?

Entiendo que la solicitud de datos en sí no lleva a la descarga o carga de la base de datos local, y este es exactamente el problema.

 
Urain:

La idea es buena, aunque no puedes asignar nada a prev_calculado, la variable está declarada como const, pero te he entendido, puedes tener otra variable similar.

No se trata de la asignación, sino del número devuelto por OnCalculated. Si sus datos no están listos, devolverá 0 desde OnCalculated.
Mire los ejemplos de BarsCalculated. Así es como debe comprobarlo.

Queda una pregunta: si no hay datos, ¿qué hay que hacer?

Si no hay datos y no aparecen, entonces no hay mucho que hacer.
Si quieres, puedes esperar y calcular los buffers por temporizador.
 
sergeev:

Si sus datos no están listos, devolverá 0 desde OnCalculated.
Mira los ejemplos de BarsCalculated.

Si no los tienes y no aparecen, entonces no hay mucho que hacer.
Si lo desea, puede llamar a los búferes de espera y de cálculo por temporizador.

No sirve de nada, sólo descargar el indicador y reiniciarlo, en este caso los datos ya están ahí por alguna razón.

O bien, abra un gráfico con la TF M1 requerida, entonces los datos del gráfico M15 adyacente en la solicitud M1 estarán listos inmediatamente.

 
Urain:

No sirve de nada, sólo descargar el indicador y reiniciarlo, en este caso los datos ya están ahí por alguna razón.

O bien, abra un gráfico con el TF requerido, entonces los datos del gráfico adyacente estarán listos de inmediato.

Hoy he pasado medio día con los índices. Había multidivisas/multihorarios.

El problema de no mostrar es que se intenta tomar un valor de una barra que simplemente no existe en este TF.

Así que hay que comprobar antes de tomar una barra - SeriesInfoInteger.
No es necesario descargar. De todos modos, no se puede descargar la parte de cálculo (hoy mismo he sacado el tema a colación).
 
sergeev:

Hoy he estado trabajando con los índices durante medio día. Había multidivisas/multihorarios.

El problema de la no visualización es que intenta tomar el valor de la barra, que no existe en este TF.

Así que hay que comprobar antes de tomar una barra - SeriesInfoInteger.

No es necesario descargar. De todas formas no se puede descargar la parte de cálculo (hoy mismo he sacado un tema sobre esto).

Mimeo, tengo una comprobación, encuentro la primera fecha en el TF M1 y el cálculo de las barras M15 comienza a partir de esta fecha. TF se establece como PERIOD_M1

   timestart=(datetime)SeriesInfoInteger(_Symbol,TF,SERIES_FIRSTDATE);
   for(int i=prev>0?prev-1:0;i<rates_total-1;i++)
     {
      if(time[i]>timestart)
        {
         ... расчёт
        }
     }
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы графиков / Периоды графиков
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы графиков / Периоды графиков
  • www.mql5.com
Стандартные константы, перечисления и структуры / Константы графиков / Периоды графиков - Документация по MQL5
 
Urain:

1. la idea es buena, aunque no se puede asignar nada a prev_calculado, la variable está declarada como const, pero entiendo que se puede tener otra variable similar.

2. queda una pregunta, y si no hay datos, ¿qué debemos hacer?

3. Entiendo que la solicitud de datos en sí no hace que los datos se descarguen o carguen desde la base de datos local, y este es exactamente el problema.

  1. Me refería a que desdeOnCalculate devuelve 0, entonces prev_calculado=0;
  2. He puesto el contador de reinicializaciones. En el desbordamiento, descargo el indicador.
  3. No he tenido problemas con SoruXXX. Si hay una historia local, todo cuenta desde la segunda o tercera vez, si no desde la primera. En el Campeonato, el "espía" utilizado por el Asesor Experto cuenta sólo con el historial de un minuto, funciona en H1. Y así con 9 pares. Si no hay ninguna historia local, el punto 2 funcionará. Pero, por lo que recuerdo, el historial se descargaba del servidor.
 
Urain:

Entiendo que la solicitud de datos en sí no provoca la descarga o carga de datos desde la base de datos local, y este es exactamente el problema.

De la ayuda de CopyXXXX:

Cuando se solicitan datos a un Asesor Experto o a un script, se iniciará la descarga desde el servidor, si el terminal no tiene estos datos localmente, o se iniciará la construcción de las series temporales requeridas, si los datos pueden ser construidos desde el historial local, pero aún no están listos. La función devolverá la cantidad de datos que estará lista cuando expire el tiempo de espera, pero el historial seguirá descargándose y la siguiente petición similar devolverá más datos.

Estamos hablando sólo de Asesores Expertos y scripts. ¿No se aplica esto a los indicadores?
Razón de la queja: