- //+------------------------------------------------------------------+
- //| MACD with crossing.mq4 |
- //| Copyright @2004, metaQuotes Software Corp. |
- //+------------------------------------------------------------------+
- #property copyright "下载更多外汇EA,外汇指标,交易系统,就到【外汇EA之家】"
- #property link "http://www.eazhijia.com"
- #property strict
- #property indicator_separate_window
- #property indicator_buffers 3
- #property indicator_color1 Gold
- #property indicator_color2 Red
- #property indicator_color3 Gray
- #property indicator_width1 2
- input int FastEMA=12;
- input int SlowEMA=26;
- input int SignalSMA=9;
- double MacdBuffer[];
- double SignalBuffer[];
- double HistogramBuffer[];
- int maxLines;
- //+------------------------------------------------------------------+
- //| Custom indicator initialization function |
- //+------------------------------------------------------------------+
- int onInit(void)
- {
- SetIndexStyle(0,DRAW_LINE);
- SetIndexStyle(1,DRAW_LINE);
- SetIndexStyle(2,DRAW_HISTOGRAM);
- SetIndexBuffer(0,MacdBuffer);
- SetIndexBuffer(1,SignalBuffer);
- SetIndexBuffer(2,HistogramBuffer);
- SetIndexLabel(0,"MACD");
- SetIndexLabel(1,"Signal");
- SetIndexLabel(2,"MACD-Signal");
- SetIndexDrawBegin(1,SignalSMA);
- IndicatorDigits(Digits+1);
- IndicatorShortName("MACD("+IntegerToString(FastEMA)+","+IntegerToString(SlowEMA)+","+IntegerToString(SignalSMA)+")");
- return(0);
- }
- //+------------------------------------------------------------------+
- //| |
- //+------------------------------------------------------------------+
- void onDeinit(const int reason)
- {
- DeleteLines();
- Comment("www.eazhijia.com");
- }
- //+------------------------------------------------------------------+
- //| Moving Averages Convergence/Divergence |
- //+------------------------------------------------------------------+
- int onCalculate (const int rates_total,
- const int prev_calculated,
- const datetime& time[],
- const double& open[],
- const double& high[],
- const double& low[],
- const double& close[],
- const long& tick_volume[],
- const long& volume[],
- const int& spread[])
- {
- double crossing;
- int limit,i;
- int counted_bars=IndicatorCounted();
- if(counted_bars>0) counted_bars--;
- limit=Bars-counted_bars;
- for(i=0; i<limit; i++) MacdBuffer[i]=iMA(NULL,0,FastEMA,0,MODE_EMA,PRICE_CLOSE,i)-iMA(NULL,0,SlowEMA,0,MODE_EMA,PRICE_CLOSE,i);
- for(i=0; i<limit; i++)
- {
- SignalBuffer[i]=iMAonArray(MacdBuffer,Bars,SignalSMA,0,MODE_SMA,i);
- HistogramBuffer[i]=MacdBuffer[i] - SignalBuffer[i];
- }
- DeleteLines();
- for(i=WindowBarsPerChart(); i>0 ;i--)
- {
- crossing=(MacdBuffer[i]-SignalBuffer[i])*(MacdBuffer[i+1]-SignalBuffer[i+1]);
- if (crossing < 0)
- {
- maxLines+=1;
- ObjectCreate("MacdCross"+IntegerToString(maxLines),0,0,Time[i],0);
- ObjectSet("MacdCross"+IntegerToString(maxLines),OBJPROP_COLOR,DimGray);
- ObjectSet("MacdCross"+IntegerToString(maxLines),OBJPROP_STYLE,STYLE_DOT);
- }
- }
- return(rates_total);
- }
- //+------------------------------------------------------------------+
- //| |
- //+------------------------------------------------------------------+
- void DeleteLines()
- {
- for(int i=1;i<=maxLines;i++) ObjectDelete("MacdCross"+IntegerToString(i)); maxLines=0;
- }
- //+------------------------------------------------------------------+
|