外汇EA
求解释一句MACD语言
回复:0  浏览:149
  • 楼主admin 圈主
  • 2020-01-01 15:37
求解释MACD指标中,“SimpleMAonBuffer(rates_total,prev_calculated,0,InpSignalSMA,ExtMacdBuffer,ExtSignalBuffer);”这句话是什么意思,求解?
==================================
//+------------------------------------------------------------------+
//|                                 Custom MACD.mq4 |
//|              Copyright 2005-2014, metaQuotes Software Corp. |
//|                                http://www.mql4.com |
//+------------------------------------------------------------------+
#property copyright    2005-2014, metaQuotes Software Corp.
#property link      http://www.mql4.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=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);
 }
//+------------------------------------------------------------------+