Последние значение Fractals(mql4)

 

Здравствуйте товарищи, прощу помощи.

Как получить последние значение индикатора Fractals(последний фрактал сверху, и последних фрактал снизу).(mql4)

 

Double FD=0.0, FU=0.0;
for (int i=0; i<20; i++){
FD=NormalizeDouble(iFractals(_Symbol,tf,MODE_LOWER,i),5);
if(FD>0.0){i=20;}
}
for (int i=0; i<20; i++){
FU=NormalizeDouble(iFractals(_Symbol,tf,MODE_UPPER,i),5);
if(FU>0.0){i=20;}
}

 

На сколько это верно? 

И есть ли решение лучше?

 

Здравствуйте. Не используйте цикл с фиксированным лимитом, рискуете не найти фрактал. Используйте в качестве лимита количество баров в истории.

В случае нахождения фрактала делайте принудительный выход из цикла, зачем перебирать всю историю баров до конца.

Запоминайте положение фрактала в назначенной переменной, можно позицию или время. 

 
ATOM:

Здравствуйте товарищи, прощу помощи.

Как получить последние значение индикатора Fractals(последний фрактал сверху, и последних фрактал снизу).(mql4)

 

 

На сколько это верно? 

И есть ли решение лучше?

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 13.08.2008                                                     |
//|  Описание : Возвращает номер бара фрактала по его номеру.                  |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента        ("" или NULL - текущий символ)     |
//|    tf - таймфрейм                       (    0       - текущий ТФ)         |
//|    nf - номер фрактала                  (    0       - последний)          |
//+----------------------------------------------------------------------------+
int GetFractalBar(string sy="0", int tf=0, int nf=0) {
  if (sy=="" || sy=="0") sy=Symbol();
  double f=0;
  int    i, k=iBars(sy, tf), kf;

  for (i=2; i<k; i++) {
    f=iFractals(sy, tf, MODE_LOWER, i);
    if (f!=0) {
      kf++;
      if (kf>nf) return(i);
    }
    f=iFractals(sy, tf, MODE_UPPER, i);
    if (f!=0) {
      kf++;
      if (kf>nf) return(i);
    }
  }
  Print("GetFractalBar(): Фрактал не найден");
  return(-1);
}
 
r772ra:

Спасибо!)

 

sandex:

Здравствуйте. Не используйте цикл с фиксированным лимитом, рискуете не найти фрактал. Используйте в качестве лимита количество баров в истории.

В случае нахождения фрактала делайте принудительный выход из цикла, зачем перебирать всю историю баров до конца.

Запоминайте положение фрактала в назначенной переменной, можно позицию или время. 

Спасибо!) 

Причина обращения: