Quaisquer perguntas de recém-chegados sobre MQL4 e MQL5, ajuda e discussão sobre algoritmos e códigos - página 16

 

Olá, você pode me ajudar a encontrar o preço do fractal maior, desde o primeiro - perto dos quatro fractais superiores.

 
mila.com:

Olá, você pode me ajudar a encontrar o preço do fractal maior, desde o primeiro - perto dos quatro fractais 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:

Olá, você pode me ajudar a encontrar o preço do fractal maior, desde o primeiro - perto dos quatro fractais 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:
Não para comparar fractais, mas para encontrar o máximo, até uma barra com um fractal,... tão simples quanto isso, Obrigado.
 
Vitalie Postolache:

Ainda mais curto ) Obrigado.

E como, entre estes, os fractais personalizáveis, você escolhe o 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:

Ainda mais curto ) Obrigado.

E como, entre estes, os fractais personalizáveis, você escolhe o 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));
}
Assim.
 
Alekseu Fedotov:

Assim

Portanto, retorna o preço do quase fractal.

Como posso encontrar o máximo dos quatro fractais configuráveis?

 
mila.com:

Portanto, retorna o preço do quase fractal.

Como posso encontrar o máximo dos quatro fractais configuráveis?

Um... você precisa selecionar 4 fractais afinados, e ao disparar os fractais inferiores sem valor, deixar um máximo:)
 
Alexey Kozitsyn:
Um... Você precisa selecionar os 4 fractais configurados para a seleção, e, ao rebentar os fractais inferiores sem valor, deixar um Maximka:)
Como fazer isso?
 
mila.com:
Como você faz isso?
Em um loop.
Razão: