- //+------------------------------------------------------------------+
- //| MACD_LSMA_EMA.mq4 |
- //| Copyright @2007, Robert Hill |
- //+------------------------------------------------------------------+
- #property copyright "下载更多外汇EA,外汇指标,交易系统,就到【外汇EA之家】"
- #property link "http://www.eazhijia.com"
- #property indicator_separate_window
- #property indicator_buffers 4
- #property indicator_color1 Aqua
- #property indicator_color2 Red
- #property indicator_color3 Green
- #property indicator_color4 Red
- input int FastEMA=12;
- input int SlowEMA=26;
- input int SignalSMA=9;
- double MACD_buffer[];
- double Signal_buffer[];
- double HistogramBufferUp[];
- double HistogramBufferDown[];
- bool ExtParameters=false;
- //+------------------------------------------------------------------+
- //| Custom indicator initialization function |
- //+------------------------------------------------------------------+
- int OnInit(void)
- {
- IndicatorDigits(Digits+1);
- SetIndexStyle(0,DRAW_LINE,STYLE_SOLID);
- SetIndexBuffer(0,MACD_buffer);
- SetIndexDrawBegin(0,SlowEMA);
- SetIndexStyle(1,DRAW_LINE,STYLE_DOT);
- SetIndexBuffer(1,Signal_buffer);
- SetIndexDrawBegin(1,SignalSMA);
- SetIndexStyle(2,DRAW_HISTOGRAM,STYLE_SOLID);
- SetIndexBuffer(2,HistogramBufferUp);
- SetIndexStyle(3,DRAW_HISTOGRAM,STYLE_SOLID);
- SetIndexBuffer(3,HistogramBufferDown);
- IndicatorDigits(Digits+1);
- IndicatorShortName("MACD_LSMA_EMA("+IntegerToString(FastEMA)+","+IntegerToString(SlowEMA)+","+IntegerToString(SignalSMA)+")");
- SetIndexLabel(0,"MACD");
- SetIndexLabel(1,"Signal");
- SetIndexLabel(2,"Histogram");
- if(FastEMA<=1 || SlowEMA<=1 || SignalSMA<=1 || FastEMA>=SlowEMA)
- {
- Print("Wrong input parameters");
- ExtParameters=false;
- return(INIT_FAILED);
- }
- else
- ExtParameters=true;
- Comment("www.eazhijia.com");
- return(INIT_SUCCEEDED);
- }
- //+------------------------------------------------------------------------+
- //| LSMA - Least Squares Moving Average function calculation |
- //| LSMA_In_Color Indicator plots the end of the linear regression line |
- //+------------------------------------------------------------------------+
- double LSMA(int Rperiod, int shift)
- {
- int i;
- double sum;
- int length;
- double lengthvar;
- double tmp;
- double wt;
- length = Rperiod;
- sum = 0;
- for(i = length; i >= 1 ; i--)
- {
- lengthvar = length + 1;
- lengthvar /= 3;
- tmp = 0;
- tmp = ( i - lengthvar)*Close[length-i+shift];
- sum+=tmp;
- }
- wt = MathFloor(sum*6/(length*(length+1))/Point)*Point;
- return(wt);
- }
- //+------------------------------------------------------------------+
- //| 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 temp;
- int i,limit;
- //---
- if(rates_total<=SignalSMA || !ExtParameters)
- return(0);
- //--- last counted bar will be recounted
- limit=rates_total-prev_calculated;
- if(prev_calculated>0)
- limit++;
- for(i=0; i<limit; i++)
- MACD_buffer[i]=LSMA(FastEMA,i)-LSMA(SlowEMA,i);
- for(i=0; i<limit; i++)
- Signal_buffer[i]=iMAOnArray(MACD_buffer,Bars,SignalSMA,0,MODE_EMA,i);
- for(i=0; i<limit; i++)
- {
- HistogramBufferUp[i] = 0;
- HistogramBufferDown[i] = 0;
- temp = MACD_buffer[i] - Signal_buffer[i];
- if (temp >= 0)
- HistogramBufferUp[i] = temp;
- else
- HistogramBufferDown[i] = temp;
- }
- return(rates_total);
- }
复制代码
MACD_LSMA_EMA.mq4
|