分享

MT4智能交易 (GetLastError()函数)

 禁忌石 2018-06-24

MT4客户终端的一个重要性质是,如果错误在命令的执行过程中发生,命令将不会被打断。错误发生的情况有2种。一种是内在的EA程序出了问题。一种是外在的因素,比如网络连接发生中断等等。当错误发生的时候,EA程序仍会继续运行。但是我们可以通过GetLastError()这个函数来得到错误的报告。

 

int GetLastError() 这个函数返回最新的错误编码。当新的错误产生时,旧的错误编码将被代替。换句话说,GetLastError()只能帮我们得到最后的一个错误,但是系统可能会存在多个错误。所以建议使用这个函数时把它紧连在可能发生错误的程式行后面。

//--------------------------------------------------------------------------
int start() // 特殊函数 start()

OrderSend("GBPUSD",OP_BUY,0.1,Ask,3,Bid-15*Point,Bid+15*Point);
Alert (GetLastError()); // 错误信息
return; // 退出 start()
}
//--------------------------------------------------------------------------

 

对于以上的程式,如果没有 “Alert (GetLastError()); // 错误信息” 这一行的话,如果我们把它放到Eur/Usd的图表里去执行,即使出现错误我们也不会知情。但是放上这一行后,Alert (GetLastError()) 将会显示下面的图形:

MT4智能交易 (GetLastError()函数) - J.King. - 羊皮卷

 

在附录code of errors里面,每个错误编码都会有相对应的解释。比如130表示的是无效停止。这表明OrderSend()里面参数的使用发生错误。产生错误的原因为,因为此程式被放在Eur/Usd的图标里,所以即时的买价和卖价全部取自这一个图表。然而,这些价位却被用来进行GBP/USD货币对的判断。结果,导致GBP/USD的即时价位和OrderSend()里设定的止盈止损价相差甚远。

 

当发现这个错误之后,我们可以用另一个函数去纠正它:函数MarketInfo()。这个函数可以取得相应货币对的即时价位,而不管这个EA是放在哪个货币对图表上。具体程式如下:

//------------------------------------------------------------------------------
int start() // 特殊函数 start()
{
double bid =MarketInfo("GBPUSD",MODE_BID); // 取得 Bid 价位
double ask =MarketInfo("GBPUSD",MODE_ASK); // 取得 Ask 价位
double point =MarketInfo("GBPUSD",MODE_POINT); //定义相对货币对的点值
// Opening BUY
OrderSend("GBPUSD",OP_BUY,0.1,ask,3,bid-15*Point,bid+15*Point);
Alert (GetLastError()); // 错误信息
return; // 退出 start()
}
//------------------------------------------------------------------------------

 

经过修改之后,上面的程式已经没有错误。因此,函数GetLastError()将会返回0的值。0的值将被显示,表明在以上程式的执行过程中没有错误发生。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多