Rejoindre la communauté
banner_forum
Devenez membre de la plus grande
communauté francophone sur le Forex
Partagez, échangez et apprenez en gagnant des crédits sur votre compte de trading

Changer la couleur d'un indicateur en mql

  • jal_fr

    Je viens encore embeter la communeauté avec mes problèmes farfelus !

    Dans le cadre de mon projet d'expert advisor, je souhaiterais créer mon propre indicateur, seulement j'ai un petit problème tout bête que je n'arrive pas a résoudre ..

    Je voudrais changer la couleur de mon indicateur sur le graphique en fonction d'une condition .. C'est a dire qu'a chaque nouvelle bougie, sa couleur change si une condition est vérifié. Pour un peu tester la chose, j'ai mis un random. En fonction de si le chiffre est pair ou impair, j'aimerais assigner a mon indicateur sa nouvelle couleur . Voici les prémices :

    Code
    #property indicator_chart_window #property indicator_buffers 2 #property indicator_color1 Lime #property indicator_color2 Red double Buf_0[],Buf_1[]; int init(){ return; } int start(){ SetIndexBuffer(0,Buf_0); MathSrand(TimeCurrent()); int random = MathRand(); if ((random % 2) == 0) { // Le random est pair donc SetIndexStyle (0,DRAW_LINE,STYLE_SOLID,1); // 1 pour Lime ! } else { // Le random est impair SetIndexStyle (0,DRAW_LINE,STYLE_SOLID,2); // 2 pour Rouge ! } int i, Counted_bars; Counted_bars=IndicatorCounted(); i=Bars-Counted_bars-1; while(i>=0){ Buf_0[i]=High[i]; i--; } return; }

    C'est con mais j'arrive pas a trouvé pourquoi la ligne reste toujours verte ! Aurais-je oublié quelque chose ?
  • jal_fr

    Bon maintenant j'arrive a changer les couleurs, c'est cool :
    Code
    #property indicator_chart_window #property indicator_buffers 2 double Buf_0[],Buf_1[]; int init(){ return; } int start(){ SetIndexBuffer(0,Buf_0); MathSrand(TimeCurrent()); int random = MathRand(); if ((random % 2) == 0) { // Le random est pair donc SetIndexStyle(0, DRAW_LINE, STYLE_SOLID, 2, Red); } else { // Le random est impair SetIndexStyle(0, DRAW_LINE, STYLE_SOLID, 2, Lime); } int i, Counted_bars; Counted_bars=IndicatorCounted(); i=Bars-Counted_bars-1; while(i>=0){ Buf_0[i]=High[i]; i--; } return; }

    Mais il y a quand meme un petit soucis, il change TOUTE la ligne hors je voudrais qu'il la change que sur chaque shift T_T
  • jal_fr

    Apres 13 suicides, et 15 étagères dans la guelle, voila la solution ! J'ai été voir comment ca fonctionnais sur des indicateurs comme le superTrend. En faite, créer deux lignes qu'on initialise a EMPTY_VALUE. Et on assigne a la bonne ligne sa valeur ... Je partage le code, ca peut éviter des morts.

    Code
    #property indicator_chart_window #property indicator_buffers 2 #property indicator_color1 Lime // Buffer 0 #property indicator_color2 Red // Buffer 1 #property indicator_width1 2 // Buffer 0 #property indicator_width2 2 // Buffer 1 double Buf_0[],Buf_1[]; int init(){ IndicatorBuffers(2); SetIndexBuffer(0,Buf_0); SetIndexStyle (0,DRAW_LINE,STYLE_SOLID,2); SetIndexBuffer(1,Buf_1); SetIndexStyle(1, DRAW_LINE, STYLE_SOLID,2); return; } int start(){ int i, Counted_bars; Counted_bars=IndicatorCounted(); i=Bars-Counted_bars-1; Buf_1[i] = EMPTY_VALUE ; Buf_0[i] = EMPTY_VALUE ; while(i>=0){ if (High[i] > High[i-1]){ Buf_0[i]= Close[i]; } else { Buf_1[i]= Close[i] ; } i--; } return; }