VWAP bands Indicator For MT5

VWAP bands Indicator For MT5

Table Of Contents:

  1. VWAP bands Indicator For MT5
  2. Installing the VWAP bands Indicator For MT5
  3. Parameters of the VWAP bands Indicator For MT5
  4. Buffers of the VWAP bands Indicator For MT5
  5. Main Parts Of The Code

The VWAP bands Indicator For MT5 is similar to the bollinger bands indicator but instead of the EMA as the middle line the VWAP bands uses the volume weighted moving average. This approach with the volume can produce some leading information which you would not get by simply looking at the price. You can trade the strong moving zones and the squeezes as with the original bollinger bands indicator.

FREE VWAP bands Indicator

Download the FREE VWAP bands Indicator for MT5.

To receive my email 100% sure: 
Put my email on your whitelist!

 

Partially Automated Trading Besides Your Day Job

Alerts In Real-Time When Divergences Occur

 

Installing the VWAP bands Indicator For MT5

After you downloaded the indicator via the form above you need to unzip the zip-file. Then you need to copy the file vwap_bands.mq5 into the folder MQL5\Indicators of your MT5 installation. After that please restart MT5 and then you will be able to see the indicator in the list of indicators.

Parameters of the VWAP bands Indicator For MT5

The VWAP bands Indicator For MT5 has 7 parameters to configure.

input int        AvgPeriod           = 20;          // Volume weighted average period input enPrices   Price               = pr_close;    // Price input bool       UseRealVolume       = false;       // Use real volume? input bool       DeviationSample     = false;       // Deviation with sample correction? input double     DeviationMuliplier1 = 1;           // First band(s) deviation input double     DeviationMuliplier2 = 2;           // Second band(s) deviation input double     DeviationMuliplier3 = 2.5;         // Third band(s) deviation 

Buffers of the VWAP bands Indicator For MT5

The VWAP bands Indicator For MT5 provides 8 buffers.

SetIndexBuffer(0,bandu3 ,INDICATOR_DATA); SetIndexBuffer(1,bandu2 ,INDICATOR_DATA); SetIndexBuffer(2,bandu1 ,INDICATOR_DATA); SetIndexBuffer(3,bandm  ,INDICATOR_DATA); SetIndexBuffer(4,bandd1 ,INDICATOR_DATA); SetIndexBuffer(5,bandd2 ,INDICATOR_DATA); SetIndexBuffer(6,bandd3 ,INDICATOR_DATA); SetIndexBuffer(7,prices ,INDICATOR_CALCULATIONS); 

