MACD柱线与K线背离指标源码

MACD柱线和K线脱离指示的源代码

    显示示意图打中产物,左右指示是书房平版印刷的最好方式。,这是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 二线色砖

#property indicator_color3 Green 第三行色绿

#property indicator_color4 Red 四行色红

//—- 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[]; //皇冠体育app

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, upOsMA) 指示指示(指示- 0),MACD柱线继承)

SetIndexBuffer(1, downOsMA) 指示指示(指示- 1),MACD柱突然造访)

SetIndexBuffer(2, bullishDivergence); 指示指示(指示- 2),牛分开)

SetIndexBuffer(3, bearishDivergence); 指示指示(指示- 3),皇冠体育app)

SetIndexBuffer(4, OsMA) 指示指示(指示- 4),MACD柱线)

//—-

SetIndexArrow(2, 233); 天箭座典型(调- 2),编号233)

SetIndexArrow(3, 234); 天箭座典型(调- 3),234号)

//—-

IndicatorDigits(Digits + 2); 调使用一小部分数字(取以后的阿拉伯数字系统 2)。,假设眼前的钱币对小数的位数为5位,则目的小数的位:5+2=7,保存小数的点后7位。,因而计算发生四-五,停止计列。

IndicatorShortName(“(” + fastEMA + “,” + slowEMA + “,” + signal + “)”); 指示(fx_平版印刷指示(短工夫做成的EMA),慢EMA,除去学时)

复回(0)

}

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

//| Custom indicator deinitialization function |

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

int deinit() //扔弃操控

{

为(int i = ObjectsTotal() – 1; i >= 0; i–) 环绕反省(目标总额- 1),0,增加1)

{

string label = 目标(我) 可变因素说法典型:加标签于=目标名(i)

假设(StringSubstr(加标签于, 0, 14) != “DivergenceLine”)

假设说法(加标签于被拔出剑),从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线数=0

CalculateIndicator(countedBars); //目的计算(计算K线数)-自限制行使职责祈求救助

复回(0)

}

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

//|自限制行使职责无复回典型:目的计算|

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

void CalculateIndicator(int countedBars) //自限制行使职责:目的计算(计算K线数)

{

为(int 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); //捕获皇冠体育app行使职责(i+2)-自限制行使职责

}

}

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

//|自限制行使职责无复回典型:计算MACD柱线|

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

void CalculateOsMA(int i)//自限制行使职责:计算MACD柱线

{

奥斯马[我] = iOsMA(空, 0, fastEMA, slowEMA, signal, PRICE_CLOSE, i);

MACD柱行[ i ]=祈求救助MACD柱线的功用(现行钱币对,以后示意图,短工夫做成的EMA,慢EMA,除去学时,解决,i)

假设(OSMA [我] > 0) 假设(MACD柱行I>0)

{

up奥斯马[我] = 奥斯马[我] MACD柱继承[i]= MACD柱行[ i ]

down奥斯马[我] = 0; MACD柱突然造访[i]=0

}

else

假设(OSMA [我] < 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 [ currenttrough ] > OsMA[lastTrough] && Low[currentTrough] < Low[lastTrough])

假设(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 == 真的) 假设(显示以信号告知=真)

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

显示以信号告知(规范乳牛脱离表面):”,眼前的低谷

}

假设(OSMA [ currenttrough ] < 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);

正告以信号告知显示(反向威胁平版印刷):”,眼前的低谷

}

}

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

//|自限制行使职责无复回典型:捕获皇冠体育app行使职责|

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

void CatchBearishDivergence(int 移) //捕获皇冠体育app行使职责(K线数)

{

if(IsIndicatorPeak(移) == 假) //假设(能否是目的的波谷(K线数)=假)

return;

int currentPeak = shift; 电流波谷值k线序列号

int lastPeak = GetIndicatorLastPeak(移); //前番波谷=获取目的的前番波谷(K线数)

假设(OSMA [峰电流] < OsMA[lastPeak] && High[currentPeak] > High[lastPeak])

假设(MACD柱线[以后波谷值]最高的价钱[最末一波])

{

bearishDivergence[currentPeak] = OsMA[currentPeak];

//皇冠体育app[以后波谷]=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 == 真的) 假设(以信号告知显示= TRUE)

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

//以信号告知显示(“规范皇冠体育app涌现:电流波的峰值

}

假设(OSMA [峰电流] > OsMA[lastPeak] && High[currentPeak] < High[lastPeak])

假设(MACD柱线[以后波谷值]>MACD线[最末一波] 且最高的价钱[电流波]<最高的价钱[最末一波])

{

bearishDivergence[currentPeak] = OsMA[currentPeak];

//皇冠体育app[以后波谷]=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);

//预警以信号告知显示(“反向皇冠体育app涌现:电流波的峰值

}

}

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

