индикатор Volumes ( помогите!))) )

 

 Доброго времени суток, уважаемые гуру рынка!

Прошу подсобить в понимании индикатора Volumes.

Ковыряясь в просторах интернета, удалось выяснить, что данный индикатор показывает количество изменений цен BID/ASK за определенный временной период.

То есть, для того чтобы произошло увеличение текущего столбика индикатора на 1, необходимо изменение цены либо BID, либо ASK хотя бы на 0,00001.

В терминале на таймфрейме 1М вижу, что значение текущего столбика Volumes достигло значения ~1500, хотя количество изменений цен BID/ASK на соответствующей столбику свече было равно ~300.

Прошу скорректировать, как понимать подобные цифры...

 
ArtemTrade:

хотя количество изменений цен BID/ASK на соответствующей столбику свече было равно ~300.

Каким образом получили значение 300? Просто сидели и считали?
 

программно. Если новые значения BID/ASK отличаются от предыдущих, то +1. Делал на ф-ии OnTick 

 
ArtemTrade:

программно. Если новые значения BID/ASK отличаются от предыдущих, то +1. Делал на ф-ии OnTick 

В индикаторе нет OnTick() :). 
 
В индикаторе нет. В советнике есть.
 
ArtemTrade:
В индикаторе нет. В советнике есть.
Если повесить на график индикатор со счётчиком внутри OnCalculate() и эксперта со счётчиком внутри OnTick() - так, чтобы Вы знали - эти счётчику будут рассогласованы (показывать разные значения). И чем дольше они в паре будут висеть на одном графике, тем рассогласование будет увеличиваться.
 
ArtemTrade:

программно. Если новые значения BID/ASK отличаются от предыдущих, то +1. Делал на ф-ии OnTick 

OnTick  иногда приходит 1 вместо нескольких, особенно если очень интенсивная торговля. Где-то об этом было ... и  что OnCalculate чаще приходит...
 
elibrarius:
OnTick  иногда приходит 1 вместо нескольких, особенно если очень интенсивная торговля. Где-то об этом было ...

В документации, конечно-же! NewTick 

NewTick

Событие NewTick генерируется при поступлении новых котировок и обрабатывается функцией OnTick() у присоединенных советников. Если при поступлении новой котировки выполнялась функция OnTick, запущенная на предыдущей котировке, то пришедшая котировка будет проигнорирована советником, так как соответствующее событие не будет поставлено в очередь событий эксперта.

Все пришедшие во время выполнения программы новые котировки программой игнорируются до тех пор, пока не завершится очередное выполнение функции OnTick(). После этого функция будет запущена только после прихода очередной новой котировки.

Событие NewTick генерируется независимо от того, запрещена или разрешена автоматическая торговля (кнопка "Разрешить/запретить Авто-торговлю"). Запрет автоматической торговли означает только запрет на отправку торговых запросов из эксперта, работа эксперта не прекращается.

Запрет автоматической торговли путем нажатия на указанную кнопку не прерывает текущее выполнение функции OnTick(). Функция OnTick() не запускается на выполнение при открытом окне свойств советника.

 
А в объемах тогда все равно будут отображены и повторяющиеся значения BID/ASK? Это по смыслу индикатора Volumes правильно?
 

Давайте определяться: стандартный индикатор:

//+------------------------------------------------------------------+
//|                                                      Volumes.mq5 |
//|                        Copyright 2009, MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "2009, MetaQuotes Software Corp."
#property link      "http://www.mql5.com"
//---- indicator settings
#property indicator_separate_window
#property indicator_buffers 2
#property indicator_plots   1
#property indicator_type1   DRAW_COLOR_HISTOGRAM
#property indicator_color1  Green,Red
#property indicator_style1  0
#property indicator_width1  1
#property indicator_minimum 0.0
//--- input data
input ENUM_APPLIED_VOLUME InpVolumeType=VOLUME_TICK; // Volumes
//---- indicator buffers
double                    ExtVolumesBuffer[];
double                    ExtColorsBuffer[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
void OnInit()
  {
//---- buffers   
   SetIndexBuffer(0,ExtVolumesBuffer,INDICATOR_DATA);
   SetIndexBuffer(1,ExtColorsBuffer,INDICATOR_COLOR_INDEX);
//---- name for DataWindow and indicator subwindow label
   IndicatorSetString(INDICATOR_SHORTNAME,"Volumes");
//---- indicator digits
   IndicatorSetInteger(INDICATOR_DIGITS,0);
//----
  }
//+------------------------------------------------------------------+
//|  Volumes                                                         |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
//---check for rates total
   if(rates_total<2)
      return(0);
//--- starting work
   int start=prev_calculated-1;
//--- correct position
   if(start<1) start=1;
//--- main cycle
   if(InpVolumeType==VOLUME_TICK)
      CalculateVolume(start,rates_total,tick_volume);
   else
      CalculateVolume(start,rates_total,volume);
//--- OnCalculate done. Return new prev_calculated.
   return(rates_total);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void CalculateVolume(const int nPosition,
                     const int nRatesCount,
                     const long &SrcBuffer[])
  {
   ExtVolumesBuffer[0]=(double)SrcBuffer[0];
   ExtColorsBuffer[0]=0.0;
//---
   for(int i=nPosition;i<nRatesCount && !IsStopped();i++)
     {
      //--- get some data from src buffer
      double dCurrVolume=(double)SrcBuffer[i];
      double dPrevVolume=(double)SrcBuffer[i-1];
      //--- calculate indicator
      ExtVolumesBuffer[i]=dCurrVolume;
      if(dCurrVolume>dPrevVolume)
         ExtColorsBuffer[i]=0.0;
      else
         ExtColorsBuffer[i]=1.0;
     }
//---
  }
//+------------------------------------------------------------------+
 

Да, в стандартном коде индикатора не увидел требования на то, чтобы увеличение объема на 1 обязательно сопровождалось изменением цены BID/ASK...

Тогда, если цены BID/ASK не меняются, а тиковый объем увеличивается, то как это правильно понять?

Причина обращения: