Скачать MetaTrader 5

Вопрос по OBV

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Знаете ли вы, что MQL5 способен создавать собственные графические инструменты?
Serhii Lendych
258
Serhii Lendych 2013.11.14 08:43 

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

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

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

Файлы:
testobv.mq4 1 kb
Dmitry Fedoseev
42892
Dmitry Fedoseev 2013.11.14 10:04  
Кто сказал, что должны быть равные заначения?
Serhii Lendych
258
Serhii Lendych 2013.11.14 10:43  
Integer:
Кто сказал, что должны быть равные заначения?


http://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];  

}

Dmitry Fedoseev
42892
Dmitry Fedoseev 2013.11.14 10:49  
Если даже в коде так, то будет равно. Может быть у вас ошибка в эксперименте.
Serhii Lendych
258
Serhii Lendych 2013.11.14 10:54  
#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" );
      }
   }         
}
Serhii Lendych
258
Serhii Lendych 2013.11.14 10:54  
Где именно ошибка?
Dmitry Fedoseev
42892
Dmitry Fedoseev 2013.11.14 12:20  
Незнаю, но что-то должно быть, это вас интересует, ищите. Накинул OBV на график, нашел два бара с одинаковой ценой, посмотрел на OBV и увидел равенство.
Алексей Тарабанов
7195
Алексей Тарабанов 2013.11.14 13:30  
ToporMT4:

ихенько, ошибка - в сравнении двух doule на равенство.
Serhii Lendych
258
Serhii Lendych 2013.11.14 14:31  
tara:

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

А как надо?
Boris
3901
Boris 2013.11.14 15:23  
ToporMT4:

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


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

12
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий