Bonjour à tous,
Souhaitant appréhender le développement d'indicateur pour MT4, j'ai commencé par réaliser une moyenne mobile bicolore, rouge lorsqu'elle descend et bleu lorsqu'elle monte.
Toutefois lorsque la moyenne mobile est montante seulement entre 2 bougies, celle-ci n’apparaît pas de couleur bleu, mais rouge.
Voici le code de l'init :
Et voici le code de la fonction start() :
J'ai valorisé à 0 plutôt que EMPTY_VALUE, afin de mieux visualiser le changement de couleur.
Etant donné que les valeurs de la moyenne mobile descendante sont dans le dernier buffer, la moyenne mobile descendante cache la moyenne mobile montante.
Afin d'afficher une courbe continue, lors d'un changement de tendance, je dois valorisé la valeur précédente de la moyenne mobile montante ou descendante, ceci est réalisé via le code précédent :
ou
Donc lorsque j'ai une moyenne mobile descendante, puis montante entre seulement deux bougies, puis à nouveau descendante, j'aurai ceci dans mes buffers :
MA[a,b,c,d]
MA.up[0,b,c,0]
MA.do[a,b,c,d]
Lorsque la moyenne mobile est montante sur un plus long terme, le problème ne se reproduira pas. Voir en pièce jointe le résultat.
Quelqu'un aurait-il une solution à mon problème, afin d'afficher correctement le changement de couleur ?
Souhaitant appréhender le développement d'indicateur pour MT4, j'ai commencé par réaliser une moyenne mobile bicolore, rouge lorsqu'elle descend et bleu lorsqu'elle monte.
Toutefois lorsque la moyenne mobile est montante seulement entre 2 bougies, celle-ci n’apparaît pas de couleur bleu, mais rouge.
Voici le code de l'init :
Code
int draw_begin = MA.Period - 1;
SetIndexStyle(0,DRAW_NONE);
SetIndexDrawBegin(0,draw_begin);
SetIndexBuffer(0,MA);
SetIndexStyle(1,DRAW_LINE,STYLE_SOLID,SignalSize);
SetIndexDrawBegin(1,draw_begin);
SetIndexBuffer(1,MA.up);
SetIndexStyle(2,DRAW_LINE,STYLE_SOLID,SignalSize);
SetIndexDrawBegin(2,draw_begin);
SetIndexBuffer(2,MA.do);
Et voici le code de la fonction start() :
Code
int countedBars=IndicatorCounted();
for(int i=Bars-countedBars-1;i>=0;i--){
MA[i]=iMA(Symbol(),Period(),MA.Period,MA.Shift,MA.Type,MA.Price,i);
if(MA[i]>MA[i+1]){
MA.do[i]=0;
MA.up[i]=MA[i];
MA.up[i+1]=MA[i+1];
}else{
MA.up[i]=0;
MA.do[i]=MA[i];
MA.do[i+1]=MA[i+1];
}
}
J'ai valorisé à 0 plutôt que EMPTY_VALUE, afin de mieux visualiser le changement de couleur.
Etant donné que les valeurs de la moyenne mobile descendante sont dans le dernier buffer, la moyenne mobile descendante cache la moyenne mobile montante.
Afin d'afficher une courbe continue, lors d'un changement de tendance, je dois valorisé la valeur précédente de la moyenne mobile montante ou descendante, ceci est réalisé via le code précédent :
Code
MA.up[i+1]=MA[i+1];
ou
Code
MA.do[i+1]=MA[i+1];
Donc lorsque j'ai une moyenne mobile descendante, puis montante entre seulement deux bougies, puis à nouveau descendante, j'aurai ceci dans mes buffers :
MA[a,b,c,d]
MA.up[0,b,c,0]
MA.do[a,b,c,d]
Lorsque la moyenne mobile est montante sur un plus long terme, le problème ne se reproduira pas. Voir en pièce jointe le résultat.
Quelqu'un aurait-il une solution à mon problème, afin d'afficher correctement le changement de couleur ?