Einzelnen Beitrag anzeigen
  #1 (permalink)  
Alt 31.01.12
Biatsch Biatsch ist offline
Mitglied
 
Registriert seit: Oct 2011
Beiträge: 77
Biatsch befindet sich auf einem aufstrebenden Ast
Standard Unterschiedliche Farbeinteilung meines MAs

Hi,
ich versuche mich gerade daran einen eigenen MA zu programmieren, dem ich unterschiedliche Farbeinteilungen verpassen möchte, je nachdem, ob gerade unter oder über dem aktuellen Low liegt.
Zu diesem Zweck habe ich 2 Buffer gewählt, die beide die selben Werte überreicht bekommen.
Mit den letzten If-Bedingungen möchte ich, dass in Abhängigkeit vom vorliegenden Fall einer der MAs verschwindet (=EMPTY_VALUE).
Wenn der MA aber von nur einer einzigen Candle kurz "penetriert" wird entsteht eine Lücke im MA (aus einem Punkt kann schließlich keine Linie gezogen werden).

Meine Frage lautet nun: Wie kann ich diese Lücken (liebsten mit einer neuen Farbe) füllen, um einen stetigen Verlauf zu bekommen ?

Ich habe mir überlegt einfach einen dritten MA durchlaufen zu lassen und dass dieser von den beiden MAs überzeichnet wird.
Leider überzeichnet Buf2 bei mir alles andere.
Wie sorge ich also dafür, dass Buf2 immer unter Buf0 und Buf1 liegt ?

HTML-Code:
#property indicator_chart_window
#property indicator_buffers 3
#property indicator_color1 Red
#property indicator_color2 Blue
#property indicator_color3 Yellow


extern int period1=10;
extern int period2=20;

double Buf0[],
       Buf1[],
       Buf2[];

//+------------------------------------------------------------------------
int init()
{
   SetIndexBuffer(0,Buf0);
   SetIndexStyle(0,DRAW_LINE,STYLE_SOLID,2);
   SetIndexBuffer(1,Buf1);
   SetIndexStyle(1,DRAW_LINE,STYLE_SOLID,2);
   SetIndexBuffer(2,Buf2);
   SetIndexStyle(2,DRAW_LINE,STYLE_SOLID,2);
   
   return;
}

int start()
{
   int i,
       j,
       k,
       counted_bars;
   double sum1,
          sum2,
          average1,
          average2;
      
      counted_bars=IndicatorCounted();        

      i=Bars-counted_bars-1;
      while(i>=0)
      {  
         sum1=0;
         sum2=0;

         for(j=i; j<i+period1; j++){
         sum1+=Low[j];
         }
         for(k=i; k<i+period2; k++){
         sum2+=Low[k];
         }
         
         average1=sum1/period1;
         average2=sum2/period2;
         
         if(average1<average2){
            Buf0[i]=average1;
            Buf1[i]=average1;
            Buf2[i]=average1;
            
         }
         else{
            Buf0[i]=average2;
            Buf1[i]=average2;
            Buf2[i]=average2;
         }
         
         
         if(Buf0[i]>=Low[i]) Buf0[i]=EMPTY_VALUE;
         if(Buf1[i]<Low[i]) Buf1[i]=EMPTY_VALUE;

         i--;
      }
   
   return;
}
Wenn nur Buf2 aus dem Code entfernt wird, sieht man das Problem mit den Lücken.