Secuencia de ejecución de Init() y DeInit() - página 18

 
Alexey Kozitsyn:
¿Es decir, usar muletas? ¿Puedo darle un ejemplo?

No se puede añadir un indicador mediante ChartIndicatorAdd() a un gráfico que tenga un símbolo o TF diferente. Se mostrará un error.

https://www.mql5.com/ru/docs/chart_operations/chartindicatoradd

ChartIndicatorAdd

Añade un indicador con el manejador especificado a la ventana del gráfico especificada.El indicador y el gráfico deben dibujarse en el mismo símbolo y marco temporal.

Esta es la restricción ahora. No será en Servicios.
Документация по MQL5: Операции с графиками / ChartIndicatorAdd
Документация по MQL5: Операции с графиками / ChartIndicatorAdd
  • www.mql5.com
Операции с графиками / ChartIndicatorAdd - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Una pequeña propina, casi sobre el tema del subjeto.

Foro sobre trading, sistemas de trading automatizados y pruebas de estrategias de trading

Bichos, errores, preguntas

fxsaber, 2016.09.23 10:48

  1. Fijamos el indicador en un gráfico NONE
    #property indicator_separate_window
    #property indicator_buffers 1
    #property indicator_plots   1
    
    double Buffer[];
    
    int handle = INVALID_HANDLE;
    
    void OnInit()
    {
      ::SetIndexBuffer(0, Buffer, INDICATOR_DATA);
      
      handle = ChartIndicatorGet(0, 1, ChartIndicatorName(0, 1, 0));  
    }
    
    #define  TOSTRING(A) #A + " = " + (string)A + "\n"
    
    int OnCalculate( const int rates_total,
                     const int prev_calculated,
                     const datetime &time[],
                     const double &open[],
                     const double &high[],
                     const double &low[],
                     const double &close[],
                     const long &tick_volume[],
                     const long &volume[],
                     const int &spread[] )
    {
      if (handle != INVALID_HANDLE)
      {
        Buffer[rates_total - 1] = MathRand();
        
        double BufferCopy[];
        
        if (CopyBuffer(handle, 0, 0, 1, BufferCopy) > 0)
          Print(TOSTRING(BufferCopy[0]) + TOSTRING(Buffer[rates_total - 1]));
      }
      
      return(rates_total);
    }
  2. Retirar el indicador del gráfico a mano.
  3. En el registro vemos que el indicador sigue funcionando. Puedes cerrar todos los gráficos en el terminal, pero seguirá ejecutándose. Y no servirá de nada, por supuesto,
    void OnDeinit( const int Reason )
    {
      if (handle != INVALID_HANDLE)  
        IndicatorRelease(handle);
      
      return;
    }
  4. Al reiniciar el terminal se detiene la ejecución del indicador.
  5. ¡Cuántos indicadores pueden ejecutarse así en vacío, y no sabemos nada de ellos! No hay ningún tipo de control.
Sin ninguna queja a los desarrolladores.
 
fxsaber:
Esto es una restricción ahora. No será en Servicios.

No me refería a eso en absoluto. No añadir un indicador de un EA, sino crear un indicador utilizando un EA.

Con respecto a esto:

¿Que los servicios o la capacidad de ejecutar múltiples EAs en un solo gráfico no pueden cubrir completamente las trabas que se están discutiendo?

Si no existe la posibilidad de crear indicadores mediante servicios, no desaparecerá el problema de crear un indicador con datos de un fichero. Si la secuencia OnDeinit() -> OnInit() no se controla. El cambio de TF es una acción del usuario, y la respuesta a esta acción (OnDeit()) se producirá cuando no sea necesario (¿después de OnInit() o quizás incluso después de OnCalculate()?

Es decir, si el indicador registra datos en un archivo y traza una serie de gráficos basada en estos datos, y los datos no se escriben "consecutivamente", no se producirá la visualización correcta de todos los datos.

Pero si el servicio fuera un programa global (como GPT, pero todo el programa) y pudiera crear búferes de indicadores, y los cálculos no fueran interrumpidos por las acciones de los usuarios como el cambio de TFs / el cierre del gráfico - entonces el problema no existiría. Pero mientras tanto, los indicadores están castrados, como siempre.

 
Alexey Kozitsyn:

No me refería a eso en absoluto. No añadir un indicador de un EA, sino crear un indicador utilizando un EA.

No entiendo la terminología.

 
fxsaber:

No entiendo la terminología.

Calcular y mostrar los datos con la escritura en los búferes de los indicadores, no sólo mostrar los datos.
 
Slawa:

Todavía no hay solución para OnChartEvent

¿Cómo que no hay solución? ¿Qué clase de servicio sería sin la posibilidad de acceder al ratón? Y también me gustaría manejar los eventos de los usuarios.
 
Alexey Kozitsyn:
Cálculo y visualización de datos con escritura en los buffers de los indicadores, no sólo visualización de los datos.

Se quejan de que los datos calculados por el indicador no pueden ser transferidos de forma fiable y lógica a otra copia de este indicador durante el cambio del TF.

Esto se puede hacer fácilmente a través de los servicios si el servicio hace la parte del cálculo y el indicador lo muestra.

En todos los demás casos, que no entran dentro de los resaltados en negrita, puedes seguir escribiendo los indicadores como los clásicos.

 
fxsaber:

Se quejan de que los datos calculados por el indicador no pueden ser transferidos de forma fiable y lógica a otra copia de este indicador durante el cambio del TF.

Esto se puede hacer fácilmente a través de los servicios, si el servicio hace la parte del cálculo y el indicador lo muestra.

En todos los demás casos, que no entran dentro de los resaltados en negrita, puede seguir escribiendo los indicadores de la forma clásica.

Ok, bueno, veremos lo que conseguimos. ¿Cuándo será la beta?
 
Alexey Kozitsyn:
Bueno, ya veremos qué pasa. ¿Cuándo es la beta?
Si doy el visto bueno, será esta noche.
 
Nikolai Semko:
¿Cómo que no hay solución? ¿Qué clase de servicio sería sin la posibilidad de acceder al ratón? Y también me gustaría manejar los eventos de los usuarios.

No hay solución significa "aún no se sabe cómo resolver", no "no se hará"

Y no hay ningún problema con los eventos personalizados