Не могу разобраться с обьемом в MQL5

 
Доброго всем времени суток люди добрые! И привет недобрым людям. Помогите кто знает. Не могу разобраться откуда брать оьем на какой либо свече. На MQL4 там все понятно, берется из функции или массива. В MQL5 же нашел только 

VOLUME_TICK

и 

VOLUME_REAL

но как им пользоваться, и куда его пихать никак не могу разобраться. Как мне выяснить обьем например на 5 свече? или на 10... Даже смешно от такого ламерского вопроса... 

П‌росмотрел в качестве примера стандартный индикатор оьема но и он мне ничего не дал. 

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)                     ///////// вот здесь непонятно, что с чем сравнивают. откуда берется значение 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;
     }
//---
  }

м‌не нужно для начала написать индикатор в котором обьем текущего бара будет сравниваться с предыдущими. Но как это сделать не могу представить. Самое обидное, что инфы в интернете мало очень. Помогите кому не жалко!

 
Смотри CopyRates() и структуру MqlRates там есть тиковые объёмы.
Документация по MQL5: Доступ к таймсериям и индикаторам / CopyRates
Документация по MQL5: Доступ к таймсериям и индикаторам / CopyRates
  • www.mql5.com
Доступ к таймсериям и индикаторам / CopyRates - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 

Дык в OnCalculate() передаются массивы, в которых есть тиковые объемы баров.  Сравнивай себе - и результаты кидай в буфер индикатора.

Какие проблемы-то ? ‌

 

Спасибо! со скрипом начал разбираться. Меня просто блондинка покусала сильно и надолго) теперь я больше трейдер нежели программист)) Думаю надолго не прощаюсь)

 
vitaliy9999999:
Доброго всем времени суток люди добрые! И привет недобрым людям. Помогите кто знает. Не могу разобраться откуда брать оьем на какой либо свече. На MQL4 там все понятно, берется из функции или массива. В MQL5 же нашел только 

VOLUME_TICK

и 

VOLUME_REAL

но как им пользоваться

VOLUME_REAL у вас будет пустой, реальные объёмы дают один из ста брокеров(форекс), и с очень короткой историей.
 

опять туплю! начал заниматься математикой с обьемом на разных барах после OnCalculate() и подавать в буфер индюка, но ничего не получается. Вылазит предупреждение: possible loss of data due to type conversion У меня данные в буфере double а данные в массиве обьема long как с ними бороться?


вывел обьем на втором баре через функцию Print показывает аж: 20012000 и это на минутках... что то не так делаю.... не может быть такого обьема! индикатор обьема показывает 90

п‌люс у меня проблемы с буфером. Гистограмма не рисуется. Пробовал задавать насильно значение вот так:

        for(int i=0; i<limit; i++)   

      {

        if(volume[i]>0)

          {

            Label1Buffer[i]=89;

          }

‌      }

но что то не получается. почему то не рисует?

П‌одскажите ГУРУ!


 

И еще вопрос. Для чего нужны вот эти штуки: VOLUME_TICK и VOLUME_REAL ? инфы по ним немного а понимания еще меньше.

Заранее спасибо за ответы! 

Документация по MQL5: Доступ к таймсериям и индикаторам / CopyRates
Документация по MQL5: Доступ к таймсериям и индикаторам / CopyRates
  • www.mql5.com
Доступ к таймсериям и индикаторам / CopyRates - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
vitaliy9999999:

И еще вопрос. Для чего нужны вот эти штуки: VOLUME_TICK и VOLUME_REAL ? инфы по ним немного а понимания еще меньше.

Заранее спасибо за ответы! 


Y Я так понимаю это разные типы объёмов. Тиковый и реальный, в зависимости от поставщика.
 
Mihail Marchukajtes:

Y Я так понимаю это разные типы объёмов. Тиковый и реальный, в зависимости от поставщика.


конечно! а как их использовать в роботах и индюках?

 
vitaliy9999999:


конечно! а как их использовать в роботах и индюках?


Хм, смотря в каких??? Я например в ИИ активно использую объёмы и дельту :-)

 
vitaliy9999999:

опять туплю! начал заниматься математикой с обьемом на разных барах после OnCalculate() и подавать в буфер индюка, но ничего не получается. Вылазит предупреждение: possible loss of data due to type conversion У меня данные в буфере double а данные в массиве обьема long как с ними бороться?


вывел обьем на втором баре через функцию Print показывает аж: 20012000 и это на минутках... что то не так делаю.... не может быть такого обьема! индикатор обьема показывает 90

п‌люс у меня проблемы с буфером. Гистограмма не рисуется. Пробовал задавать насильно значение вот так:

Вы переворачивали массив ArraySetAsSeries

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[])
  {
   double vol1,vol2;
   ArraySetAsSeries(tick_volume,true); // развернём
  // vol1= (double)iVolume(NULL,PERIOD_CURRENT,1); // равносильно второй записи, но в mql4
   vol2= (double)tick_volume[1]; // равносильно первой записи
   Comment( vol1," = ",vol2 );

Данные будут одинаковы

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