Main Parts Of The Code

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& real_volume[],                 const int& spread[]) {    if (Bars(_Symbol,_Period) lt rates_total) return(-1);        //    //    //    //    //        int i=(int)MathMax(prev_calculated-1,0); for (; i lt rates_total && !_StopFlag; i++)    {       prices[i] = getPrice(Price,open,close,high,low,i,rates_total);          double sum1=0,sum2=0, deviation = iDeviation(prices[i],AvgPeriod,DeviationSample,i,rates_total); 		      for (int k=0; k lt AvgPeriod && (i-k) gt =0; k++) 		      { 		         double volume = (UseRealVolume) ? (double)real_volume[i-k] : (double)tick_volume[i-k]; 		            sum1 += volume*prices[i-k]; 			         sum2 += volume; 		      } 		      bandm[i]  = (sum2!=0) ? sum1/sum2 : prices[i]; 		      bandu1[i] = (DeviationMuliplier1 gt 0) ? bandm[i]+DeviationMuliplier1*deviation : EMPTY_VALUE; 		      bandd1[i] = (DeviationMuliplier1 gt 0) ? bandm[i]-DeviationMuliplier1*deviation : EMPTY_VALUE; 		      bandu2[i] = (DeviationMuliplier2 gt 0) ? bandm[i]+DeviationMuliplier2*deviation : EMPTY_VALUE; 		      bandd2[i] = (DeviationMuliplier2 gt 0) ? bandm[i]-DeviationMuliplier2*deviation : EMPTY_VALUE; 		      bandu3[i] = (DeviationMuliplier3 gt 0) ? bandm[i]+DeviationMuliplier3*deviation : EMPTY_VALUE; 		      bandd3[i] = (DeviationMuliplier3 gt 0) ? bandm[i]-DeviationMuliplier3*deviation : EMPTY_VALUE;    }             return(i); }  //------------------------------------------------------------------ //                                                                   //------------------------------------------------------------------ //  // // // //  double workDev[]; double iDeviation(double value, int length, bool isSample, int i, int bars) {    if (ArraySize(workDev)!=bars) ArrayResize(workDev,bars); workDev[i] = value;                      //    //    //    //    //           double oldMean   = value;       double newMean   = value;       double squares   = 0; int k;       for (k=1; k lt length && (i-k) gt =0; k++)       {          newMean  = (workDev[i-k]-oldMean)/(k+1)+oldMean;          squares += (workDev[i-k]-oldMean)*(workDev[i-k]-newMean);          oldMean  = newMean;       }       return(MathSqrt(squares/MathMax(k-isSample,1))); }  //------------------------------------------------------------------ // //------------------------------------------------------------------ // // // // // //  #define _pricesInstances 1 #define _pricesSize      4 double workHa[][_pricesInstances*_pricesSize]; double getPrice(int tprice, const double& open[], const double& close[], const double& high[], const double& low[], int i,int _bars, int instanceNo=0) {   if (tprice gt =pr_haclose)    {       if (ArrayRange(workHa,0)!= _bars) ArrayResize(workHa,_bars); instanceNo*=_pricesSize;                    //          //          //          //          //                    double haOpen;          if (i gt 0)                 haOpen  = (workHa[i-1][instanceNo+2] + workHa[i-1][instanceNo+3])/2.0;          else   haOpen  = (open[i]+close[i])/2;          double haClose = (open[i] + high[i] + low[i] + close[i]) / 4.0;          double haHigh  = MathMax(high[i], MathMax(haOpen,haClose));          double haLow   = MathMin(low[i] , MathMin(haOpen,haClose));           if(haOpen   lt haClose) { workHa[i][instanceNo+0] = haLow;  workHa[i][instanceNo+1] = haHigh; }           else                 { workHa[i][instanceNo+0] = haHigh; workHa[i][instanceNo+1] = haLow;  }                                  workHa[i][instanceNo+2] = haOpen;                                 workHa[i][instanceNo+3] = haClose;          //          //          //          //          //                    switch (tprice)          {             case pr_haclose:     return(haClose);             case pr_haopen:      return(haOpen);             case pr_hahigh:      return(haHigh);             case pr_halow:       return(haLow);             case pr_hamedian:    return((haHigh+haLow)/2.0);             case pr_hamedianb:   return((haOpen+haClose)/2.0);             case pr_hatypical:   return((haHigh+haLow+haClose)/3.0);             case pr_haweighted:  return((haHigh+haLow+haClose+haClose)/4.0);             case pr_haaverage:   return((haHigh+haLow+haClose+haOpen)/4.0);             case pr_hatbiased:                if (haClose gt haOpen)                      return((haHigh+haClose)/2.0);                else  return((haLow+haClose)/2.0);                     case pr_hatbiased2:                if (haClose gt haOpen)  return(haHigh);                if (haClose lt haOpen)  return(haLow);                                     return(haClose);                  }    }        //    //    //    //    //        switch (tprice)    {       case pr_close:     return(close[i]);       case pr_open:      return(open[i]);       case pr_high:      return(high[i]);       case pr_low:       return(low[i]);       case pr_median:    return((high[i]+low[i])/2.0);       case pr_medianb:   return((open[i]+close[i])/2.0);       case pr_typical:   return((high[i]+low[i]+close[i])/3.0);       case pr_weighted:  return((high[i]+low[i]+close[i]+close[i])/4.0);       case pr_average:   return((high[i]+low[i]+close[i]+open[i])/4.0);       case pr_tbiased:                   if (close[i] gt open[i])                      return((high[i]+close[i])/2.0);                else  return((low[i]+close[i])/2.0);               case pr_tbiased2:                   if (close[i] gt open[i]) return(high[i]);                if (close[i] lt open[i]) return(low[i]);                                      return(close[i]);            }    return(0); } 

 

About Me

I'm Mike Semlitsch the owner of PerfectTrendSystem.com. My trading career started in 2007. Since 2013 I have helped thousands of traders to take their trading to the next level. Many of them are now constantly profitable traders. 

The following performance was achieved by me while trading live in front of hundreds of my clients:

Connect With Me:  

Results From 5 Months!
This service starts soon! Be the first who get's notified when it begins!

This FREE Indicator Can Transform
Your Trading!

FREE Indicator + Telegram Group


Request the Ultimate Double Top/Bottom Indicator which is used by 10,000+ traders.