有没有办法在MQL4专家顾问代码中使用try catch块?

时间:2018-03-02 06:56:48

标签: mql4

在我的MQL4专家顾问中,我需要在执行之前检查此代码,天气是否正确。有没有办法为此使用 try/catch 块?它是用C语言编写的。

OrderSelect( i, SELECT_BY_POS );
if (  OrderType() == OP_SELL ){
      OrderClose( OrderTicket(), OrderLots(), Ask, 3 );
}

3 个答案:

答案 0 :(得分:3)

正如在评论中建议的那样,尝试使用/ catch来让代码抛出异常并捕获它。如果没有捕获你的程序会关闭,如果没有抛出,那么结果可能是未知的。

MQL4编程语言根本没有异常(但可以通过调用一个严重错误来关闭,例如调用数组的-1元素或除以零)。即使你可以,也不需要在这里抛出异常。

OrderSelect()返回布尔值,因此您可以检查它是否为false然后继续循环或返回。 OrderClose()返回boolean(结果 - 成功关闭或不成功),因此建议您检查该函数是否返回false,如果为false - 需要记录错误并再试一次

答案 1 :(得分:0)

好吧,让我有一个不同的观点 - 有一种方法可以做到:

鉴于您的计划是找到一种方法,如何在 try/catch 域中启用 MQL4/5 子句,这样做的方法。

虽然许多建议说不可能或不需要,但让我们接受O / P要求的事实,并专注于如何。

如果确实需要一个 try/catch 融合的代码部分, 我会通过DLL在外部 #import -ed代码中实现此类代码,然后选择具有原生 try/catch 语言构造函数可用于希望在其中融合代码块的算法。

丹尼尔通过明确尝试访问 Array[EMPTY] 故意将MQL4系统执行丢弃到垃圾箱的示例很有意思,到目前为止它已经足够了致电 ExpertRemove() 并享受代码的正确系统终止,包括OnDeinit(){...}句柄传递。对于@DanielKniaz来说,杀戮呼叫似乎是相当残酷的模式绕过系统代码终止+1。 确实很酷!

答案 2 :(得分:0)

根据我在MQL4专家顾问函数中的观点,没有办法使用try catch方法作为java.you只能在执行之前通过其他方法捕获错误,例如检查orderticket等的有效性