- 注册时间
- 2013-9-23
- 在线时间
- 519 小时
- 最后登录
- 2022-4-4
- 阅读权限
- 200
管理员
MT4软件工程师
- 积分
- 6521
- 帖子
- 2771
- 主题
- 2761
|
MT4智能交易编程示例 MACD指标- #property copyright "路路发智能交易研发中心"
- #property link "http://www.ea668.com"
- #property description "Moving Averages Convergence/Divergence"
- #property strict
- #include <MovingAverages.mqh>
- //--- indicator settings
- #property indicator_separate_window
- #property indicator_buffers 2
- #property indicator_color1 Silver
- #property indicator_color2 Red
- #property indicator_width1 2
- //--- indicator parameters
- input int InpFastEMA=12; // Fast EMA Period
- input int InpSlowEMA=26; // Slow EMA Period
- input int InpSignalSMA=9; // Signal SMA Period
- //--- indicator buffers
- double ExtMacdBuffer[];
- double ExtSignalBuffer[];
- //--- right input parameters flag
- bool ExtParameters=false;
- //+------------------------------------------------------------------+
- //| Custom indicator initialization function |
- //+------------------------------------------------------------------+
- int OnInit(void)
- {
- IndicatorDigits(Digits+1);
- //--- drawing settings
- SetIndexStyle(0,DRAW_HISTOGRAM);
- SetIndexStyle(1,DRAW_LINE);
- SetIndexDrawBegin(1,InpSignalSMA);
- //--- indicator buffers mapping
- SetIndexBuffer(0,ExtMacdBuffer);
- SetIndexBuffer(1,ExtSignalBuffer);
- //--- name for DataWindow and indicator subwindow label
- IndicatorShortName("MACD("+IntegerToString(InpFastEMA)+","+IntegerToString(InpSlowEMA)+","+IntegerToString(InpSignalSMA)+")");
- SetIndexLabel(0,"MACD");
- SetIndexLabel(1,"Signal");
- //--- check for input parameters
- if(InpFastEMA<=1 || InpSlowEMA<=1 || InpSignalSMA<=1 || InpFastEMA>=InpSlowEMA)
- {
- Print("Wrong input parameters");
- ExtParameters=false;
- return(INIT_FAILED);
- }
- else
- ExtParameters=true;
- //--- initialization done
- return(INIT_SUCCEEDED);
- }
- //+------------------------------------------------------------------+
- //| 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[])
- {
- int i,limit;
- //---
- if(rates_total<=InpSignalSMA || !ExtParameters)
- return(0);
- //--- last counted bar will be recounted
- limit=rates_total-prev_calculated;
- if(prev_calculated>0)
- limit++;
- //--- macd counted in the 1-st buffer
- for(i=0; i<limit; i++)
- ExtMacdBuffer[i]=iMA(NULL,0,InpFastEMA,0,MODE_EMA,PRICE_CLOSE,i)-
- iMA(NULL,0,InpSlowEMA,0,MODE_EMA,PRICE_CLOSE,i);
- //--- signal line counted in the 2-nd buffer
- SimpleMAOnBuffer(rates_total,prev_calculated,0,InpSignalSMA,ExtMacdBuffer,ExtSignalBuffer);
- //--- done
- return(rates_total);
- }
- //+------------------------------------------------------------------+
复制代码
|
|