Por que os indicadores (linhas, setas, histogramas) estão cintilando no terminal MT5? - página 2

 

Tente imprimir pré-cálculos logo no início da OnCalculate.

E comparar com algum indicador padrão - se ele pisca.

 
Andrey Khatimlianskii: Tente imprimir pré-cálculos logo no início da OnCalculate. E compare-a com algum indicador padrão - está piscando.
Acrescentou duas variáveis estáticas à função OnCalculate() para comparar valores atuais com valores anteriores:

estática int last_rates_total=0; // valor anterior "input timeseries size at previous
estático int último_prev_calculado=0; // valor anterior "barras processadas na chamada anterior

e código de verificação com a saída para o diário

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

Iniciou o indicador AOM na hora e recebeu este relatório

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

Nada de inesperado, o processamento normal de apenas novas barras que chegam está acontecendo.



 
Eugene Myzrov:
Acrescentou duas variáveis estáticas à função OnCalculate() para comparar valores atuais com valores anteriores:

Nada inesperado, há um processo normal de manipulação apenas de novas barras que entram.

Os indicadores da entrega padrão estão piscando?
 
Andrey Khatimlianskii: Os indicadores da entrega padrão estão piscando?

Não, eu coloquei alguns indicadores padrão "Moving Average", "Awesome Oscillator" no gráfico. Observado. Não, eu não notei nenhum valor cintilante ou desaparecendo na"Janela de Dados".

 
Eugene Myzrov:

Não, eu coloquei alguns indicadores padrão "Moving Average", "Awesome Oscillator" no gráfico. Observado. Não, eu não notei nenhuma cintilação ou desaparecimento de valores na"Janela de Dados".

Refiro-me àqueles indicadores que estão na fonte (mq5).

Se eles não piscarem, então o problema está obviamente em seu código. Simplifique-a até que pare de cintilar. Ou vice versa - refine o código padrão para seu estado, até que ele cintile.

 
É uma característica do MT5, imho.
 
Stanislav Korotky: É uma característica do MT5, imho.

Então você tem que aceitá-lo, tomá-lo como certo e parar de procurar a causa?


 
Andrey Khatimlianskii: Refiro-me àqueles indicadores que estão no código fonte (mq5). Se eles não piscarem, então o problema está obviamente em seu código. Simplifique-a até que pare de cintilar. Ou vice versa - refine o código padrão para seu estado, até que ele cintile.
Mas já simplifiquei o código ao ponto de cintilar. Ok, vou tentar ir pelo caminho oposto.


A propósito, não encontrei um "invólucro" universal para a função OnCalculate(), mesmo entre os indicadores padrão, para utilizá-lo de uma vez por todas.
Talvez, você conheça algum indicador que tenha tal "invólucro" para usá-lo como referência?

 
Eugene Myzrov:

Então você tem que aceitá-lo, tomá-lo como certo e parar de procurar uma razão?

Escreva para o balcão de serviço.
 
Eugene Myzrov:
Mas eu já simplifiquei o código ao extremo. Ok, vou tentar ir por outro caminho.

Pode ser sobre qualquer coisa pequena.


Eugene Myzrov:

A propósito, ainda não encontrei um "envoltório" universal para a função OnCalculate(), mesmo entre os indicadores padrão, para utilizá-lo de uma vez por todas.
Talvez, você possa sugerir um indicador que tenha tal "invólucro" para usá-lo como referência?

Tenho visto várias variantes. Você pode pesquisar e escolher.
Eu mesmo uso este aqui:

        //---
        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);
Razão: