【问题标题】: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/finally 或 try/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 <= aBarPtrIDX < Bars
下一个目标?一个Close[aBarPtrIDX] 的误解
在MQL4 领域待了一段时间后,人们开始熟悉一些相互矛盾的事实。一个潜在的惊喜是,当前的酒吧,
“hot-zero”[0],在其整个生命周期中包含 Close[0] == Bid。
在运行栏被aNewBarEVENT 终止后(由Volume[0] == 1 (或Volume[0] < aPreviousVolume_0 发出信号)——对于案例来说,这是一种更安全的模式,MQL4-松耦合事件循环错过了一些@ 987654339@-arrivals during it's busy-episode )),Close[1] 代表各自Bar-期间的最后访问价格,Close[0] 一直在不断变化的 Bid 价格