Вопрос по OBV

 

При равных текущей и предыдущей цены WEIGHTED, OBV должен выдавать текущее значение, равное предыдущему.

Но значения отличаются.

См. индикатор во вложении.

Файлы:
testobv.mq4  1 kb
 
Кто сказал, что должны быть равные заначения?
 
Integer:
Кто сказал, что должны быть равные заначения?


https://en.wikipedia.org/wiki/On-balance_volume - здесь описание.

И в пользовательском индикаторе так:

if(dCurrentPrice==dPreviousPrice)
            ExtOBVBuffer[i]=ExtOBVBuffer[i+1]; <----- ТУТ
         else
           {
            if(dCurrentPrice<dPreviousPrice)
               ExtOBVBuffer[i]=ExtOBVBuffer[i+1]-Volume[i];  
            else
               ExtOBVBuffer[i]=ExtOBVBuffer[i+1]+Volume[i];  

}

 
Если даже в коде так, то будет равно. Может быть у вас ошибка в эксперименте.
 
#property indicator_separate_window
#property indicator_buffers 1
#property indicator_color2 Red 

int init()
{
   int i, limit = Bars;// - IndicatorCounted() - 3;
    
   double currPrice, prevPrice, cci;    
   for(i = 0; i < limit; i++)
   {
      //сравниваю iOBV по Weighted ценам
      //при равенстве текущей и прошлой цен индикатор должен скопировать прошлое значение.              
      currPrice = (High[i]+Low[i]+2*Close[i])/4.0;
      prevPrice = (High[i+1]+Low[i+1]+2*Close[i+1])/4.0;
      
      if (currPrice == prevPrice)
      {        
         double obvCurrent = iOBV(Symbol(), 0, PRICE_WEIGHTED, i);
         double obvPrev = iOBV(Symbol(), 0, PRICE_WEIGHTED, i+1);
         if (obvCurrent != obvPrev)
            Print("iOBV ", obvCurrent, " does not equal to ", obvPrev, " (prices: ", DoubleToStr(currPrice, 12), ", ", DoubleToStr(prevPrice, 12), " ).");
         else   
            Print("iOBV correct" );
      }
   }         
}
 
Где именно ошибка?
 
Незнаю, но что-то должно быть, это вас интересует, ищите. Накинул OBV на график, нашел два бара с одинаковой ценой, посмотрел на OBV и увидел равенство.
 
ToporMT4:

ихенько, ошибка - в сравнении двух doule на равенство.
 
tara:

ихенько, ошибка - в сравнении двух doule на равенство.

А как надо?
 
ToporMT4:

А как надо?
А зачем это равенство, длящееся тысячную долю мгновения, если ЕА успеет зафиксировать? И не дождёмся какого-то запланированного важного события! Может, не надо самому себе ставить палки в колёса?!
 
borilunad:
А зачем это равенство, длящееся тысячную долю мгновения, если ЕА успеет зафиксировать? И не дождёмся какого-то запланированного важного события! Может, не надо самому себе ставить палки в колёса?!


Давайте со сравнением double разберемся, поставим правильный эксперимент, а после и к этому вопросу вернемся.