Cambiar el TF es un problema

 
En realidad el problema es que el indicador que dibuja la línea cuando cambia el TF donde el historial aún no está cargado, entonces los datos se añaden al gráfico, y vuelve a calcular los datos, respectivamente los anteriores también se quedan fuera + saltando.
 
Vasyl Nosal:
En realidad, el problema es que el indicador , que dibuja la línea cuando cambia el TF, en el que aún no se ha cargado el historial, calcula los datos, luego se añaden las barras al gráfico, y vuelve a calcular los datos, respectivamente, los anteriores también quedan fuera.

Así que hay un error en la lógica del indicador. Al cargar el historial, la opción ideal del indicador: calcular su estado en el momento de la última barra, que no ha cambiado en el historial y recalcular los datos en la parte actualizada del historial.

En realidad, esta opción no siempre es posible, porque devolver el entorno del indicador en una barra determinada significaría realizar el cálculo desde el principio del historial. Por lo tanto, en los algoritmos complejos del indicador se realiza un recálculo completo del historial al cargar incluso una barra (no confundir con la apertura de una nueva barra).

 
Vasyl Nosal:
En realidad el problema es que el indicador que dibuja la línea en el cambio de TF, en el que aún no se ha cargado el historial, calcula los datos, luego se añaden las barras al gráfico, y vuelve a calcular los datos, respectivamente, los anteriores también quedan + saltados.

En el indicador en OnCalculate() debe hacerse la comprobación:

if(prev_calculated==0)  // значит история изменилась или это первый проход
 
Karputov Vladimir:

El indicador en OnCalculate() necesita comprobar:

Gracias.

Sólo me confundió el hecho de que las alertas me dieran que la historia se estaba cargando a trozos.

Sí. Eso es.

 
Ihor Herasko:

Así que hay un error en la lógica del indicador. Al cargar el historial, la opción ideal del indicador: calcular su estado en el momento de la última barra, que no ha cambiado en el historial y recalcular los datos en la parte actualizada del historial.

En realidad, esta opción no siempre es posible, porque devolver el entorno del indicador en una barra determinada significaría realizar el cálculo desde el principio del historial. Por lo tanto, en los algoritmos complejos del indicador se realiza un recálculo completo del historial al cargar incluso una barra (no confundir con la apertura de una nueva barra).

Así que la única solución viable es sólo...

for(int i=total_de_tasas_prev_calculadas;i>=0;i--)

 
Vasyl Nosal:

Así que la única solución que funciona es...

for(int i=total_de_tasas_prev_calculadas;i>=0;i--)

¿Y si necesito recalcular no sólo la barra actual (por ejemplo la 4)?

for(int i=rates_total-prev_calculated+4;i>=0;i--) 

{ 

if(i>Bars) i=Bars; 
 

Sí, funciona.

Cuando las barras se cargan en trozos, se recalculan en trozos.

El trozo correcto es sólo el último que se carga más a la izquierda jaja.

 
Vasyl Nosal:

Sí, funciona.

Cuando las barras se cargan en trozos, se recalculan en trozos.

El trozo correcto es sólo el último que se carga más a la izquierda jaja.

Es hora de aprender a escribir indicadores.
 
Victor Nikolaev:
Es hora de aprender a escribir indicadores

Enséñame.

Y digo que los desarrolladores deberían hacer ajustes en los primeros cálculos del indicador.

 
Victor Nikolaev:
Es hora de aprender a escribir indicadores

¿Quieres un truco? ¿Adivina qué ha devuelto Alerta?

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(prev_calculated!=0) Alert(prev_calculated," M:",Period());
return(rates_total);
  }

 
Vasyl Nosal:

¿Quieres un truco? ¿Adivina qué ha devuelto Alerta?

No utilizo las alertas en los indicadores. Prever un recálculo completo si se produce una subcarga del historial. Es fácil de controlar.

Razón de la queja: