首页 系统交易 帖子

如何在MetaTrader 5中检测新K线的开始

附件
41601.zip (795 bytes, 下载 0次)

在使用专家顾问(EA)的过程中,当MetaTrader接收到新的报价(即“tick”)时,标准的OnTick()事件处理函数会被调用。但是,MetaTrader并没有标准的事件处理函数来检测新K线的开始。

要实现这一点,我们需要监控最近K线的开盘时间。当开盘时间发生变化时,这就意味着新K线的开始,我们可以对此做出反应并处理事件。以下是一个兼容MQL4和MQL5的方法示例,展示了如何实现这一功能:

// 标准的tick事件处理函数
   void OnTick()
   {
      // 检查是否有新K线(兼容MQL4和MQL5)。
         static datetime dt当前K线   = WRONG_VALUE;
                datetime dt前一K线 = dt当前K线;
                         dt当前K线   = iTime( _Symbol, _Period, 0 );
                bool     b新K线事件  = ( dt当前K线 != dt前一K线 );

      // 对新K线事件做出反应。
         if( b新K线事件 )
         {
            // 检测是否为首次接收的tick。
               /* 例如,当图表首次应用时,K线正处于进展中,并不是真正的新K线开始。 */
               if( dt前一K线 == WRONG_VALUE )
               {
                  // 对首次tick或K线中间状态进行处理 ...
               }
               else
               {
                  // 常规K线出现后的处理 ...
               };

            // 独立于前一条件的其他处理 ...
         }
         else
         {
            // 处理其他情况 ...
         };

      // 继续其他操作 ...
   };

在上面的代码中,static变量用于跟踪K线的开盘时间,即使在返回OnTick()函数后,它仍然能够保持数据。这是检测当前K线开盘时间变化的关键。

需要注意的是,当EA第一次应用到图表上时,前面的代码会将其反应为刚刚开盘的K线。这种情况需要特殊处理,以便能够正确应对。

另外,请注意,我在CodeBase上发布的所有源代码现在可以通过MetaEditor的“公共项目”中找到,项目名称为“FMIC”。

相关帖子

评论 (0)