处理MQL4中的异常

时间:2015-08-24 11:20:26

标签: algorithmic-trading mql4 metatrader4 mt4

使用Java语言,可以使用try - catch机制处理异常。

MQL4 中是否存在任何类似行为?

此代码在array out of range表达式中抛出错误“ Close[bar] ”,我无法正确处理。

任何帮助将不胜感激。

bool isBarClosed( int bar ) {
    bool   barClosed  = true;
    double closePrice = Close[bar];
    int    error      = GetLastError();

    if ( error == 4202 ) {
        barClosed = false;
    }   
    return barClosed;
}

1 个答案:

答案 0 :(得分:3)

没有

MQL4 对于python / java和类似语言中try/except/finallytry/catch用例的构造都没有语法支持。

如何处理异常?

假设没有编译时错误。

运行时错误很难处理,有些甚至导致软件崩溃。

我们可以而且应该主动使用适当的类型检查和用例预验证来清理MQL4代码,以防止异常。

例外情况是 dbPool 操作,在某些情况下,可能“合法地”无法产生预期结果。

GetLastError() (如果事先将异常本身清除)可以作为几乎验尸后的身份识别,而不是异常处理程序。

4202?不是你的问题,Bro'

_LastError == 4202 ... does not explain the trouble                <<< stdlib.mqh

4202
    ERR_OBJECT_DOES_NOT_EXIST
    Object does not exist

您的问题似乎与 bar “指向”TimeSeries - 反向步进索引 Close[] 价值。

<强> 0 <= aBarPtrIDX < Bars

下一个目标? Close[aBarPtrIDX]错误概念

MQL4域中度过一段时间后,人们会熟悉一些矛盾的事实。潜在的惊喜之一是,当前的酒吧, “热零” [0] ,在其所有生命周期中都包含 Close[0] == Bid

运行栏被aNewBarEVENT终止后(由Volume[0] == 1发出信号(或Volume[0] < aPreviousVolume_0 - 一个更安全的案例模式,MQL4 - 松散耦合事件循环错过了几个quote - 在忙碌事件期间到达)),Close[1]表示相应Bar - 期间的最后访问价格和Close[0]不断变换 Bid 价格