欢迎访问申博太阳城 天气 | 旅游 | 城市 | 音乐 | 美容   
科普
[转载]MACD柱线与K线背离指标源码_jakeche
时间:2019-06-24 08:14 点击:

MACD柱和K线使脱离常轨规范源COD

    显示调查分析产物,该按生活指数调整是背诵使脱离常轨按生活指数调整的最适宜的规范。,它将区域k线的峰值。、山谷,MACD和柱线的峰山谷非常赞许地差强人意的。,最理想的规范经过。

    接下来,we的所有格形式将学术它的作曲声称和运用巧妙办法。,为接下去找到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 + ")"); 参考书缩写(fx使脱离常轨参考书(快的em,慢EMA,更附近)

反复(0)

}

//+------------------------------------------------------------------+

//| Custom indicator deinitialization function |

//+------------------------------------------------------------------+

int deinit() //仓库时的运转

{

为(int i = ObjectsTotal() - 1; i >= 0; i--) 附近反省(目的总额,0,缩减1)

{

string label = 目的名(一) 变量译本典型:tag=目的名(i)

if(字母串子字母串(紧跟, 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线数=0

CalculateIndicator(countedBars); 参考书计算(计算k行数)-自使明确行使职责cal

反复(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); //捕获申博开户行使职责(i+2)-自使明确行使职责

}

}

//+------------------------------------------------------------------+

//|自使明确行使职责-无反复典型:计算MACD柱线|

//+------------------------------------------------------------------+

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

{

欧司马 = iOsMA(NULL, 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 shift) //占领牛分开功用(K线路序列号)

{

if(IsIndicatorTrough(shift) == false) //万一(条件是规范的浪尖(K线路序列号)=假)

return;

int currentTrough = shift; //变量-积分的型:今天浪尖=K线序号

int lastTrough = GetIndicatorLastTrough(shift);

//变量-积分的型:前番浪尖=获取规范的前番浪尖(K线路序列号)

if(OsMA[currentTrough] > OsMA[lastTrough] && Low[currentTrough] < Low[lastTrough])

//万一(MACD柱[电流槽> MACD柱[期末考试人家槽] 且 K线廉价[今天浪尖] > K线廉价[前番浪尖])

{

bullishDivergence[currentTrough] = OsMA[currentTrough];

牛分开[今天浪尖]=MACD柱[电流槽

if(drawDivergenceLines == true) 万一(离线取消=真

{

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 == true) //万一(显示臂板信号系统=真)

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

//显示臂板信号系统(“基准牛背离呈现:”,电流槽)

}

if(OsMA[currentTrough] < OsMA[lastTrough] && Low[currentTrough] > Low[lastTrough])

//万一(MACD柱[电流槽底价[期末考试人家谷底])

{

bullishDivergence[currentTrough] = OsMA[currentTrough];

牛分开[今天浪尖]=MACD柱[电流槽

if(drawDivergenceLines == true) 万一(离线取消=真

{

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 == true) 万一(正告臂板信号系统显示=真

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

正告臂板信号系统显示(反向牛分开呈现:”,电流槽)

}

}

//+------------------------------------------------------------------+

//|自使明确行使职责-无反复典型:捕获申博开户行使职责|

//+------------------------------------------------------------------+

void CatchBearishDivergence(int shift) //捕获申博开户行使职责(K线路序列号)

{

万一(isindicatorpeak(shift) == false) //万一(条件是规范的波谷(K线路序列号)=假)

return;

int currentPeak = shift; 电流峰值=k线序数

int lastPeak = GetIndicatorLastPeak(shift); //前番波谷=获取规范的前番波谷(K线路序列号)

if(osma[电流峰值] < OsMA[lastPeak] && High[currentPeak] > High[lastPeak])

if(MACD列行[今天顶峰]绝对价[期末考试一波]

{

bearishDivergence[currentPeak] = OsMA[currentPeak];

//申博开户[今天波谷]=MACD柱[今天波谷]

if(drawDivergenceLines == true) 万一(离线取消=真

{

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

//臂板信号系统显示(“基准申博开户呈现:电流波谷

}

if(osma[电流峰值] > OsMA[lastPeak] && High[currentPeak] < High[lastPeak])

if(MACD列行[今天顶峰]>MACD列[期末考试一波] 且绝对价钱[今天峰值]<绝对价[期末考试一波]

{

bearishDivergence[currentPeak] = OsMA[currentPeak];

//申博开户[今天波谷]=MACD柱[今天波谷]

if(drawDivergenceLines == true) 万一(离线取消=真

{

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 == true) 万一(正告臂板信号系统显示=真

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

//警示臂板信号系统显示(“反向申博开户呈现:电流波谷

}

}

//+------------------------------------------------------------------+

//|自使明确行使职责-逻辑型:按生活指数调整峰值行使职责|

//+------------------------------------------------------------------+

bool IsIndicatorPeak(int shift) //决定按生活指数调整条件为峰值K线路序列号)

{

万一(OSMA[移位] > 0 && OSMA[移位] > OsMA[shift+1] && OSMA[移位] > OsMA[shift-1])

if(MACD列行[K行数] 且 MACD列[K行数] MACD列[K行序列号 1 且MACD列[K行数] MACD列[K行序列号-1

{

为(int i = shift + 1; i < Bars; i++) //附近查找(i=K线序号+1,i

{

if(欧司马 < 0) //万一(MACD列[I]<0)

反复(真)

if(欧司马 > OSMA[移位]) 万一(MACD列[I]>MACD柱线[K线序号])

break; //跳绳

}

}

反复(误差) 反复(误差)

}

//+------------------------------------------------------------------+

//|自使明确行使职责-逻辑型:行使职责断定规范|

//+------------------------------------------------------------------+

bool IsIndicatorTrough(int shift) //断定规范条件低谷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(欧司马 > 0) //万一(MACD列[I]>0)

反复(真)

if(欧司马 < OSMA[移位]) //万一(MACD列[I]>MACD柱线[K线序号])

break; //跳绳

}

}

反复(误差) 反复(误差)

}

//+------------------------------------------------------------------+

//|自使明确行使职责-积分的型:获取参考书的期末考试人家峰值|

//+------------------------------------------------------------------+

int GetIndicatorLastPeak(int shift) //获取参考书的期末考试人家峰值(K线序号)

{

为(int 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 shift) //获取规范前番浪尖(K线序号)

{

为(int 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 shift) //警示臂板信号系统显示(布告,K线序号)

{

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

//万一(K线序号<=2 且 臀部[K线序号]≠前番臂板信号系统臀部)

{

lastAlertTime = Time[shift]; 期末考试人家臂板信号系统臀部=臀部[K行数

警报(音讯, Symbol(), " , ", Period(), " minutes 地基)

突然拿出来正告窗口(布告,今天钱币对,“,”今天包围,分钟计算

}

}

//+------------------------------------------------------------------+

//|自使明确行使职责-无反复典型:绘制价钱方面线|

//+------------------------------------------------------------------+

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

double y2, color lineColor, double style)

//绘制价钱方面线(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, style); 目的属性设置(捣碎,击出典型,典型)

}

//+------------------------------------------------------------------+

//|自使明确行使职责-无反复典型:绘制方面线|

//+------------------------------------------------------------------+

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

double y2, color lineColor, double style)

//绘制方面线(X1-时期日期典型,X2-时期日期典型,Y1-十进位的型,Y2-十进位的型,击出色,典型-阿拉伯数字系统)

{

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

//规范窗口数=规范反省(“FX5_背离(”+快线EMA+“,”+慢线EMA+“,”+更式附近+“)”)

if(indicatorWindow < 0)

if(参考书窗口编号)<0

return;

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

label=back off line$ 数字到译本(x)的质地,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, style);

目的属性设置(捣碎,击出典型,典型)

}

//+------------------------------------------------------------------+

clip_image002

正文:MACD列行行使职责=iOsMA()

前文规范中所调动行使职责OsMA,实为:MACD(12,26,9)时的条线图.

分享到:
苏ICP备15032167号-1