Perché gli indicatori (linee, frecce, istogrammi) lampeggiano nel terminale MT5? - pagina 2

 

Provate a stampare prev_calculated all'inizio di OnCalculate.

E confrontare con qualche indicatore standard - se lampeggia.

 
Andrey Khatimlianskii: Provate a stampare prev_calculated all'inizio di OnCalculate. E confrontarlo con qualche indicatore standard - è lampeggiante.
Aggiunte due variabili statiche alla funzione OnCalculate() per confrontare i valori attuali con quelli precedenti:

static int last_rates_total=0; // valore precedente "dimensione della serie temporale in ingresso al precedente
static int last_prev_calculated=0; // valore precedente "barre elaborate alla chiamata precedente

e il codice di verifica con l'uscita al giornale

//+------------------------------------------------------------------+
//| 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);
}

Avviato l'indicatore AOM al minuto e ottenuto questo rapporto

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

Niente di inaspettato, c'è un normale processo di elaborazione solo delle nuove barre in arrivo.



 
Eugene Myzrov:
Aggiunte due variabili statiche a OnCalculate() per confrontare i valori attuali con quelli precedenti:

Niente di inaspettato, c'è un normale processo di gestione solo delle nuove barre in arrivo.

Gli indicatori della consegna standard sono lampeggianti?
 
Andrey Khatimlianskii: Gli indicatori della consegna standard lampeggiano?

No, ho messo un paio di indicatori standard "Moving Average", "Awesome Oscillator" sul grafico. Osservato. No, non ho notato nessun sfarfallio o scomparsa di valori nella"Finestra dei dati".

 
Eugene Myzrov:

No, ho messo un paio di indicatori standard "Moving Average", "Awesome Oscillator" sul grafico. Osservato. No, non ho notato alcun sfarfallio o scomparsa di valori nella"Finestra dei dati".

Intendo quegli indicatori che si trovano nel sorgente (mq5).

Se non lampeggiano, allora il problema è ovviamente nel vostro codice. Semplificare fino a quando non smette di sfarfallare. O viceversa - perfezionate il codice standard al vostro stato, fino a quando non sfarfalla.

 
È una caratteristica di MT5, imho.
 
Stanislav Korotky: È una caratteristica di MT5, imho.

Quindi bisogna accettarlo, darlo per scontato e smettere di cercare la causa?


 
Andrey Khatimlianskii: Intendo quegli indicatori che si trovano nel codice sorgente (mq5). Se non lampeggiano, allora il problema è ovviamente nel vostro codice. Semplificare fino a quando non smette di sfarfallare. O viceversa - perfezionate il codice standard al vostro stato, fino a quando non sfarfalla.
Ma ho già semplificato il codice fino allo sfarfallio. Ok, cercherò di andare nella direzione opposta.


A proposito, non ho trovato un "wrapper" universale per la funzione OnCalculate(), anche tra gli indicatori standard, per usarla una volta per tutte.
Forse, conosci qualche indicatore che ha un tale "wrapper" per usarlo come riferimento?

 
Eugene Myzrov:

Quindi bisogna accettarlo, darlo per scontato e smettere di cercare una ragione?

Scrivete al service desk.
 
Eugene Myzrov:
Ma ho già semplificato il codice all'estremo. Ok, cercherò di andare in un altro modo.

Può riguardare qualsiasi piccola cosa.


Eugene Myzrov:

A proposito, non ho ancora trovato un "wrapper" universale per la funzione OnCalculate(), anche tra gli indicatori standard, per utilizzarla una volta per tutte.
Forse, potete suggerire un indicatore che ha un tale "wrapper" per usarlo come riferimento?

Ho visto diverse varianti. Potete cercare e scegliere.
Io stesso uso questo:

        //---
        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);