//|自限制行使职责逻辑型:评价目的波谷值行使职责|

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

bool IsIndicatorPeak(int 移) //指示能否为峰值K线数)

{

假设(OSMA [转变] > 0 && 奥斯马[转变] > OsMA[shift+1] && 奥斯马[转变] > OsMA[shift-1])

假设(MACD柱行k行数>0) 且 MACD线[ K线] MACD柱行[ K线序列号 1 ] 且MACD线[ K线] MACD柱[ K线序列号- 1 ]

{

为(int i = shift + 1; i < Bars; i++) //环绕查找(i=K长度的序列号+1,i

{

假设(OSMA [我] < 0) //假设(MACD柱行[ i ]<0)

return(真的);

假设(OSMA [我] > 奥斯马[转变]) 假设(MACD柱行[ i ]>MACD线[ K线]

break; //废料桶

}

}

return(假); 复回(false)

}

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

//|自限制行使职责逻辑型:判别行使职责|

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

bool IsIndicatorTrough(int 移) //指示能否为浪尖K线数)

{

假设(OSMA [转变] < 0 && 奥斯马[转变] < OsMA[shift+1] && 奥斯马[转变] < OsMA[shift-1])

若(MACD柱行[ K线数]<0 且 MACD柱线[K长度的序列号]< MACD柱行[ K线序列号 1 ] 且MACD线[ K线]

{

为(int i = shift + 1; i < Bars; i++) //环绕查找(i=K长度的序列号+1,i

{

假设(OSMA [我] > 0) //假设(MACD柱行[ i ]>0)

return(真的);

假设(OSMA [我] < 奥斯马[转变]) //假设(MACD柱行[ i ]>MACD线[ K线]

break; //废料桶

}

}

return(假); 复回(false)

}

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

//|自限制行使职责积分型:存在指示的最末一次动摇|

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

int GetIndicatorLastPeak(int 移) //存在指示的最末一次动摇(K长度的序列号)

{

为(int i = shift + 5; i < Bars; i++) //环绕查找(i=K长度的序列号+5;i

{

假设(OSMA [我] >= 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柱线[·] 且MACD柱行[ i ]>MACD柱线[i-2])

复回(i) 复回(i)

}

复回(- 1) 复回(- 1)

}

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

//|自限制行使职责积分型:进入最末一个槽|

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

int GetIndicatorLastTrough(int 移) //进入最末一个槽(K长度的序列号)

{

为(int i = shift + 5; i < Bars; i++) //环绕查找(i=K长度的序列号+5;i

{

假设(OSMA [我] <= 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 ]

复回(i) 复回(i)

}

复回(- 1) 复回(- 1)

}

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

//|自限制行使职责无复回典型:预警以信号告知显示|

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

void DisplayAlert(string message, int 移) //预警以信号告知显示(使活跃,K长度的序列号)

{

假设(移 <= 2 && Time[shift] != lastAlertTime)

//假设(K长度的序列号<=2 且 席位[K长度的序列号]≠前番以信号告知席位)

{

lastAlertTime = 工夫[间隔] //前番以信号告知席位=席位[K长度的序列号]

警报(音讯, Symbol(), ” , “, Period(), ” minutes 图)

突然拿出来正告窗口(使活跃),眼前的钱币对,“,”以后学时,分钟计算

}

}

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

//|自限制行使职责无复回典型:绘画作品价钱排队|

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

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_脱离( 表达EMA),均线慢线,除去学时

if(indicatorWindow < 0)

假设(调窗口的接近)<0

return;

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

加标签于满足=财富#离线 值的说法(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)工夫柱状图。

发表评论

电子邮件地址不会被公开。 必填项已用*标注