Pourquoi les indicateurs (lignes, flèches, histogrammes) clignotent-ils dans le terminal MT5 ? - page 2

 

Essayez d'imprimer prev_calculé au tout début de OnCalculate.

Et comparez avec un indicateur standard - s'il clignote.

 
Andrey Khatimlianskii: Essayez d'imprimer prev_calculé au tout début de OnCalculate. Et comparez-le à un indicateur standard : clignote-t-il ?
Ajout de deux variables statiques à la fonction OnCalculate() pour comparer les valeurs actuelles aux valeurs précédentes :

static int last_rates_0 ; // valeur précédente "taille de la série temporelle d'entrée au moment précédent
static int last_prev_calculated=0 ; // valeur précédente "barres traitées à l'appel précédent

et le code de vérification avec la sortie vers le journal

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

J'ai lancé l'indicateur AOM à la minute et j'ai obtenu ce rapport

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

Rien d'inattendu, il y a un processus normal de traitement des seules nouvelles barres qui arrivent.



 
Eugene Myzrov:
Ajout de deux variables statiques à OnCalculate() pour comparer les valeurs actuelles aux valeurs précédentes :

Rien d'inattendu, il existe un processus normal de traitement des nouvelles barres qui arrivent.

Les indicateurs de la livraison standard clignotent-ils ?
 
Andrey Khatimlianskii: Les indicateurs de la livraison standard clignotent-ils ?

Non, j'ai mis un couple d'indicateurs standards "Moyenne mobile", "Awesome Oscillator" sur le graphique. Observé. Non, je n'ai pas remarqué de scintillement ou de disparition des valeurs dans la"fenêtre de données".

 
Eugene Myzrov:

Non, j'ai mis un couple d'indicateurs standards "Moyenne mobile", "Awesome Oscillator" sur le graphique. Observé. Non, je n'ai pas remarqué de scintillement ou de disparition des valeurs dans la"fenêtre de données".

Je veux dire les indicateurs qui sont dans la source (mq5).

Si elles ne clignotent pas, le problème se situe manifestement dans votre code. Simplifiez-le jusqu'à ce qu'il cesse de vaciller. Ou vice versa - affiner le code standard à votre état, jusqu'à ce qu'il vacille.

 
C'est une fonctionnalité de la MT5, à mon avis.
 
Stanislav Korotky: C'est une fonctionnalité de la MT5, à mon avis.

Il faut donc l'accepter, le prendre pour acquis et arrêter de chercher la cause ?


 
Andrey Khatimlianskii: Je veux dire les indicateurs qui sont dans le code source (mq5). Si elles ne clignotent pas, le problème se situe manifestement dans votre code. Simplifiez-le jusqu'à ce qu'il cesse de vaciller. Ou vice versa - affiner le code standard à votre état, jusqu'à ce qu'il vacille.
Mais j'ai déjà simplifié le code au point de le faire vaciller. Ok, je vais essayer d'aller dans le sens opposé.


A propos, je n'ai pas trouvé de "wrapper" universel pour la fonction OnCalculate(), même parmi les indicateurs standards, pour l'utiliser une fois pour toutes.
Peut-être connaissez-vous un indicateur qui dispose d'une telle "enveloppe" pour l'utiliser comme référence ?

 
Eugene Myzrov:

Il faut donc l'accepter, le prendre pour acquis et arrêter de chercher une raison ?

Écrivez au service d'assistance.
 
Eugene Myzrov:
Mais j'ai déjà simplifié le code à l'extrême. Ok, je vais essayer d'aller dans l'autre sens.

Il peut s'agir de n'importe quelle petite chose.


Eugène Myzrov:

A propos, je n'ai pas encore trouvé de "wrapper" universel pour la fonction OnCalculate(), même parmi les indicateurs standards, pour l'utiliser une fois pour toutes.
Peut-être pouvez-vous suggérer un indicateur qui possède un tel "wrapper" pour l'utiliser comme référence ?

J'ai vu plusieurs variantes. Vous pouvez chercher et choisir.
J'utilise moi-même celui-ci :

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