MQL4 中的异常处理

JLL*_*CHR 5 algorithmic-trading mt4 metatrader4 mql4

Java语言中,可以使用try-catch机制。

它是否存在任何类似的行为 MQL4

此代码引发错误'array out of rangeClose[bar]表达式中 ” ,我无法正确处理它。

任何帮助将不胜感激。

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

    if ( error == 4202 ) {
        barClosed = false;
    }   
    return barClosed;
}
Run Code Online (Sandbox Code Playgroud)

use*_*197 5

不。

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

异常情况如何处理?

假设没有编译时错误。

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

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

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

A GetLastError()(如果先验地清除了异常本身)可以用作几乎事后鉴定,而不是用作异常处理程序。

4202?不是你的问题,兄弟

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

4202
    ERR_OBJECT_DOES_NOT_EXIST
    Object does not exist
Run Code Online (Sandbox Code Playgroud)

您的问题似乎与“指向”值的 -reverse-stepping-indexbar之外有关。TimeSeriesClose[]

0 <= aBarPtrIDX < Bars

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

在该领域呆了一段时间后MQL4,人们会熟悉一些相互矛盾的事实。潜在的惊喜之一是,当前条“热零”[0]包含Close[0] == Bid在其所有生命周期内。

正在运行的条被终止后aNewBarEVENT(由 a 发出信号Volume[0] == 1(或Volume[0] < aPreviousVolume_0- 对于某种情况来说更安全的模式,松散耦合的事件循环在其繁忙时段MQL4错过了一些到达)),代表最后访问的相应期间的价格,并继续浏览不断变化的价格quoteClose[1]BarClose[0]Bid