Boa_ZigZag_Arrows_Duplex Indicator For MT5
Boa_ZigZag_Arrows_Duplex Indicator For MT5的Boa_ZigZag_Arrows_Duplex Indicator For MT5
安装Boa_ZigZag_Arrows_Duplex Indicator For MT5
通过上面的表格下载指标后,您需要解压缩zip文件。然后,您需要将文件Boa_ZigZag_Arrows_Duplex.mq5复制到MT5安装的文件夹MQL5Indicators中。之后,请重启MT5,然后您将能够在指标列表中看到该指标。
Boa_ZigZag_Arrows_Duplex Indicator For MT5参数
Boa_ZigZag_Arrows_Duplex Indicator For MT5具有要配置的2 参数。
input uint SlowLength=42; // ?5@8>4 <54;5==>3> 7837030
input uint FastLength=6; // ?5@8>4 1KAB@>3> 7837030
Boa_ZigZag_Arrows_Duplex Indicator For MT5缓冲区
Boa_ZigZag_Arrows_Duplex Indicator For MT5提供4 缓冲区。
SetIndexBuffer(0,ZigzagLawnBuffer1,INDICATOR_DATA);
SetIndexBuffer(1,ZigzagPeakBuffer1,INDICATOR_DATA);
SetIndexBuffer(2,ZigzagLawnBuffer2,INDICATOR_DATA);
SetIndexBuffer(3,ZigzagPeakBuffer2,INDICATOR_DATA);
守则主要部分
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);
}
//+------------------------------------------------------------------+