Вопрос по CCI

 

При расчете CCI с периодом 2, и равных текущей и предыдущей цены TYPICAL возникают неправильные значения: 66.66666667 или -66.66666667

А должен быть 0.

См. индикатор.

Файлы:
testcci.mq4  1 kb
 
Да ну!
 
Integer:
Да ну!


Таки да. https://ru.wikipedia.org/wiki/%D0%98%D0%BD%D0%B4%D0%B5%D0%BA%D1%81_%D1%82%D0%BE%D0%B2%D0%B0%D1%80%D0%BD%D0%BE%D0%B3%D0%BE_%D0%BA%D0%B0%D0%BD%D0%B0%D0%BB%D0%B0

Формула CCI:

CCI


В числителе для периода 2 будет так:

CCI = P0 - (P0 + P1)/2;

Если P0 = P1, тогда

CCI = P0 - (2*P0) /2 =>

CCI = P0 - P0 =>

CCI = 0

 
Значит тоже у вас ошибка в эксперименте.
 
#property indicator_separate_window
#property indicator_buffers 1
#property indicator_color2 Red 

int init()
{
   int i, limit = Bars;
    
   double currPrice, prevPrice, cci;    
   
   for(i = 0; i < limit; i++)
   {
      //тест1 - сравниваю CCI по Typical ценам, как наиболее часто используемым
      //при равенстве текущей и прошлой цен индикатор должен вернуть 0.
      
      currPrice = (High[i] + Low[i] + Close[i]) / 3;
      prevPrice = (High[i+1] + Low[i+1] + Close[i+1]) / 3;
      
      //currPrice = iMA(NULL,0,1,0,MODE_SMA,PRICE_TYPICAL,i);
      //prevPrice = iMA(NULL,0,1,0,MODE_SMA,PRICE_TYPICAL,i+1);
      
      
      if (currPrice == prevPrice)
      {
         cci = iCCI(Symbol(), 0, 2, PRICE_TYPICAL, i);
         if (cci!=0)
            Print(DoubleToStr(cci, 12), " TYPICAL does not equal to 0 (prices: ", DoubleToStr(currPrice, 12), ", ", DoubleToStr(prevPrice, 12), " ).");
         else   
            Print("TYPICAL correct" );
      }   
   }         
}
Где именно ошибка?
Причина обращения: