(8)MACD柱线与K线背离指标源码

macd柱和k线使卷曲演奏者源cod

    显示图形的归结为,该目的是追究使卷曲目的的最适度目的。,它将走到k线的峰值。、溪谷,在macd列中,峰溪谷如今非常赞许地肥沃的,这是最理想的目的经过。

    接下来,我将知识它的体系结构陈说和运用技术,因而,ea铸模可以在未来体格,陈设根底。

//+————————————————————————————————+

//| FX5_Divergence.mq4 |

//| FX5 |

//| hazem@uk2.net |

//+————————————————————————————————-+

#property copyright “Copyright ?2007, FX5”

#property link :hazem@uk2.net

//—-根本界说

#property indicator_separate_window 在子图中显示

#property indicator_buffers 5 界说5美元钞票衣服

#property indicator_color1 LimeGreen 一线色-橘色的绿色

#property indicator_color2 FireBrick 2号线使脸红-火砖色

#property indicator_color3 Green 第3行色-绿色

#property indicator_color4 Red 第4行色-白色

//—- input parameters表面偏爱

extern string separator1 = “*** OSMA Settings ***”; MACD列设置

extern int fastEMA = 12; 快线圆数

extern int slowEMA = 26; 慢行圆数

extern int signal = 9; 运动会圆数

extern string separator2 = “*** Indicator Settings ***”; //目的设置

extern bool drawDivergenceLines = true; 离线绘制=真

extern bool displayAlert = true; //记号显示=真

//—- buffers衣服界说十进位的型

double upOsMA[]; MACD气缸占领

double downOsMA[]; MACD列渐减

double bullishDivergence[]; 牛使卷曲

double bearishDivergence[]; //熊背离

double OsMA[]; MACD列

//—-

static datetime lastAlertTime; 定态变量时期日期典型:前番告警时期

//+——————————————————————+

//| Custom indicator initialization function |

//+——————————————————————+

int init() //附加费时运行

{

//—- indicators

SetIndexStyle(0, DRAW_HISTOGRAM, STYLE_SOLID, 2);

目的典型(目的-0),画柱线,可靠的线,宽-2像素)

SetIndexStyle(1, DRAW_HISTOGRAM, STYLE_SOLID, 2);

//目的典型(键入-1,画柱线,可靠的线,宽-2像素)

SetIndexStyle(2, DRAW_ARROW);

目的典型(目的2),绘制箭镟)

SetIndexStyle(3, DRAW_ARROW);

目的典型(目的3),绘制箭镟)

SetIndexStyle(4, DRAW_NONE);

目的典型(目的4),不注意推测)

//—-

SetIndexBuffer(0, up奥斯马) 目的演奏者(目的-0),MACD柱线占领)

SetIndexBuffer(1, down奥斯马) //目的键入(键入-1,MACD列回绝)

SetIndexBuffer(2, bullishDivergence); 目的键入(键入2,牛的对立)

SetIndexBuffer(3, bearishDivergence); 目的键入(键入-3,熊背离)

SetIndexBuffer(4, 奥斯马) 目的演奏者(目的4),MACD列)

//—-

SetIndexArrow(2, 233); 箭镟典型(键入-2),编号233)

SetIndexArrow(3, 234); 箭镟典型(键入-3),第234号)

//—-

IndicatorDigits(Digits + 2); 目的采取十进位的位(流传的钱币除外,十进位的位 2,也许流传的钱币对的十进位的位数是,主管十进位的位数:5+2=7,保存七位十进位的,为了在计算中建立舍入,举行计列。

IndicatorShortName(“(” + fastEMA + “,” + slowEMA + “,” + signal + “)”); //目的约分(“FX_背离目的(紧紧地EMA,慢EMA,庄严的以环连结)

统计表(0)

}

//+——————————————————————+

//| Custom indicator deinitialization function |

//+——————————————————————+

int deinit() //去除负担时运行

{

for(国内的 i = ObjectsTotal() – 1; i >= 0; i–) //以环连结反省(情郎总额-1,0,渐减1)

{

string label = 情郎名(一) //变量-发短信型:tag=情郎名(i)

也许(stringsubstr(label, 0, 14) != “DivergenceLine”)

if(摘要发短信(紧跟),以0个性格启程,使性格大量=14)离线

continue; //持续

ObjectDelete(label); 裁剪情郎(紧跟)

}

统计表(0)

}

//+——————————————————————+

//| Custom indicator iteration function |

//+——————————————————————+

int start() //主职务

{

int countedBars = IndicatorCounted(); 计算k线数=k线总职务

if(countedBars < 0) // 也许(计算K线数< 0)

countedBars = 0; 计算k行数

CalculateIndicator(countedBars); 训示符计算(计算k行数)-自界说职务cal

统计表(0)

}

//+——————————————————————+

//|自界说职务不统计表典型:目的计算|

//+——————————————————————+

void CalculateIndicator(int countedBars) //自界说职务:目的计算(计算K线数)

{

for(国内的 i = Bars – countedBars; i >= 0; i–) 以环连结反省(i=k行数-计算k行数,0,i=i-1)

{

CalculateOsMA(i); 计算macd列(i)-自界说职务

CatchBullishDivergence(i + 2); 夺取牛使卷曲职务(i 2)-自界说职务

CatchBearishDivergence(i + 2); //捕获熊背离职务(i+2)-自界说职务

}

}

//+——————————————————————+

//|自界说职务不统计表典型:计算MACD柱线|

//+——————————————————————+

void CalculateOsMA(int i)//自界说职务:计算MACD柱线

{

奥斯玛 = iOsMA(空, 0, fastEMA, slowEMA, signal, PRICE_CLOSE, i);

MACD列[i]=转移MACD柱线职务(流传的钱币对,流传的标示于图表上,紧紧地EMA,慢EMA,运动会圆,定居点,i)

if(奥斯玛 > 0) if(macd列[i]>0)

{

up奥斯玛 = 奥斯玛; MACD气缸占领[i]= MACD列[I]

down奥斯玛 = 0; MACD列渐减[i]=0

}

else

if(奥斯玛 < 0) //也许(MACD列[I]<0)

{

down奥斯玛 = 奥斯玛; MACD列渐减[i]=MACD列[I]

up奥斯玛 = 0; MACD气缸占领[i]=0

}

else

{

up奥斯玛 = 0; MACD气缸占领[i]=0

down奥斯玛 = 0; MACD列渐减[i]=0

}

}

//+——————————————————————+

//|自界说职务不统计表典型:捕牛使卷曲职务|

//+——————————————————————+

void CatchBullishDivergence(int 等级) //捕牛使卷曲职务(K行数)

{

if(IsIndicatorTrough(等级) == 不舒服的) //也许(设想是目的的浪尖(K行数)=假)

return;

int currentTrough = shift; //变量-积分的型:电流槽=K线规

int lastTrough = GetIndicatorLastTrough(等级);

//变量-积分的型:前番浪尖=获取目的的前番浪尖(K行数)

也许(OSMA[电流槽] > OsMA[lastTrough] && Low[currentTrough] < Low[lastTrough])

if(macd列[电流槽 MACD柱[决赛一个人槽] 且 K线低物价[流传的低谷 > K线低物价[决赛低谷]

{

bullishDivergence[currentTrough] = OsMA[currentTrough];

牛使卷曲[流传的浪尖]=MACD柱[流传的溪谷

if(drawDivergenceLines == 彻底地的) 也许(脱机制图=真)

{

DrawPriceTrendLine(Time[currentTrough], Time[lastTrough],

Low[currentTrough], Low[lastTrough], Green, STYLE_SOLID);

绘制价钱癖好线(可容纳若干座位[流传的低谷,可容纳若干座位[决赛一个人槽],最低限度物价钱[流传的谷底,最低限度物价钱[决赛一个人低谷],绿色,整行)

DrawIndicatorTrendLine(Time[currentTrough], Time[lastTrough],

OsMA[currentTrough],OsMA[lastTrough], Green, STYLE_SOLID);

绘制演奏者癖好线(可容纳若干座位[流传的低谷,可容纳若干座位[决赛一个人槽],MACD柱[流传的溪谷,MACD柱[决赛一个人槽],绿色,整行)

}

if(displayAlert == 彻底地的) if(显示记号=真)

DisplayAlert(“Classical bullish divergence on: “, currentTrough);

显示记号(涌现基准牛使卷曲:”,电流槽)

}

也许(OSMA[电流槽] < OsMA[lastTrough] && Low[currentTrough] > Low[lastTrough])

//也许(MACD柱[流传的溪谷最低限度物价钱[决赛一个人低谷])

{

bullishDivergence[currentTrough] = OsMA[currentTrough];

牛使卷曲[流传的浪尖]=MACD柱[流传的溪谷

if(drawDivergenceLines == 彻底地的) 也许(脱机制图=真)

{

DrawPriceTrendLine(Time[currentTrough], Time[lastTrough], Low[currentTrough],

Low[lastTrough], Green, STYLE_DOT);

绘制价钱癖好线(可容纳若干座位[流传的低谷,可容纳若干座位[决赛一个人槽],最低限度物价钱[流传的谷底,最低限度物价钱[决赛一个人低谷],绿色,点和线)

DrawIndicatorTrendLine(Time[currentTrough], Time[lastTrough],

OsMA[currentTrough],OsMA[lastTrough], Green, STYLE_DOT);

绘制演奏者癖好线(可容纳若干座位[流传的低谷,可容纳若干座位[决赛一个人槽],MACD柱[流传的溪谷,MACD柱[决赛一个人槽],绿色,点和线)

}

if(displayAlert == 彻底地的) 也许(正告记号显示=真

DisplayAlert(“Reverse bullish divergence on: “, currentTrough);

正告记号显示(涌现反向牛分歧:”,电流槽)

}

}

//+——————————————————————+

//|自界说职务不统计表典型:捕获熊背离职务|

//+——————————————————————+

void CatchBearishDivergence(int 等级) //捕获熊背离职务(K行数)

{

if(IsIndicatorPeak(等级) == 不舒服的) //也许(设想是目的的波谷(K行数)=假)

return;

int currentPeak = shift; //流传的波谷=K线序号

int lastPeak = GetIndicatorLastPeak(等级); //前番波谷=获取目的的前番波谷(K行数)

if(OsMA[currentPeak] < OsMA[lastPeak] && High[currentPeak] > High[lastPeak])

//也许(MACD柱线[流传的波谷]绝对价[前番波谷])

{

bearishDivergence[currentPeak] = OsMA[currentPeak];

//熊背离[流传的波谷]=MACD柱线[流传的波谷]

if(drawDivergenceLines == 彻底地的) 也许(脱机制图=真)

{

DrawPriceTrendLine(Time[currentPeak], Time[lastPeak], High[currentPeak],

High[lastPeak], Red, STYLE_SOLID);

//画价钱癖好线(可容纳若干座位[流传的波谷],可容纳若干座位[前番波谷],绝对价[流传的波谷],绝对价[前番波谷],白色,整行)

DrawIndicatorTrendLine(Time[currentPeak], Time[lastPeak], OsMA[currentPeak],

OsMA[lastPeak], Red, STYLE_SOLID);

//绘制演奏者癖好线(可容纳若干座位[流传的波谷],可容纳若干座位[前番波谷],MACD柱线[流传的波谷],MACD柱线[前番波谷],白色,整行)

}

if(displayAlert == 彻底地的) //也许(记号显示=真)

DisplayAlert(“Classical bearish divergence on: “, currentPeak);

//记号显示(“基准熊背离涌现:”+流传的波谷)

}

if(OsMA[currentPeak] > OsMA[lastPeak] && High[currentPeak] < High[lastPeak])

//也许(MACD柱线[流传的波谷]>MACD柱线[前番波谷] 且绝对价[流传的波谷]<绝对价[前番波谷])

{

bearishDivergence[currentPeak] = OsMA[currentPeak];

//熊背离[流传的波谷]=MACD柱线[流传的波谷]

if(drawDivergenceLines == 彻底地的) 也许(脱机制图=真)

{

DrawPriceTrendLine(Time[currentPeak], Time[lastPeak], High[currentPeak],

High[lastPeak], Red, STYLE_DOT);

//画价钱癖好线(可容纳若干座位[流传的波谷],可容纳若干座位[前番波谷],绝对价[流传的波谷],绝对价[前番波谷],白色,点和线)

DrawIndicatorTrendLine(Time[currentPeak], Time[lastPeak], OsMA[currentPeak],

OsMA[lastPeak], Red, STYLE_DOT);

//绘制演奏者癖好线(可容纳若干座位[流传的波谷],可容纳若干座位[前番波谷],MACD柱线[流传的波谷],MACD柱线[前番波谷],白色,点和线)

}

if(displayAlert == 彻底地的) 也许(正告记号显示=真

DisplayAlert(“Reverse bearish divergence on: “, currentPeak);

//警示记号显示(“反向熊背离涌现:”+流传的波谷)

}

}

//+——————————————————————+

//|自界说职务逻辑型:判别目的波谷职务|

//+——————————————————————+

bool IsIndicatorPeak(int 等级) //判别目的设想为波谷(K行数)

{

if(OsMA[shift] > 0 && OsMA[shift] > OsMA[shift+1] && OsMA[shift] > OsMA[shift-1])

//也许(MACD柱线[K线序号]>0 且 MACD柱线[K线序号]> MACD柱线[K线序号+1] 且MACD柱线[K线序号]> MACD柱线[K线序号-1])

{

for(国内的 i = shift + 1; i < Bars; i++) //以环连结查找(i=K线序号+1,i

{

if(奥斯玛 < 0) //也许(MACD列[I]<0)

return(彻底地的);

if(奥斯玛 > OsMA[shift]) 也许(MACD列[I]>MACD列[K行数]

break; //跳绳

}

}

return(不舒服的); 统计表(假)

}

//+——————————————————————+

//|自界说职务逻辑型:判别目的浪尖职务|

//+——————————————————————+

bool IsIndicatorTrough(int 等级) //判别目的设想为浪尖(K行数)

{

if(OsMA[shift] < 0 && OsMA[shift] < OsMA[shift+1] && OsMA[shift] < OsMA[shift-1])

//也许(MACD柱线[K线序号]<0 且 MACD柱线[K线序号]< MACD柱线[K线序号+1] 且MACD柱线[K线序号]>

{

for(国内的 i = shift + 1; i < Bars; i++) //以环连结查找(i=K线序号+1,i

{

if(奥斯玛 > 0) //也许(MACD列[I]>0)

return(彻底地的);

if(奥斯玛 < OsMA[shift]) //也许(MACD列[I]>MACD列[K行数]

break; //跳绳

}

}

return(不舒服的); //统计表(假)

}

//+——————————————————————+

//|自界说职务积分的型:获取目的前番波谷|

//+——————————————————————+

int GetIndicatorLastPeak(int 等级) //获取目的前番波谷(K线序号)

{

for(国内的 i = shift + 5; i < Bars; i++) //以环连结查找(i=K线序号+5;i

{

if(奥斯玛 >= OsMA[i+1] && 奥斯玛 > OsMA[i+2] &&

奥斯玛 >= OsMA[i-1] && 奥斯玛 > OsMA[i-2])

//也许(MACD列[I] >=MACD柱线[i+1] 且MACD列[I]>MACD柱线[i+2]

且MACD列[I] >=MACD柱线[i-1] 且MACD列[I]>MACD柱线[i-2])

return(i); //统计表(i)

}

return(-1); //统计表(-1)

}

//+——————————————————————+

//|自界说职务积分的型:获取目的前番浪尖|

//+——————————————————————+

int GetIndicatorLastTrough(int 等级) //获取目的前番浪尖(K线序号)

{

for(国内的 i = shift + 5; i < Bars; i++) //以环连结查找(i=K线序号+5;i

{

if(奥斯玛 <= OsMA[i+1] && 奥斯玛 < OsMA[i+2] &&

奥斯玛 <= OsMA[i-1] && 奥斯玛 < OsMA[i-2])

//也许(MACD列[I] <=MACD柱线[i+1] 且MACD列[I]

且MACD列[I] <=MACD柱线[i-1] 且MACD列[I]

return(i); //统计表(i)

}

return(-1); //统计表(-1)

}

//+——————————————————————+

//|自界说职务不统计表典型:警示记号显示|

//+——————————————————————+

void DisplayAlert(string message, int 等级) //警示记号显示(使活跃,K线序号)

{

if(shift <= 2 && Time[shift] != lastAlertTime)

//也许(K线序号<=2 且 可容纳若干座位[K线序号]≠前番记号可容纳若干座位)

{

lastAlertTime = Time[shift]; //前番记号可容纳若干座位=可容纳若干座位[K线序号]

Alert(message, Symbol(), ” , “, Period(), ” minutes chart”);

//发出爆裂声正告窗口(使活跃,流传的钱币对,“,”流传的圆,分钟计算

}

}

//+——————————————————————+

//|自界说职务不统计表典型:画价钱趋线|

//+——————————————————————+

void DrawPriceTrendLine(datetime x1, datetime x2, double y1,

double y2, color lineColor, double 作风)

//画价钱趋线(X1-时期日期型,X2-时期日期型,Y1-十进位的型,Y2-十进位的型,推测色,推测典型十进位的型)

{

string label = ” ” + DoubleToStr(x1, 0);

//紧跟=“背离线”+十进位的到发短信(X1,0)

ObjectDelete(label); 裁剪情郎(紧跟)

ObjectCreate(label, OBJ_TREND, 0, x1, y1, x2, y2, 0, 0);

//到达情郎(紧跟),癖好线,0,X1,Y1,X2,Y2,0,0,)

情郎集(紧跟, OBJPROP_RAY, 0); 情郎特点设置(紧跟,射线,0)

情郎集(紧跟, OBJPROP_COLOR, lineColor); 情郎特点设置(紧跟,色,推测色)

情郎集(紧跟, OBJPROP_STYLE, 作风) 情郎特点设置(紧跟,推测典型,典型)

}

//+——————————————————————+

//|自界说职务不统计表典型:绘制演奏者癖好线|

//+——————————————————————+

void DrawIndicatorTrendLine(datetime x1, datetime x2, double y1,

double y2, color lineColor, double 作风)

//绘制演奏者癖好线(X1-时期日期型,X2-时期日期型,Y1-十进位的型,Y2-十进位的型,推测色,典型十进位的典型)

{

int indicatorWindow = WindowFind(“(” + fastEMA + “,” + slowEMA + “,” + signal + “)”);

键入窗口号=键入反省(fx5_使卷曲( express ema,慢EMA,”+运动会圆+“)”)

if(indicatorWindow < 0)

if(键入窗口数<0

return;

string label = “$# ” + DoubleToStr(x1, 0);

label content=离线$ 数字到发短信(x1),0)

ObjectDelete(label);

裁剪情郎(紧跟)

ObjectCreate(label, OBJ_TREND, indicatorWindow, x1, y1, x2, y2, 0, 0);

到达情郎(紧跟),趋线,主管窗口,X1,Y1,X2,Y2,0,0)

情郎集(紧跟, OBJPROP_RAY, 0);

情郎特点设置(紧跟,射线,0)

情郎集(紧跟, OBJPROP_COLOR, lineColor);

情郎特点设置(紧跟,色,推测色)

情郎集(紧跟, OBJPROP_STYLE, 作风)

情郎特点设置(紧跟,推测典型,典型)

}

//+——————————————————————+

clip_image002

正文:MACD柱线职务=iOsMA()

在是你这么说的嘛!度量中转移的职务osma,实为:MACD(12个,26,9)时期柱状图。