使用Java
语言,可以使用try
- catch
机制处理异常。
MQL4
中是否存在任何类似行为?
此代码在array out of range
表达式中抛出错误“ Close[bar]
”,我无法正确处理。
任何帮助将不胜感激。
bool isBarClosed( int bar ) {
bool barClosed = true;
double closePrice = Close[bar];
int error = GetLastError();
if ( error == 4202 ) {
barClosed = false;
}
return barClosed;
}
答案 0 :(得分:3)
MQL4
对于python / java和类似语言中try/except/finally
或try/catch
用例的构造都没有语法支持。
假设没有编译时错误。
运行时错误很难处理,有些甚至导致软件崩溃。
我们可以而且应该主动使用适当的类型检查和用例预验证来清理MQL4代码,以防止异常。
例外情况是 dbPool
操作,在某些情况下,可能“合法地”无法产生预期结果。
GetLastError()
(如果事先将异常本身清除)可以作为几乎验尸后的身份识别,而不是异常处理程序。
_LastError == 4202 ... does not explain the trouble <<< stdlib.mqh
4202
ERR_OBJECT_DOES_NOT_EXIST
Object does not exist
您的问题似乎与 bar
“指向”TimeSeries
- 反向步进索引 Close[]
强>价值。
<强> 0 <= aBarPtrIDX < Bars
强>
Close[aBarPtrIDX]
错误概念在MQL4
域中度过一段时间后,人们会熟悉一些矛盾的事实。潜在的惊喜之一是,当前的酒吧,
“热零” [0]
,在其所有生命周期中都包含 Close[0] == Bid
。
运行栏被aNewBarEVENT
终止后(由Volume[0] == 1
发出信号(或Volume[0] < aPreviousVolume_0
- 一个更安全的案例模式,MQL4
- 松散耦合事件循环错过了几个quote
- 在忙碌事件期间到达)),Close[1]
表示相应Bar
- 期间的最后访问价格和Close[0]
不断变换 Bid
价格