【问题标题】:Handling exceptions in MQL4在 MQL4 中处理异常
【发布时间】:2015-11-17 19:16:44
【问题描述】:

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;
}

【问题讨论】:

  • 没有官方文档吗?

标签: algorithmic-trading mql4 metatrader4 mt4


【解决方案1】:

没有。

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

如何处理异常?

假设没有编译时错误。

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

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

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

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

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

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

4202
    ERR_OBJECT_DOES_NOT_EXIST
    Object does not exist

您的问题似乎与 Close[] 值的 TimeSeries-reverse-stepping-index 之外的 bar“指向”有关。 p>

0 &lt;= aBarPtrIDX &lt; Bars

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

MQL4 领域待了一段时间后,人们开始熟悉一些相互矛盾的事实。一个潜在的惊喜是,当前的酒吧, “hot-zero”[0],在其整个生命周期中包含 Close[0] == Bid

在运行栏被aNewBarEVENT 终止后(由Volume[0] == 1 (或Volume[0] &lt; aPreviousVolume_0 发出信号)——对于案例来说,这是一种更安全的模式,MQL4-松耦合事件循环错过了一些@ 987654339@-arrivals during it's busy-episode )),Close[1] 代表各自Bar-期间的最后访问价格,Close[0] 一直在不断变化的 Bid 价格

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-26
    • 2018-06-14
    • 2018-11-16
    • 1970-01-01
    • 2017-11-09
    • 2016-09-21
    相关资源
    最近更新 更多