在编写MT4报警指标或者智能交易EA程序时,是经常遇到这种要求在一根K线(蜡烛)上只报警一次或者只开仓一次的。对于报警指标来说,在一根K线上报警一次是为了避免频繁报警造成的干扰。对于智能交易EA程序来说,有些策略如果不限制一个K线只开仓一次,那么就有可能出现在相同的价位上重复无止尽的乱开仓。
限制一根K线只开仓(或报警)一次的方法有很多种。在不同的策略环境下,可以通过不同的编程技巧来实现。这里提供一个最古老的方法,参考代码如下:
bool NewBar()
{
static datetime newtime = 0;
if (newtime != Time[0])
{
newtime = Time[0];
return(true);
}
return(false);
}
这个NewBar()函数的原理是定义一个静态时间变量,然后在新K线到来的时候将K线开盘时间赋值给变量,如此循环的定义当前K线为新K线。
有了新K线这个概念,那就可以执行一根K线只报警(或开仓)一次了。参考代码:
if(NewBar())
{
Alert("新的K线开始了。");
if(!OrderSend(Symbol(),OP_BUY,0.01,Ask,30,0,0,"",0,0,clrRed))
{
Print("OrderSend BUY Error #",GetLastError());
}