Вопрос по iFractals в while - страница 2

 

Valmars Может ты имел ввиду так:
double GetPriceLastFractal(string symbol, int timeframe, int mode)
{
double currprice;
int i,count;
if (mode == 0)
{
while (currprice <= iHigh(symbol,timeframe,0))
{if (count>=iBars(symbol,timeframe)-5) return(0); // Превышен исторический Max графика
currprice = iFractals(symbol, timeframe, MODE_LOWER,i);i++;count++;}
return(currprice);
}
else
{
while (currprice == 0 || currprice >=iLow(symbol,timeframe,0))
{if (count>=iBars(symbol,timeframe)-5) return(0); // Превышен исторический Min графика
currprice = iFractals(symbol, timeframe, MODE_UPPER,i);i++;count++;}
return(currprice);
}
}


хотя ни так ни так код не работает

 
Я поменял
MODE_LOWER MODE_UPPER
местами
 
 
komposter писал (а):
komposter 05.04.2006 19:45 На 0-м баре его вообще быть не может, а если поменять 0 на 2 то фрактал будет находиться только если он был именно 2 бара назад.
Учим мат. часть ;)
Вы правы, код неверный, действительно надо повторять матчасть.
Надо было вот так:
//+------------------------------------------------------------------+
//|                                                   GetFractal.mq4 |
//| script program start function                                    |
//+------------------------------------------------------------------+
int start()
  { 
//----
   string symbol = Symbol(); int timeframe = Period();
   double FrUp = GetPriceLastFractal(symbol, timeframe, 0);
   double FrLo = GetPriceLastFractal(symbol, timeframe, 1);
   Comment("FrUp= ",FrUp, "FrLo= ",FrLo);
//----
   return(0);   
  }
 
//+---------------------------------------------------------------------+
//| GetPriceLastFractal(string symbol, int timeframe, int mode) function|                                                |
//+---------------------------------------------------------------------+
double GetPriceLastFractal(string symbol, int timeframe, int mode)
   { 
     double currprice;
     int i;
     if (mode == 0)
       {
        while (currprice <= iHigh(symbol,timeframe,0))
          {if (i>=iBars(symbol,timeframe)-5) return(0); // Превышен исторический Max графика
           currprice = iFractals(symbol, timeframe, MODE_UPPER,i);i++;}       
        return(currprice);
       }
     else
       {
         while (currprice == 0 || currprice >=iLow(symbol,timeframe,0))
           {if (i>=iBars(symbol,timeframe)-5) return(0); // Превышен исторический Min графика
            currprice = iFractals(symbol, timeframe, MODE_LOWER,i);i++;}       
        return(currprice);
       } 
   }

Ищет не любой первый фрактал, а только тот, который выше (ниже) текущей цены.

Чтобы опять не попасть впросак, проверил работу в скрипте.

 

Valmars
Эта функция мож пригодится мне в дальнейшем. Пока я буду искать просто цену последнего фрактала. В любом случае спасибо.