在我的MQL4专家顾问中,我需要在执行之前检查此代码,天气是否正确。有没有办法为此使用 try/catch
块?它是用C语言编写的。
OrderSelect( i, SELECT_BY_POS );
if ( OrderType() == OP_SELL ){
OrderClose( OrderTicket(), OrderLots(), Ask, 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等的有效性