Indikator visualisieren

 

Hallo,

ich habe mir einen kleinen Indikator zum Erkennen von Fraktalen erstellt (3 fallende, 3 steigende Kerzen bzw. andersherum). 

#property indicator_chart_window

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit() {

   return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime& time[],
                const double& open[],
                const double& high[],
                const double& low[],
                const double& close[],
                const long& tick_volume[],
                const long& volume[],
                const int& spread[])
  {
   for(int i = prev_calculated; i < rates_total; i++) {
      
      //Short Fraktal
      if((i+5) < rates_total &&
         open[i] < close[i] &&
         open[i+1] < close[i+1] &&
         open[i+2] < close[i+2] &&
         open[i+3] > close[i+3] &&
         open[i+4] > close[i+4] &&
         open[i+5] > close[i+5]) 
         {
            int highest = 3;
            if(high[i+4] > high[4]) highest = 4; 
            ObjectCreate(Symbol(),i,OBJ_ARROW_SELL,0,time[i+highest],high[i+highest]);
         }
         
         //Long Fraktal
         if((i+5) < rates_total &&
            open[i] > close[i] &&
            open[i+1] > close[i+1] &&
            open[i+2] > close[i+2] &&
            open[i+3] < close[i+3] &&
            open[i+4] < close[i+4] &&
            open[i+5] < close[i+5]) 
            {
               int lowest = 3;
               if(low[i+4] > low[4]) lowest = 4; 
               ObjectCreate(_Symbol,i,OBJ_ARROW_BUY,i,time[i+lowest],low[i+lowest]);
            }
   }
   
   //return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+
void onDeinit() {
   ObjectsDeleteAll(_Symbol, 0, OBJ_ARROW_BUY);
   ObjectsDeleteAll(_Symbol, 0, OBJ_ARROW_SELL);
}

Nun würde ich gerne die jeweiligen Kerzen in einer anderen Farbe darstellen. Soweit ich das verstanden habe, brauche ich dafür noch einen Plot und Buffer. Ich habe nur in den Beispielen die ich gesehen habe nicht so recht verstanden, wie ich das bei mir anwenden soll.

Momentan löse ich das ja noch mit den Pfeilen, allerdings habe ich wohl nen Fehler mit der onDeinit, denn wenn ich den Indikator vom Chart entferne, bleiben die Pfeile.

Meine letzte Frage ist, wie ich denn nun auf die Signale des Indikators von einem EA zugreife. Ich müsste dort ja irgendwie gesagt kriegen, dass ein Fraktal erstellt wurde und somit ein Einstieg gemacht werden soll.

Danke!

 

Weißt Du wie viele Fractal Indikatoren es gibt?

Eine einfache Suche nach fractal bringt 25 Seiten mit je 10 Verweisen zu Artikeln, Code, Market, ...

Aber wenn Du es schon selber versuchst, ,öffne mal die Referenz und gib DRAW_COLOR_LINE in die Suchzeile ein, da gibt es ein Beispiel.

 
Carl Schreiber:

Eine einfache Suche nach fractal bringt 25 Seiten mit je 10 Verweisen zu Artikeln, Code, Market, ...

Angenommen, ich nehme jetzt einfach mal den, der standardmäßig im MT5 ist, wie gehe ich dann vor um den in meinen EA einzubinden bzw wie bekomme ich die Information "es wurde soeben ein neues Fraktal gebildet"?

 

Der mit dem Terminal gekommene (C:\...\MQL5\Indicators\Examples\Fractals.mq5) wird das so gemacht:

   for(i=limit;i<rates_total-3 && !IsStopped();i++)
     {
      //---- Upper Fractal
      if(high[i]>high[i+1] && high[i]>high[i+2] && high[i]>=high[i-1] && high[i]>=high[i-2])
         ExtUpperBuffer[i]=high[i];
      else ExtUpperBuffer[i]=EMPTY_VALUE;

      //---- Lower Fractal
      if(low[i]<low[i+1] && low[i]<low[i+2] && low[i]<=low[i-1] && low[i]<=low[i-2])
         ExtLowerBuffer[i]=low[i];
      else ExtLowerBuffer[i]=EMPTY_VALUE;
     }

Also entweder ==EMPTY_VALUE oder != EMPTY_VALUE

Grund der Beschwerde: