//+------------------------------------------------------------------+
//| Ticks Volume |
//| Version 1.1 |
//+------------------------------------------------------------------+
#property indicator_separate_window
#property indicator_minimum 0
#property indicator_maximum 100
#property indicator_buffers 2
#property indicator_color1 Lime
#property indicator_color2 Red
#include <MovingAverages.mqh>
//--- input parameters
input int maPeriod1 = 14; // Период первой MA
input int maPeriod2 = 14; // Период второй MA
input int maShift2 = 5; // Сдвиг второй MA на n баров
//--- indicator buffers
double ExtVolumeBuffer[];
double ExtMABuffer1[];
double ExtMABuffer2[];
//--- handles for moving averages
int maHandle1;
int maHandle2;
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//--- assign buffers
SetIndexBuffer(0, ExtVolumeBuffer, INDICATOR_DATA);
SetIndexBuffer(1, ExtMABuffer1, INDICATOR_DATA);
SetIndexBuffer(2, ExtMABuffer2, INDICATOR_DATA);
//--- set names for legend
IndicatorShortName("Ticks Volume with Two MAs");
//--- create moving average handles
maHandle1 = iMA(NULL, 0, maPeriod1, 0, MODE_SMA, PRICE_CLOSE);
maHandle2 = iMA(NULL, 0, maPeriod2, maShift2, MODE_SMA, PRICE_CLOSE);
if (maHandle1 == INVALID_HANDLE || maHandle2 == INVALID_HANDLE)
{
Print("Failed to create MA handles");
return(INIT_FAILED);
}
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
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[])
{
int begin = prev_calculated;
if (begin == 0) begin = maPeriod1 > maPeriod2 ? maPeriod1 : maPeriod2;
for (int i = begin; i < rates_total; i++)
{
ExtVolumeBuffer[i] = tick_volume[i];
ExtMABuffer1[i] = iMA(NULL, 0, maPeriod1, 0, MODE_SMA, PRICE_CLOSE, i);
ExtMABuffer2[i] = iMA(NULL, 0, maPeriod2, maShift2, MODE_SMA, PRICE_CLOSE, i);
}
return(rates_total);
}
//+------------------------------------------------------------------+