Boa_ZigZag_Arrows_Duplex Indicator For MT5
The Boa_ZigZag_Arrows_Duplex Indicator For MT5 work based on the zigzag indicator and critical pivot points. After installing this indicator in the price chart, you will notice colored dots above and below the candlesticks. Formation of the red dots or circle above the candlestick means, the bears are going to push the price down in the near future. On the contrary, the formation of the blue dots below the candlestick means the buyers are going to push the price higher. You can also find the minor retracement of the price with the help of small brown and blue color dots. Brown color dots forming above the candlestick means the bearish retracement is going to take place. On the contrary, when you spot a blue dots, you might see a bullish retracement in the price. Learn to use this tool in the demo account so that you can make a decent profit without losing too much money.
Installing the Boa_ZigZag_Arrows_Duplex 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 Boa_ZigZag_Arrows_Duplex.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 Boa_ZigZag_Arrows_Duplex Indicator For MT5
The Boa_ZigZag_Arrows_Duplex Indicator For MT5 has 2 parameters to configure.
input uint SlowLength=42; // ?5@8>4 <54;5==>3> 7837030
input uint FastLength=6; // ?5@8>4 1KAB@>3> 7837030
Buffers of the Boa_ZigZag_Arrows_Duplex Indicator For MT5
The Boa_ZigZag_Arrows_Duplex Indicator For MT5 provides 4 buffers.
SetIndexBuffer(0,ZigzagLawnBuffer1,INDICATOR_DATA);
SetIndexBuffer(1,ZigzagPeakBuffer1,INDICATOR_DATA);
SetIndexBuffer(2,ZigzagLawnBuffer2,INDICATOR_DATA);
SetIndexBuffer(3,ZigzagPeakBuffer2,INDICATOR_DATA);
Main Parts Of The Code
int OnCalculate(const int rates_total, // : gt ;8G5AB2 gt 8AB gt @88 2 10@0E =0 B5:CI5 lt B8:5
const int prev_calculated,// : gt ;8G5AB2 gt 8AB gt @88 2 10@0E =0 ?@54K4CI5 lt B8:5
const datetime &time[],
const double &open[],
const double& high[], // F5= gt 2 gt 9 lt 0AA82 lt 0:A8 lt C lt gt 2 F5=K 4;O @0AG5B0 8=48:0B gt @0
const double& low[], // F5= gt 2 gt 9 lt 0AA82 lt 8=8 lt C lt gt 2 F5=K 4;O @0AG5B0 8=48:0B gt @0
const double &close[],
const long &tick_volume[],
const long &volume[],
const int &spread[])
{
//---- ?@ gt 25@:0 : gt ;8G5AB20 10@ gt 2 =0 4 gt AB0B gt G= gt ABL 4;O @0AG5B0
if(rates_total lt min_rates_total) return(0);
//---- gt 1JO2;5=8O ; gt :0;L=KE ?5@5 lt 5==KE
int limit,climit,bar;
double HH,LL,BH,BL;
int zu,zd,Swing,Swing_n;
//----
limit=rates_total-min_rates_total; // AB0@B gt 2K9 = gt lt 5@ 4;O @0AGQB0 2A5E 10@ gt 2
climit=limit; // AB0@B gt 2K9 = gt lt 5@ 4;O @0A:@0A:8 8=48:0B gt @0
//---- 8=45:A0F8O M;5 lt 5=B gt 2 2 lt 0AA820E :0: 2 B09 lt A5@8OE
ArraySetAsSeries(high,true);
ArraySetAsSeries(low,true);
//----
Swing=0;
Swing_n=0;
zu=limit;
zd=limit;
BH=high[limit];
BL=low[limit];
//---- &8:; @0AGQB0 lt 54;5== gt 3 gt 7837030
for(bar=limit; bar gt =0 && !IsStopped(); bar--)
{
ZigzagLawnBuffer1[bar]=NULL;
ZigzagPeakBuffer1[bar]=NULL;
HH=high[ArrayMaximum(high,bar+1,SlowLength)];
LL=low[ArrayMinimum(low,bar+1,SlowLength)];
if(low[bar] lt LL && high[bar] gt HH)
{
Swing=2;
if(Swing_n== 1) zu=bar+1;
if(Swing_n==-1) zd=bar+1;
}
else
{
if(low [bar] lt LL) Swing=-1;
if(high[bar] gt HH) Swing= 1;
}
if(Swing!=Swing_n && Swing_n!=0)
{
if(Swing==2) {Swing=-Swing_n; BH=high[bar]; BL=low[bar];}
if(Swing== 1)
{
if(BL==low[zd]) ZigzagLawnBuffer1[zd]=BL;
else ZigzagLawnBuffer1[zd-1]=BL;
}
if(Swing==-1)
{
if(BH==high[zu]) ZigzagPeakBuffer1[zu]=BH;
else ZigzagPeakBuffer1[zu-1]=BH;
}
BH=high[bar];
BL=low [bar];
}
if(Swing== 1) {if(high[bar] gt =BH) {BH=high[bar]; zu=bar;}}
if(Swing==-1) {if(low [bar] lt =BL) {BL=low [bar]; zd=bar;}}
Swing_n=Swing;
}
//----
Swing=0;
Swing_n=0;
zu=limit;
zd=limit;
BH=high[limit];
BL=low[limit];
//---- &8:; @0AGQB0 1KAB@ gt 3 gt 7837030
for(bar=limit; bar gt =0 && !IsStopped(); bar--)
{
ZigzagLawnBuffer2[bar]=NULL;
ZigzagPeakBuffer2[bar]=NULL;
HH=high[ArrayMaximum(high,bar+1,FastLength)];
LL=low[ArrayMinimum(low,bar+1,FastLength)];
if(low[bar] lt LL && high[bar] gt HH)
{
Swing=2;
if(Swing_n== 1) zu=bar+1;
if(Swing_n==-1) zd=bar+1;
}
else
{
if(low [bar] lt LL) Swing=-1;
if(high[bar] gt HH) Swing= 1;
}
if(Swing!=Swing_n && Swing_n!=0)
{
if(Swing==2) {Swing=-Swing_n; BH=high[bar]; BL=low[bar];}
if(Swing== 1)
{
if(BL==low[zd]) ZigzagLawnBuffer2[zd]=BL;
else ZigzagLawnBuffer2[zd-1]=BL;
}
if(Swing==-1)
{
if(BH==high[zu]) ZigzagPeakBuffer2[zu]=BH;
else ZigzagPeakBuffer2[zu-1]=BH;
}
BH=high[bar];
BL=low [bar];
}
if(Swing== 1) {if(high[bar] gt =BH) {BH=high[bar]; zu=bar;}}
if(Swing==-1) {if(low [bar] lt =BL) {BL=low [bar]; zd=bar;}}
Swing_n=Swing;
}
//----
return(rates_total);
}
//+------------------------------------------------------------------+