Fragen von Neueinsteigern zu MQL4 und MQL5, Hilfe und Diskussion über Algorithmen und Codes - Seite 16

 

Hallo, können Sie mir bitte helfen, den Preis für das größere Fraktal zu finden, das zu den ersten vier Fraktalen gehört, die in der Nähe der Spitze liegen.

 
mila.com:

Hallo, können Sie mir bitte helfen, den Preis für das größere Fraktal zu finden, das zu den ersten vier Fraktalen gehört, die in der Nähe der Spitze liegen.

void OnTick()
{
   Comment("Min = ",MaxMinFractal(MODE_LOWER, 4),"; Max = ",MaxMinFractal(MODE_UPPER, 4));
}

//===============================================================================================
//--------------------------------- Возвращает Max/Min фрактала --------------------------------+
//===============================================================================================
double MaxMinFractal(int mode=MODE_UPPER, int nf=4) {
string symb=Symbol();
double f=0,min=9999999,max=0;
int kf=0;
  for(int i=3; i<iBars(symb, 0); i++) {
   if(mode==MODE_LOWER){
    f=iFractals(symb, 0, MODE_LOWER, i);
    if(f!=0) {
      kf++;
      if(min>iLow(symb,0,i)) min=iLow(symb,0,i);
      if(kf>=nf) return(min);
     }}
    if(mode==MODE_UPPER){
    f=iFractals(symb, 0, MODE_UPPER, i);
    if(f!=0) {
      kf++;
      if(max<iHigh(symb,0,i)) max=iHigh(symb,0,i);
      if(kf>=nf) return(max);
    }}}
  return(-1);
}
 
mila.com:

Hallo, können Sie mir bitte helfen, den Preis für das größere Fraktal zu finden, das zu den ersten vier Fraktalen gehört, die in der Nähe des oberen Bereichs liegen.

#property strict

void OnStart()
  {
   int i=1,cnt=1;
   double lastupfr=0;

   while(cnt<5)
     {
      double upfr=iFractals(_Symbol,0,1,i);
      if(upfr!=0)
        {
         if(upfr>lastupfr) lastupfr=upfr;
         cnt++;
        }
      i++;
     }
   Comment("Biggest UpFractal = ",lastupfr);
  }
 
Vitaly Muzichenko:
Nicht um Fraktale zu vergleichen, sondern um das Maximum zu finden, bis zu einem Balken mit einem Fraktal,... so einfach ist das, danke.
 
Vitalie Postolache:

Noch kürzer ) Ich danke Ihnen.

Und wie wählt man aus diesen anpassbaren Fraktalen das maximale aus?

//|    nl - количество баров слева                                             |
//|    nr - количество баров справа                                            |
//+----------------------------------------------------------------------------+
double GetNearestUpFractal(string sy="0", int tf=0, int nl=2, int nr=2) {
  bool f;
  int  fb, i, nb=-1;

  if (sy=="" || sy=="0") sy=Symbol();
  if (nl<1) nl=1;
  if (nr<1) nr=1;

  fb=nr;
  while (nb<0) {
    fb++;
    f=True;
    for (i=fb; i>fb-nr; i--) {
      if (iHigh(sy, tf, i)<iHigh(sy, tf, i-1)) { f=False; break; }
    }
    if (f) {
      for (i=fb; i<fb+nl; i++) {
        if (iHigh(sy, tf, i)<iHigh(sy, tf, i+1)) { f=False; break; }
      }
      if (f) { nb=fb; break; }
    }
  }

  return(iHigh(sy, tf, nb));
}
 
mila.com:

Noch kürzer ) Ich danke Ihnen.

Und wie wählt man aus diesen anpassbaren Fraktalen das maximale aus?

//|    nl - количество баров слева                                             |
//|    nr - количество баров справа                                            |
//+----------------------------------------------------------------------------+
double GetNearestUpFractal(string sy="0", int tf=0, int nl=2, int nr=2) {
  bool f;
  int  fb, i, nb=-1;

  if (sy=="" || sy=="0") sy=Symbol();
  if (nl<1) nl=1;
  if (nr<1) nr=1;

  fb=nr;
  while (nb<0) {
    fb++;
    f=True;
    for (i=fb; i>fb-nr; i--) {
      if (iHigh(sy, tf, i)<iHigh(sy, tf, i-1)) { f=False; break; }
    }
    if (f) {
      for (i=fb; i<fb+nl; i++) {
        if (iHigh(sy, tf, i)<iHigh(sy, tf, i+1)) { f=False; break; }
      }
      if (f) { nb=fb; break; }
    }
  }

  return(iHigh(sy, tf, nb));
}
#property strict

void OnStart()
  {
   int i=1,cnt=1;
   double lastupfr=0;

   while(cnt<5)
     {
      double upfr=GetNearestUpFractal(_Symbol,0,2,2);
      if(upfr!=0)
        {
         if(upfr>lastupfr) lastupfr=upfr;
         cnt++;
        }
      i++;
     }
   Comment("Biggest UpFractal = ",lastupfr);
  }
//-----------
//|    nl - количество баров слева                                             |
//|    nr - количество баров справа                                            |
//+----------------------------------------------------------------------------+
double GetNearestUpFractal(string sy="0", int tf=0, int nl=2, int nr=2) {
  bool f;
  int  fb, i, nb=-1;

  if (sy=="" || sy=="0") sy=Symbol();
  if (nl<1) nl=1;
  if (nr<1) nr=1;

  fb=nr;
  while (nb<0) {
    fb++;
    f=True;
    for (i=fb; i>fb-nr; i--) {
      if (iHigh(sy, tf, i)<iHigh(sy, tf, i-1)) { f=False; break; }
    }
    if (f) {
      for (i=fb; i<fb+nl; i++) {
        if (iHigh(sy, tf, i)<iHigh(sy, tf, i+1)) { f=False; break; }
      }
      if (f) { nb=fb; break; }
    }
  }

  return(iHigh(sy, tf, nb));
}
Zum Beispiel so.
 
Alekseu Fedotov:

Wie diese

Gibt also den Preis des nächstgelegenen Fraktals zurück.

Wie kann ich das Maximum der vier konfigurierbaren Fraktale ermitteln?

 
mila.com:

So ergibt sich der Preis für das Beinahe-Fraktal.

Wie kann ich das Maximum der vier konfigurierbaren Fraktale ermitteln?

Ähm ... Sie müssen 4 abstimmbare Fraktale auswählen und durch Wegblasen der wertlosen unteren Fraktale ein maximales übrig lassen:)
 
Alexey Kozitsyn:
Ähm ... Sie müssen die 4 Fraktale auswählen, die zur Auswahl stehen, und durch Wegblasen der wertlosen minderwertigen Fraktale ein Maximka übrig lassen:)
Wie kann man das tun?
 
mila.com:
Wie machen Sie das?
In einer Schleife.