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[]; //熊背离

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),熊背离)

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); //捕获熊背离有或起作用(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);

正告以信号告知显示(反向对女性的蔑称距)涌现。:”,电流槽

}

}

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

//|自限界有或起作用不归型:捕获熊背离有或起作用|

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

void CatchBearishDivergence(int 移位) //捕获熊背离有或起作用(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];

//熊背离[电流波谷]=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);

//以信号告知显示(“规范熊背离涌现:电流波谷

}

假如(OsMA[CurrimePosi]) > 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线数)

{

假如(OSMA) > 0 && OSMA [移位] > OsMA[shift+1] && OSMA [移位] > 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 [移位]) 假如(MACD柱[I]>MACD柱线[K直线性序列号])

break; //废料桶

}

}

return(假); 退货(假)

}

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

//|自限界有或起作用逻辑型:判别目标谷有或起作用|

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

bool IsIndicatorTrough(int 移位) //决定典型设想为低谷。K线数)

{

假如(OSMA) < 0 && OSMA [移位] < OsMA[shift+1] && OSMA [移位] < 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 [移位]) //假如(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])

复回(i) 复回(i)

}

复回(- 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]

复回(i) 复回(i)

}

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

}

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

//|自限界有或起作用不归型:告警以信号告知显示|

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

void DisplayAlert(string message, int 移位) //告警以信号告知显示(使活跃,K直线性序列号)

{

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

//假如(K直线性序列号<=2 且 名列前茅[K直线性序列号]≠前番以信号告知名列前茅)

{

lastAlertTime = 工夫[轮班] //前番以信号告知名列前茅=名列前茅[K直线性序列号]

警报(音讯), 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 Enm EMA),慢线可能语气的,改变主意学时

if(indicatorWindow < 0)

IF(参考窗口号)<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)柱状图。

发表评论

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