VWAP_codebase

Author: Abraão Moreira
0 Views
0 Downloads
0 Favorites
VWAP_codebase
ÿþ//+------------------------------------------------------------------+

//|                                                         VWAP.mq5 |

//|                                                   Abraão Moreira |

//|                                                abraaomoreira.com |

//+------------------------------------------------------------------+

#property copyright "Abraão Moreira"

#property link      "abraaomoreira.com"

#property version   "1.00"

#property indicator_chart_window

#property indicator_buffers 1

#property indicator_plots   1



//--- plot vwap

#property indicator_label1  "vwap"

#property indicator_type1   DRAW_LINE

//--- indicator buffers

double         vwapBuffer[];



input int vwapPeriod = 200;                       //VWAP Period

input color lineColor = C'255, 184, 108';         //Line Color

input int lineWidth = 2;                          //Line Width

input ENUM_LINE_STYLE lineStyle = STYLE_SOLID;    //Line Style



bool first = true;

//+------------------------------------------------------------------+

//| Custom indicator initialization function                         |

//+------------------------------------------------------------------+

int OnInit() {

//--- indicator buffers mapping

  SetIndexBuffer(0,vwapBuffer,INDICATOR_DATA);

  

  PlotIndexSetInteger(0, PLOT_LINE_COLOR, lineColor);

  PlotIndexSetInteger(0, PLOT_LINE_WIDTH, lineWidth);

  PlotIndexSetInteger(0, PLOT_LINE_STYLE, lineStyle);

//---

  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[]) {

  double vwapVolumes[], vwapCloses[];



  if(first) {

    for(int i = vwapPeriod; i < rates_total; i++) {

      ArrayCopy(vwapVolumes, volume, 0, (i-vwapPeriod), vwapPeriod);

      ArrayCopy(vwapCloses, close, 0, (i-vwapPeriod), vwapPeriod);

      vwapBuffer[i] = VWAP(vwapCloses, vwapVolumes);

    }

    first = false;

  } else {

    ArrayCopy(vwapVolumes, volume, 0, (rates_total-vwapPeriod), vwapPeriod);

    ArrayCopy(vwapCloses, close, 0, (rates_total-vwapPeriod), vwapPeriod);

    vwapBuffer[rates_total-1] = VWAP(vwapCloses, vwapVolumes);

  }

//--- return value of prev_calculated for next call

  return(rates_total);

}



//+------------------------------------------------------------------+

//|  VWAP calculator function                                        |

//+------------------------------------------------------------------+

int VWAP (double &prices[], double &volumes[]){

  double value = 0;

  double sumVolume = 0; 

  for(int i = 0; i < ArraySize(prices); i++){

    value += prices[i]*volumes[i];

    sumVolume += volumes[i];

  }

  if(sumVolume == 0)

    return 0;

  value = value / sumVolume;

  return (int)value;

}



//+------------------------------------------------------------------+



Comments

Markdown supported. Formatting help

Markdown Formatting Guide

Element Markdown Syntax
Heading # H1
## H2
### H3
Bold **bold text**
Italic *italicized text*
Link [title](https://www.example.com)
Image ![alt text](image.jpg)
Code `code`
Code Block ```
code block
```
Quote > blockquote
Unordered List - Item 1
- Item 2
Ordered List 1. First item
2. Second item
Horizontal Rule ---