- Preguntas de los principiantes MQL4 MT4 MetaTrader 4
- Preguntas de los principiantes MQL5 MT5 MetaTrader 5
- Añadir un efecto de volumen a las líneas indicadoras
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).
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) // значит история изменилась или это первый проход
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--)
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.
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.
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); }
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Usted acepta la política del sitio web y las condiciones de uso