¿Por qué los indicadores (líneas, flechas, histogramas) parpadean en el terminal MT5? - página 2

 

Intente imprimir prev_calculado al principio de OnCalculate.

Y comparar con algún indicador estándar - si parpadea.

 
Andrey Khatimlianskii: Intente imprimir prev_calculado al principio de OnCalculate. Y compáralo con algún indicador estándar - es intermitente.
Se han añadido dos variables estáticas a la función OnCalculate() para comparar los valores actuales con los anteriores:

static int last_rates_total=0; // valor anterior "tamaño de la serie temporal de entrada en el momento anterior
static int last_prev_calculated=0; // valor anterior "barras procesadas en la llamada anterior

y el código de verificación con la salida al diario

//+------------------------------------------------------------------+
//| Custom indicator iteration function
//+------------------------------------------------------------------+
int OnCalculate (const int rates_total,      // размер входных таймсерий 
                 const int prev_calculated,  // обработано баров на предыдущем вызове 
...

{
   int N=rates_total-prev_calculated; if (N>MAX_PERIOD) N-=MAX_PERIOD;

   static int last_rates_total=0;     // размер входных таймсерий 
   static int last_prev_calculated=0; // обработано баров на предыдущем вызове 
   if (rates_total!=last_rates_total || prev_calculated!=last_prev_calculated) {
      Print("N=", N,  ", rates_total=", rates_total, ", prev_calculated=", prev_calculated);
      last_rates_total=rates_total; last_prev_calculated=prev_calculated;
   }

   for (int i=N; i>0 && !IsStopped(); i--) {
...
   }
   aUP[0]=EMPTY_VALUE; aDN[0]=EMPTY_VALUE;
   return(rates_total);
}

Inicié el indicador AOM en el minuto y obtuve este informe

FH      0       12:38:02.271    AOM (Si-6.17,M1)        N=41934, rates_total=41969, prev_calculated=0
FN      0       12:38:02.275    AOM (Si-6.17,M1)        N=0, rates_total=41969, prev_calculated=41969
DE      0       12:38:51.845    AOM (Si-6.17,M1)        N=1, rates_total=41970, prev_calculated=41969
GH      0       12:38:51.845    AOM (Si-6.17,M1)        N=0, rates_total=41970, prev_calculated=41970
PO      0       12:39:51.207    AOM (Si-6.17,M1)        N=1, rates_total=41971, prev_calculated=41970
EE      0       12:39:51.215    AOM (Si-6.17,M1)        N=0, rates_total=41971, prev_calculated=41971
MH      0       12:40:52.423    AOM (Si-6.17,M1)        N=1, rates_total=41972, prev_calculated=41971
IO      0       12:40:52.700    AOM (Si-6.17,M1)        N=0, rates_total=41972, prev_calculated=41972
CR      0       12:41:51.214    AOM (Si-6.17,M1)        N=1, rates_total=41973, prev_calculated=41972
OH      0       12:41:51.214    AOM (Si-6.17,M1)        N=0, rates_total=41973, prev_calculated=41973
RO      0       12:42:51.207    AOM (Si-6.17,M1)        N=1, rates_total=41974, prev_calculated=41973
HR      0       12:42:51.207    AOM (Si-6.17,M1)        N=0, rates_total=41974, prev_calculated=41974
NI      0       12:43:51.439    AOM (Si-6.17,M1)        N=1, rates_total=41975, prev_calculated=41974
RO      0       12:43:51.446    AOM (Si-6.17,M1)        N=0, rates_total=41975, prev_calculated=41975
RR      0       12:44:51.373    AOM (Si-6.17,M1)        N=1, rates_total=41976, prev_calculated=41975
DI      0       12:44:51.373    AOM (Si-6.17,M1)        N=0, rates_total=41976, prev_calculated=41976
ML      0       12:45:51.449    AOM (Si-6.17,M1)        N=1, rates_total=41977, prev_calculated=41976
GR      0       12:45:51.902    AOM (Si-6.17,M1)        N=0, rates_total=41977, prev_calculated=41977
II      0       12:46:51.541    AOM (Si-6.17,M1)        N=1, rates_total=41978, prev_calculated=41977
GL      0       12:46:51.541    AOM (Si-6.17,M1)        N=0, rates_total=41978, prev_calculated=41978
PS      0       12:47:51.286    AOM (Si-6.17,M1)        N=1, rates_total=41979, prev_calculated=41978
PI      0       12:47:51.303    AOM (Si-6.17,M1)        N=0, rates_total=41979, prev_calculated=41979
QL      0       12:48:51.395    AOM (Si-6.17,M1)        N=1, rates_total=41980, prev_calculated=41979
IS      0       12:48:51.408    AOM (Si-6.17,M1)        N=0, rates_total=41980, prev_calculated=41980
DF      0       12:49:51.790    AOM (Si-6.17,M1)        N=1, rates_total=41981, prev_calculated=41980
PL      0       12:49:51.790    AOM (Si-6.17,M1)        N=0, rates_total=41981, prev_calculated=41981

No hay nada inesperado, hay un proceso normal de procesamiento de sólo los nuevos bares que llegan.



 
Eugene Myzrov:
Se han añadido dos variables estáticas a OnCalculate() para comparar los valores actuales con los anteriores:

Nada inesperado, sólo hay un proceso normal de gestión de los nuevos bares que llegan.

¿Los indicadores de la entrega estándar son intermitentes?
 
Andrey Khatimlianskii: ¿Los indicadores de la entrega estándar parpadean?

No, puse un par de indicadores estándar "Media móvil", "Oscilador impresionante" en el gráfico. Observado. No, no he notado ningún parpadeo ni desaparición de valores en la"Ventana de datos".

 
Eugene Myzrov:

No, puse un par de indicadores estándar "Media móvil", "Oscilador impresionante" en el gráfico. Observado. No, no he notado ningún parpadeo ni desaparición de valores en la"Ventana de datos".

Me refiero a los indicadores que están en la fuente (mq5).

Si no parpadean, el problema está obviamente en su código. Simplifícalo hasta que deje de parpadear. O viceversa: perfeccione el código estándar a su estado, hasta que parpadee.

 
Es una característica de MT5, en mi opinión.
 
Stanislav Korotky: Es una característica de MT5, en mi opinión.

¿Así que hay que aceptarlo, darlo por hecho y dejar de buscar la causa?


 
Andrey Khatimlianskii: Me refiero a los indicadores que están en el código fuente (mq5). Si no parpadean, el problema está obviamente en su código. Simplifícalo hasta que deje de parpadear. O viceversa: perfeccione el código estándar a su estado, hasta que parpadee.
Pero ya he simplificado el código hasta el punto de parpadear. Bien, intentaré ir en sentido contrario.


Por cierto, no he encontrado una "envoltura" universal para la función OnCalculate(), ni siquiera entre los indicadores estándar, para utilizarla de una vez por todas.
¿Quizás conozcas algún indicador que tenga esa "envoltura" para usarlo como referencia?

 
Eugene Myzrov:

¿Así que hay que aceptarlo, darlo por hecho y dejar de buscar una razón?

Escriba al servicio de atención al cliente.
 
Eugene Myzrov:
Pero ya he simplificado el código al extremo. Vale, intentaré ir por otro camino.

Puede tratarse de cualquier cosa.


Eugene Myzrov:

Por cierto, todavía no he encontrado una "envoltura" universal para la función OnCalculate(), ni siquiera entre los indicadores estándar, para utilizarla de una vez por todas.
¿Tal vez pueda sugerir un indicador que tenga tal "envoltura" para usarlo como referencia?

He visto varias variantes. Puede buscar y elegir.
Yo mismo utilizo este:

        //---
        if ( rates_total < MinBars ) return(0);

        //--- last counted bar will be recounted
        int limit=rates_total-prev_calculated-1;
        if(prev_calculated>0) limit++;

        //---
        for( int i=limit; i>=0; i--)
        {
           IndBuffer[i] = Add your code here
        }

        //---
        return(rates_total);