Cualquier pregunta de los recién llegados sobre MQL4 y MQL5, ayuda y discusión sobre algoritmos y códigos - página 16

 

Hola, ¿podría ayudarme a encontrar el precio del fractal más grande, del primero - cerca de los cuatro fractales superiores.

 
mila.com:

Hola, ¿podría ayudarme a encontrar el precio del fractal más grande, del primero - cerca de los cuatro fractales superiores.

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:

Hola, ¿podría ayudarme a encontrar el precio del fractal más grande, del primero - cerca de los cuatro fractales superiores.

#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:
No para comparar fractales, sino para encontrar el máximo, hasta una barra con un fractal,...así de simple, Gracias.
 
Vitalie Postolache:

Más corto aún ) Gracias.

¿Y cómo, de estos fractales personalizables, se elige el máximo?

//|    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:

Más corto aún ) Gracias.

¿Y cómo, de estos fractales personalizables, se elige el máximo?

//|    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));
}
Así.
 
Alekseu Fedotov:

Así

Así que devuelve el precio del fractal más cercano.

¿Cómo encuentro el máximo de los cuatro fractales configurables?

 
mila.com:

Así vuelve el precio del fractal cercano.

¿Cómo encuentro el máximo de los cuatro fractales configurables?

Um... tienes que seleccionar 4 fractales sintonizables, y al soplar los fractales inferiores sin valor, dejar uno máximo:)
 
Alexey Kozitsyn:
Um... Usted necesita para seleccionar los 4 fractales establecidos para la selección, y por la voladura de los fractales inferiores sin valor, dejar una Maximka:)
¿Cómo hacerlo?
 
mila.com:
¿Cómo se hace?
En un bucle.
Razón de la queja: