Darvas Box Indicator For MT5
Table Of Contents:
- Darvas Box Indicator For MT5
- Installing the Darvas Box Indicator For MT5
- Parameters of the Darvas Box Indicator For MT5
- Buffers of the Darvas Box Indicator For MT5
- Main Parts Of The Code
The Darvas Box Indicator For MT5 is based on the work of Nicolas Darvas. Darvas boxes are used to trade in direction of new highs and new lows. The boxes make it easy to detect such breakouts. This indicator draws a channel based on the darvas box calculation. The upper boundary of the channel is drawn in blue color while the lower boundary of the channel is drawn with purple color.
Installing the Darvas Box 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 darvasboxes.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 Darvas Box Indicator For MT5
The Darvas Box Indicator For MT5 has 2 parameters to configure.
input bool symmetry=false; input int Shift=0; // Horizontal shift of the indicator in bars
Buffers of the Darvas Box Indicator For MT5
The Darvas Box Indicator For MT5 provides 2 buffers.
SetIndexBuffer(0,UpperBuffer,INDICATOR_DATA); SetIndexBuffer(1,LowerBuffer,INDICATOR_DATA);
Main Parts Of The Code
int OnCalculate(const int rates_total, // number of bars in history at the current tick const int prev_calculated,// number of bars calculated at previous call 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[]) { //---- checking the number of bars to be enough for the calculation if(rates_total lt start) return(0); //---- indexing elements in arrays as timeseries ArraySetAsSeries(high,true); ArraySetAsSeries(low,true); //---- declaration of integer variables int limit,bar; //---- declaration of static variables static int state,STATE; static double box_top,box_bottom,BOX_TOP,BOX_BUTTOM; //---- calculations of the limit starting index for the bars recalculation loop if(prev_calculated gt rates_total || prev_calculated lt =0)// checking for the first start of the indicator calculation { limit=rates_total-start; // starting index for calculation of all bars BOX_TOP=high[limit+1]; BOX_BUTTOM=low[limit+1]; STATE=1; } else { limit=rates_total-prev_calculated; // starting index for calculation of new bars } //---- restore values of the variables state=STATE; box_top=BOX_TOP; box_bottom=BOX_BUTTOM; //---- main indicator calculation loop for(bar=limit; bar gt =0; bar--) { //---- store values of the variables before running at the current bar if(rates_total!=prev_calculated && bar==0) { STATE=state; BOX_TOP=box_top; BOX_BUTTOM=box_bottom; } switch(state) { case 1: box_top=high[bar]; if(symmetry)box_bottom=low[bar]; break; case 2: if(box_top lt =high[bar]) box_top=high[bar]; break; case 3: if(box_top gt high[bar]) box_bottom=low[bar]; else box_top=high[bar]; break; case 4: if(box_top gt high[bar]) {if(box_bottom gt = low[bar]) box_bottom=low[bar];} else box_top=high[bar]; break; case 5: if(box_top gt high[bar]) {if(box_bottom gt = low[bar]) box_bottom=low[bar];} else box_top=high[bar]; state=0; break; } UpperBuffer[bar] = box_top; LowerBuffer[bar] = box_bottom; state++; } //---- return(rates_total); } //+------------------------------------------------------------------+