请教一下MT5中开源的MACD代码

 
开源的“MACD Sample.mq5”中有段代码如下:
bool CSampleExpert::Init(void)
  {
//--- initialize common information
   m_symbol.Name(Symbol());                  // symbol
   m_trade.SetExpertMagicNumber(MACD_MAGIC); // magic
   m_trade.SetMarginMode();
   m_trade.SetTypeFillingBySymbol(Symbol());
//--- tuning for 3 or 5 digits
   int digits_adjust=1;
   if(m_symbol.Digits()==3 || m_symbol.Digits()==5)
      digits_adjust=10;
   m_adjusted_point=m_symbol.Point()*digits_adjust;
//--- set default deviation for trading in adjusted points
   m_macd_open_level =InpMACDOpenLevel*m_adjusted_point;
   m_macd_close_level=InpMACDCloseLevel*m_adjusted_point;
   m_traling_stop    =InpTrailingStop*m_adjusted_point;
   m_take_profit     =InpTakeProfit*m_adjusted_point;
//--- set default deviation for trading in adjusted points
   m_trade.SetDeviationInPoints(3*digits_adjust);
//---
   if(!InitCheckParameters(digits_adjust))
      return(false);
   if(!InitIndicators())
      return(false);
//--- succeed
   return(true);
  }

上面代码中的:

   int digits_adjust=1;
   if(m_symbol.Digits()==3 || m_symbol.Digits()==5)
      digits_adjust=10;

我没有太理解为什么要这样处理,我理解是一个点就是一个pip,一个点就是m_symbol.Point()值,完全没有必要digits_adjust=10;而且后面的m_trade.SetDeviationInPoints(3*digits_adjust);设置的是点差,如果当m_symbol.Digits()等于5的时候,设置的点差就是30了。所有没有理解上面那段代码。

 
artake:
开源的“MACD Sample.mq5”中有段代码如下:

上面代码中的:

我没有太理解为什么要这样处理,我理解是一个点就是一个pip,一个点就是m_symbol.Point()值,完全没有必要digits_adjust=10;而且后面的m_trade.SetDeviationInPoints(3*digits_adjust);设置的是点差,如果当m_symbol.Digits()等于5的时候,设置的点差就是30了。所有没有理解上面那段代码。

有的平台JPY系是小数点后2位,绝大多数是3位。

其它货币对有少部分平台是4位,绝大多数是5位。

这段代码是为了兼容这两种平台。