2017-01-19 6 views
1

Утро,Как использовать код ошибки MetaTrader4 Обновить для правильной обработки ошибок?

У меня есть «настройка» моего эксперта, чтобы отправить мне электронное письмо, когда у моего эксперта возникла ошибка и предоставит мне код ошибки в соответствии с предопределенным 3-4-значным кодом ошибки в documentation on the MQL4 website.

/* 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 ?

Любая помощь приветствуется :)

ответ

1

Добро пожаловать,
есть функция ПОЛЕЗНЫЕ ResetLastError(), которая явно устанавливает _LastError к нулю.
Далее, есть также побочный эффект каждого вызова функции GetLastError(), так как он также устанавливает ноль в переменную _LastError.

В любом случае,
это обычная практика для встраивания (объемного) раздел, где нужно, чтобы соответствующим образом обрабатываются, справа на некоторые ошибки-состояния:

// -------------------------------------------- // 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 __________________________ 

Это делает ваш код устойчивым к какой-то «забытой» (по совпадению без сброса) последней ошибки (которая не сбивала ваш код в месте, где такая ошибка появилась, но ...), которая позже вызовет нежелательное поведение в «следующем», погрешность обработки,
таким образом
потенциально
отправляет вам электронное письмо также в тех случаях, когда адрес электронной почты отсутствует, но значение «забытого» (без сброса) в системном регистре _LastError совпадало со случаем обработки ошибок, в результате чего было отправлено указанное сообщение (как если бы присутствовал сигнал электронной почты (который не был, как описано выше).

Во всяком случае, наслаждайтесь днем ​​& Счастливых Торговой

+1

Спасибо вам, очень высокой оценкой. Извините за задержку с ответом. –

Смежные вопросы