如何使用 MetaTrader4 错误代码刷新进行正确的错误处理?
How to use a MetaTrader4 Error Code Refresh for proper error handling?
我的 EA 上有一个 "set up",当我的 Expert Advisor 遇到错误并根据 "set up" 中预先确定的 3-4 位错误代码向我发送电子邮件时=11=].
/* technically speaking,
error codes with 5+ digits are also possible,
Using:
------ */
SetUserError( 1000000 ); /*
// this will set an error-state
// with a number 1065536 -- having a bit more than the said 3 ~ 4 digits
// composed as ( 1000000 + ERR_USER_ERROR_FIRST )
*/
这是为了让我能够诊断问题。
只是想澄清一下我是否需要刷新错误代码(来自以前的错误)我收到我的电子邮件,或者当我的 MT4 日志中出现新错误时它会自动执行此操作平台?
有一个有用的函数 ResetLastError()
明确地将 _LastError
设置为零。接下来,每次调用 GetLastError()
函数也会产生副作用,因为它还会将 _LastError
变量设置为零。
无论哪种方式,通常的做法是嵌入(包围)一个部分,其中一些 error-states 需要相应地处理,由 a:
// -------------------------------------------- // START_________________________
GetLastError(); // implicit pre-reset _LastError
ResetLastError(); // explicit pre-reset _LastError
bool an_OK_flag = OrderModify( ... ); // XTO call w ex-post _LastError
int anErrorSTATEtoHANDLE = GetLastError(); /* get a value of the _LastError
+ implicit post-reset _LastError */
// -------------------------------------------- // HANDLE ERROR-STATE(s)
switch( anErrorSTATEtoHANDLE ){
case ERR_NO_ERROR: break;
case ERR_NO_RESULT: ...
break;
case ERR_INVALID_TRADE_PARAMETERS: ...
break;
case ERR_SERVER_BUSY: ...
break;
case ERR_BROKER_BUSY: ...
break;
case ERR_TOO_MANY_REQUESTS: ...
break;
case ERR_TRADE_MODIFY_DENIED: ...
break;
...
default: break;
}
// -------------------------------------------- // FIN __________________________
这使您的代码能够抵抗任何类型的 "forgotten"(巧合的是 un-reset)最后一个错误(不会在出现此类错误的地方使您的 code-execution 崩溃但是 ... ) 稍后会在 "next" error-handling 部分触发不需要的行为,因此在 email-signal 不存在的情况下也可能会向您发送电子邮件,但 "forgotten" ( un-reset ) _LastError
系统寄存器 co-incidentally 中的值匹配 error-handling 的情况,导致发送上述电子邮件(就好像有一个 email-signal 存在(如上所述,不存在)。
我的 EA 上有一个 "set up",当我的 Expert Advisor 遇到错误并根据 "set up" 中预先确定的 3-4 位错误代码向我发送电子邮件时=11=].
/* technically speaking,
error codes with 5+ digits are also possible,
Using:
------ */
SetUserError( 1000000 ); /*
// this will set an error-state
// with a number 1065536 -- having a bit more than the said 3 ~ 4 digits
// composed as ( 1000000 + ERR_USER_ERROR_FIRST )
*/
这是为了让我能够诊断问题。
只是想澄清一下我是否需要刷新错误代码(来自以前的错误)我收到我的电子邮件,或者当我的 MT4 日志中出现新错误时它会自动执行此操作平台?
有一个有用的函数 ResetLastError()
明确地将 _LastError
设置为零。接下来,每次调用 GetLastError()
函数也会产生副作用,因为它还会将 _LastError
变量设置为零。
无论哪种方式,通常的做法是嵌入(包围)一个部分,其中一些 error-states 需要相应地处理,由 a:
// -------------------------------------------- // START_________________________
GetLastError(); // implicit pre-reset _LastError
ResetLastError(); // explicit pre-reset _LastError
bool an_OK_flag = OrderModify( ... ); // XTO call w ex-post _LastError
int anErrorSTATEtoHANDLE = GetLastError(); /* get a value of the _LastError
+ implicit post-reset _LastError */
// -------------------------------------------- // HANDLE ERROR-STATE(s)
switch( anErrorSTATEtoHANDLE ){
case ERR_NO_ERROR: break;
case ERR_NO_RESULT: ...
break;
case ERR_INVALID_TRADE_PARAMETERS: ...
break;
case ERR_SERVER_BUSY: ...
break;
case ERR_BROKER_BUSY: ...
break;
case ERR_TOO_MANY_REQUESTS: ...
break;
case ERR_TRADE_MODIFY_DENIED: ...
break;
...
default: break;
}
// -------------------------------------------- // FIN __________________________
这使您的代码能够抵抗任何类型的 "forgotten"(巧合的是 un-reset)最后一个错误(不会在出现此类错误的地方使您的 code-execution 崩溃但是 ... ) 稍后会在 "next" error-handling 部分触发不需要的行为,因此在 email-signal 不存在的情况下也可能会向您发送电子邮件,但 "forgotten" ( un-reset ) _LastError
系统寄存器 co-incidentally 中的值匹配 error-handling 的情况,导致发送上述电子邮件(就好像有一个 email-signal 存在(如上所述,不存在)。