MetaTrader4
如何在MetaTrader 4中检测新K线的开始
在为 专家顾问(EA) 编写程序时,当新的报价到达时,MetaTrader 终端会调用默认的 OnTick() 事件处理函数。不过,默认情况下并没有针对新K线(蜡烛图)开始或打开的事件处理函数。 为了检测新K线的开始,我们需要监控当前最新K线的开启时间。一旦这个时间发生变化,就意味着一根新的K线开始了,我们可以对此做出反应并处理相应的事件。以下是一个兼容MQL4和MQL5的示例代码,展示了如何实现这一点: // 默认的tick事件处理函数
void OnTick()
{
// 检查是否有新K线(兼容MQL4和MQL5)。
static datetime dtBarCurrent = WRONG_VALUE;
datetime dtBarPrevious = dtBarCurrent;
dtBarCurrent = iTime( _Symbol, _Period, 0 );
bool bNewBarEvent = ( dtBarCurrent != dtBarPrevious );
// 对新K线事件进行反应和处理。
if( bNewBarEvent )
{
// 检测是否是首次接收的tick并进行处理。
/* 例如,当它首次附加到图表上时,
K线可能处于进展的中间,
这时并不实际是新K线的开始。 */
if( dtBarPrevious == WRONG_VALUE )
{
// 在首次tick或K线中间时做一些处理 ...
}
else
{
// 当正常K线开始时做一些处理 ...
};
// 无论上述条件如何都可以做的事情 ...
}
else
{
// 处理其他情况 ...
};
// 其他操作 ...
}; 在上面的代码中,静态变量用于跟踪K线的开启时间,即使在从 OnTick() 函数返回时,它也不会丢失数据。这是检测当前K线开启时间变化的关键。 值得注意的是,当EA首次放置到图表上时,上述代码会将其反应为K线刚刚开启。这种情况需要特殊处理,以便在需要时进行不同的应对。请注意,我在 CodeBase 发表的所有源代码现在也可以在 MetaEditor 的“公共项目”标签下找到,名称为“FMIC”。
2022.04.24