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[]; //皇冠新2备用网址

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),皇冠新2备用网址)

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 + “)”); 锁上(FXX使弯曲转位(疾速核能谱)),慢速电分析容易╱难以)驾驶,自负的具有某个时代特征的)

反复(0)

}

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

//| Custom indicator deinitialization function |

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

int deinit() //倾倒使运行

{

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

{

string label = 反对专门名称(i) 易变的译本典型:)技术援助委=反对专门名称(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 1)-自清晰度作用

CatchBearishDivergence(i + 2); //捕获皇冠新2备用网址作用(i+2)-自清晰度作用

}

}

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

//|自清晰度作用不归型:计算MACD柱线|

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

void CalculateOsMA(int i)//自清晰度作用:计算MACD柱线

{

OsMa [Ⅰ] = iOsMA(零点), 0, fastEMA, slowEMA, signal, PRICE_CLOSE, i);

MACD柱线[I]=转移MACD列线作用(现行钱币对,现在时的为设计情节,疾速核能谱,慢速电分析容易╱难以)驾驶,自负的具有某个时代特征的,结算,i)

if(OsMa [Ⅰ] > 0) 条件(MACD柱线[I]>0)

{

upOsMa [Ⅰ] = OsMa [Ⅰ]; MACD柱破产[i]= MACD柱线[I]

downOsMa [Ⅰ] = 0; MACD柱辞谢[i]=0

}

else

if(OsMa [Ⅰ] < 0) //条件(MACD柱线[I]<0)

{

downOsMa [Ⅰ] = OsMa [Ⅰ]; MACD柱辞谢[i]=MACD柱线[I]

upOsMa [Ⅰ] = 0; MACD柱破产[i]=0

}

else

{

upOsMa [Ⅰ] = 0; MACD柱破产[i]=0

downOsMa [Ⅰ] = 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])

(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 [现在时的槽] < 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);

正告枪显示:反向雌使弯曲:”,电流槽

}

}

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

//|自清晰度作用不归型:捕获皇冠新2备用网址作用|

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

void CatchBearishDivergence(int 移位) //捕获皇冠新2备用网址作用(K线数)

{

if(IsIndicatorPeak(移位) == 假) //条件(能否是定额的波谷(K线数)=假)

return;

int currentPeak = shift; //现在时的波谷=K线形的序列号

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

条件(OsMA[CurrimePosi]) < OsMA[lastPeak] && High[currentPeak] > High[lastPeak])

//条件(MACD柱线[电流波谷]绝对价[前番波谷])

{

bearishDivergence[currentPeak] = OsMA[currentPeak];

//皇冠新2备用网址[现在时的波谷]=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);

//枪显示(“基准皇冠新2备用网址呈现:电流波谷

}

条件(OsMA[CurrimePosi]) > OsMA[lastPeak] && High[currentPeak] < High[lastPeak])

//条件(MACD柱线[电流波谷]>MACD线[惟一剩下的一波] 高地的的价钱[现在时的的潮]<绝对价[前番波谷])

{

bearishDivergence[currentPeak] = OsMA[currentPeak];

//皇冠新2备用网址[现在时的波谷]=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);

//告警枪显示(“反向皇冠新2备用网址呈现:电流波谷

}

}

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

//|自清晰度作用逻辑型:判别定额波谷作用|

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

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])

{

为(int) i = shift + 1; i < Bars; i++) //绕过查找(i=K线形的序列号+1,i

{

if(OsMa [Ⅰ] < 0) //条件(MACD柱线[I]<0)

return(真的);

if(OsMa [Ⅰ] > 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线形的序列号]>

{

为(int) i = shift + 1; i < Bars; i++) //绕过查找(i=K线形的序列号+1,i

{

if(OsMa [Ⅰ] > 0) //条件(MACD柱线[I]>0)

return(真的);

if(OsMa [Ⅰ] < OsMA[shift]) //条件(MACD柱线[I]>MACD柱线[K线形的序列号])

break; //跳

}

}

return(假); //反复(假)

}

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

//|自清晰度作用概数型:获取定额前番波谷|

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

int GetIndicatorLastPeak(int 移位) //获取定额前番波谷(K线形的序列号)

{

为(int) i = shift + 5; i < Bars; i++) //绕过查找(i=K线形的序列号+5;i

{

if(OsMa [Ⅰ] >= OsMA[i+1] && OsMa [Ⅰ] > OsMA[i+2] &&

OsMa [Ⅰ] >= OsMA[i-1] && OsMa [Ⅰ] > 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线形的序列号)

{

为(int) i = shift + 5; i < Bars; i++) //绕过查找(i=K线形的序列号+5;i

{

if(OsMa [Ⅰ] <= OsMA[i+1] && OsMa [Ⅰ] < OsMA[i+2] &&

OsMa [Ⅰ] <= OsMA[i-1] && OsMa [Ⅰ] < 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线形的序列号)

{

条件(移位 <= 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*使弯曲 Express Enm EMA),慢线潜在的,自负的具有某个时代特征的

if(indicatorWindow < 0)

条件(锁上窗口数)<0

return;

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

)技术援助委的满足的=向后地脱机$ 数值到译本,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)时期柱状图。

发表评论

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