MQL5 Fractals

 
Hallo geschätzte Community,

Wie kann man von dem zuletzt erstellten Fractal das letzte Hoch eines UP-Fractals oder das letzte Tief eines Low-Fractals ermitteln?

Vielen Dank!

Mit freundlichen Grüßen
Johann Kern

 
Welchen Indikator verwendest Du?
 
Joosy:
Hallo geschätzte Community,

Wie kann man von dem zuletzt erstellten Fractal das letzte Hoch eines UP-Fractals oder das letzte Tief eines Low-Fractals ermitteln?

Vielen Dank!

Mit freundlichen Grüßen
Johann Kern

Falls du den Indicator Examples\Fractals meinst, folgendermaßen:

handle in der OnInit mit iCustom(...) erstellen, buffer definieren

int handleFract = iCustom(......);
if(handleFract == INVALID_HANDLE)
        {
           Alert("Da ging was schief");
           return(INIT_FAILED);
        }

double bufferFractUP[],
       bufferFractDN[];

ArraySetAsSeries(bufferFractUP,true);
ArraySetAsSeries(bufferFractUP,true);

Im Datawindow siehst du daß, 2 Buffer vorhanden sind. Auf diese greifst du in der OnTick mittels CopyBuffer zu.

Dann die Arrays untersuchen. ArrayMinimum, ArrayMaximum bieten sich hier an.

Du wirst das hinkriegen. F1 nicht vergessen.

 
Carl Schreiber:
Welchen Indikator verwendest Du?
Jetzt hast du mich überholt ;) LG Otto
 
Hallo Carl Schreiber,
ich verwende iFractals().

Hallo Otto Pauser,
wäre den iCustom von Vorteil?
Ich mache das mit iFractals, ähnlich. Zuletzt ist aber das Array, dass ich wie von Dir beschrieben untersuche. Von daher meine ich in ArrayMinimum und ArrayMaximum die Lösung zu erkennen.

 

Wenn Du den Kursor auf iFractals stellt und F1 drückst (ist ja eine integrierte Funktion) kommst Du gleich zur Beschreibung und
da sieht man dann sogleich ein Beispiel und dass es für die Fractals oben und unten die definierten Werte
       (MQL5: 0 - UPPER_LINE, 1 - LOWER_LINE,  MQL4: MODE_UPPER=1, MODE_LOWER=2)

gibt.

Ist meist viel, viel schneller als hier auf Antworten warten.

 
Hallo Zusammen,

ich hab‘s raus, dank euch beiden:-)
zunächst einmal iCustom(……..) NUR NOCH! Da ich damit meine individuellen Indikatoren erstellen kann. Hier großen Dank für den Hinweis!

Ich habe es dann so gelöst:

//+------------------------------------------------------------------+
//|  Accelerator/Decelerator Oscillator                              |
//+------------------------------------------------------------------+
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[]){

   int i,limit;
   //---
   if(rates_total<5)
      return(0);
   
   //---
   if(prev_calculated<7){
      limit=2;
      //--- clean up arrays
      ArrayInitialize(ExtUpperBuffer,EMPTY_VALUE);
      ArrayInitialize(ExtLowerBuffer,EMPTY_VALUE);
   } else {
      limit=rates_total-5;
   }

   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];
         dblHigh = NormalizeDouble(high[i],_Digits);
      } 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];
         dblLow = NormalizeDouble(low[i],_Digits);
      } else ExtLowerBuffer[i]=EMPTY_VALUE;
   }
   PrintFormat("Fractal Up:= %f  ::  Fractal Down:= %f",dblHigh, dblLow);   
   
   //--- OnCalculate done. Return new prev_calculated.
   return(rates_total);
  }


Jedenfalls Danke für eure Unterstützung.

Mit freundlichen Gruß
Joosy

Grund der Beschwerde: