[转载]MACD柱线与K线背离指标源码_tianyu0461

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 清晰度五大厦

#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_离开目标(RAPID 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线数=0

CalculateIndicator(countedBars); //目标计算K行数)-自清晰度作用必要

又来(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 == 独特的的) //假使(显示以信号告知=真)

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[通常峰值] < 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 == 独特的的) if(以信号告知显示=真)

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

//以信号告知显示(“基准熊背离呈现:电流峰值)

}

假使(OSMA[通常峰值] > OsMA[lastPeak]
&& High[currentPeak]
< High[lastPeak])

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

if(macd列[k线数] 且
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[移位])
if(macd列[i]>macd列[k线数

break; //蹦跳

}

}

return(不独特的的的); 又来(假)

}

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

//|自清晰度作用逻辑型:判别目标谷作用|

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

bool IsIndicatorTrough(int 班)
//
判别例子如果为钓鳟鱼K线数)

{

if(osma[移位] < 0 && OSMA[移位] < OsMA[shift+1] && OSMA[移位] < OsMA[shift-1])

if(macd列[k线数<0 且 MACD柱线[K线序号]< MACD列[K线数 1 且MACD列[K线数]

{

for(内面的 i = shift + 1; i < Bars; i++) //成环查找(i=K线序号+1,i

{

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

return(独特的的);

if(奥斯玛 < OSMA[移位]) //if(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])

if(macd列[i] MACD列[I 1]
和macd列[i]>macd列[i 2

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

酬谢(一) 酬谢(一)

}

又来(-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])

if(macd列[i] <=MACD柱线[i+1] 和MACD列[I]

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

酬谢(一) 酬谢(一)

}

又来(-1) 又来(-1)

}

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

//|自清晰度作用不又来典型:告警以信号告知显示|

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

void DisplayAlert(string message, int 班)
//
告警以信号告知显示(通告,K线序号)

{

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

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

label=offline 十进制记数制到说法(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)时期柱状图。