在 MQL4 中处理异常

Handling exceptions in MQL4

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

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

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

我们将不胜感激。

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

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

没有

MQL4 不支持类似于 try/except/finallytry/catch 用例的结构 python / java 和类似的语言。

如何处理异常?

假设没有编译时错误。

运行时的错误处理起来比较麻烦,有的甚至会导致软件崩溃。

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

例外情况是 dbPool 操作,在某些情况下,这些操作可能 "legitimately" 无法产生预期的结果。

A GetLastError()(如果先验地清除了异常本身)可以用作几乎-post-mortem 标识,而不是异常处理程序。

4202?不是你的问题,兄弟'

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

4202
    ERR_OBJECT_DOES_NOT_EXIST
    Object does not exist

您的问题似乎与 bar "pointing" 之外的 TimeSeries-reverse-stepping-index of [=61] 有关=]Close[] 值。

0 <= aBarPtrIDX < Bars

下一个目标? Close[aBarPtrIDX] 误解

MQL4 域中花费了一段时间后,人们熟悉了一些相互矛盾的事实。一个潜在的惊喜是,当前的柱线, "hot-zero"[0],在其全部生命周期内包含Close[0] == Bid

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

上冲浪