Округление?

 

Написал ф-цию для поиска вершин, образованных МА. Суть в том, что если ма(1) больше всех предыдущих ма(num_bars)  и ма(0), тогда это вершина, образованная МА. В таком случае ф-ция возвращает значение МА1. 

double MA_Edje(int maPeriod, int num_bars)
{
   int edje=1; double ma_k;
   double ma0=NormalizeDouble(iMA(Symbol(),0,maPeriod,0,MODE_EMA,PRICE_OPEN,0),4);
   double ma1=NormalizeDouble(iMA(Symbol(),0,maPeriod,0,MODE_EMA,PRICE_OPEN,1),4);
   for(int k=0;k<=num_bars;k++)
   {
      ma_k=iMA(Symbol(),0,maPeriod,0,MODE_EMA,PRICE_OPEN,k);
      if(ma_k>ma1) edje=-1;
   }
   if(edje==1 && ma0<ma1) return(ma1); else return(0);
}
Тестирую.
МА(0) = 1,2734 МА(1) = 1,2734 Все предыдущие МА(num_bars)<ma(1) . 
По идее, ф-ция должна дать на выход 0, так как МА(0)=МА(1), а не меньше МА(1). Но нет, ф-ция возвращает ма1.
Почему так происходит, как вы считаете?


 
Fduch писал(а) >>

Написал ф-цию для поиска вершин, образованных МА. Суть в том, что если ма(1) больше всех предыдущих ма(num_bars) и ма(0), тогда это вершина, образованная МА. В таком случае ф-ция возвращает значение МА1.

Для начала надо цикл корректный сделать. Начинать не от 0, а от 2.

 
Fduch писал(а) >>

МА(0) = 1,2734 МА(1) = 1,2734

Наверно выводите значения МА через Print(), а она только 4 знака показывает, на самом деле значения какие-нибудь 1,27345643

 
либо инициация цикла яйцо=0 либо иф() илс яйцо=0 иначе эдж всегда =1