А это не безусловное обнуление а только если last_error_fifo == 0 короче те же яйца только в профиль. проверяйте что вернула функция прежде чем проверять ошибки.
Последняя - ErrReaction(err) - это обработка ошибки.
Например, так :
int ErrReaction(int err)
{
switch(err)
{
case ERR_TRADE_NOT_ALLOWED :
Print("TRADE NOT ALLOWED ! SWITCH ON option \' Allow live trading\' (Необходимо включить опцию \'Разрешить советнику торговать\')");
case ERR_INVALID_FUNCTION_PARAMSCNT :
case ERR_INVALID_FUNCTION_PARAMVALUE :
case ERR_INVALID_STOPS :
case ERR_INVALID_TRADE_VOLUME :
case ERR_MARKET_CLOSED :
case ERR_TRADE_DISABLED :
case ERR_NOT_ENOUGH_MONEY :
return(-err);
case ERR_NO_CONNECTION :
............................................
case ERR_BROKER_BUSY :
case ERR_TRADE_CONTEXT_BUSY :
..............................
case ERR_PRICE_CHANGED :
case ERR_OFF_QUOTES :
case ERR_REQUOTE :
.................................................
default: break;
}//switch(err)return(0);
}//int ErrReaction(int err)
функция обработки разделяет ошибки на "устранимые" и "неустанимые" - "устранимые" пытается устранить, код неустранимой возвращает обратно - для обработки во внешней (вызвывающей) процедуре.
ну всеравно мои тараканы круче потому что нет необходимости проверять что вернула каждая функция так код выглядит лучше... плюс к тому же можно собственные коды ошибок организовать.
для кого же изобретатели MQL5 так стараются SetUserError... они зарезервировали целых 65535 кодов ошибок для себя а все что выше берите не жалко можете свои организовать :)
Желательно, конечно, иметь функцию обработки всех наиболее значимых ошибок, ну, а далее логика, заложенная в советник, "откорректирует" приоритеты.
Я, например, считаю, что достаточно 5 раз попробовать открыть ордер и после этого прекратить попытки, а Вы может считаете, что надо 20 раз или открывать "до победы".
Я, например, считаю, что достаточно 5 раз попробовать открыть ордер и после этого прекратить попытки, а Вы может считаете, что надо 20 раз или открывать "до победы".
Нет, я ничего не считаю. Своего твердого и однозначного мнения нет, поэтому и обращаюсь с просьбой порекомендовать Наиболее Достойную функцию отработки ошибок.
А это не безусловное обнуление а только если last_error_fifo == 0 короче те же яйца только в профиль. проверяйте что вернула функция прежде чем проверять ошибки.
Развивайте тему.
Именно для Вас, смотрите :
варианты окончания работы OrderSend();
1. Нет ошибки. Вы все равно вызываете GetLastError() - в принципе не страшно, если предыдущая ошибка считана, обработана и обнулена.
ИМХО - не нужно.
2. Есть ошибка - при вызове GetLastError() насколько я понял Вы анализируете одну единственную, хотя их может быть много.
ИМХО - более правильный вариант:
Последняя - ErrReaction(err) - это обработка ошибки.
Например, так :
функция обработки разделяет ошибки на "устранимые" и "неустанимые" - "устранимые" пытается устранить, код неустранимой возвращает обратно - для обработки во внешней (вызвывающей) процедуре.
ну всеравно мои тараканы круче потому что нет необходимости проверять что вернула каждая функция так код выглядит лучше... плюс к тому же можно собственные коды ошибок организовать.
плюс к тому же можно собственные коды ошибок организовать.
нам как-то хватает, чтоб еще и собственные делать.
Это зависит от Вашей логики. Ведь можно сделать обработку каждой ошибки, а можно только тех которые важны в данной ситуации.
Желательно, конечно, иметь функцию обработки всех наиболее значимых ошибок, ну, а далее логика, заложенная в советник, "откорректирует" приоритеты.
Отдельно прошу прощения у топикстартера, если мой вопрос уводит в сторону от Главного направления темы.
нам как-то хватает, чтоб еще и собстенные делать.
для кого же изобретатели MQL5 так стараются SetUserError... они зарезервировали целых 65535 кодов ошибок для себя а все что выше берите не жалко можете свои организовать :)
Именно для Вас, смотрите :
2. Есть ошибка - при вызове GetLastError() насколько я понял Вы анализируете одну единственную, хотя их может быть много.
ИМХО - более правильный вариант:
Последняя - ErrReaction(err) - это обработка ошибки.
vit46:
Ознакомьтесь с этим материалом. imho, не повредит.
https://www.mql5.com/ru/forum/131373
Желательно, конечно, иметь функцию обработки всех наиболее значимых ошибок, ну, а далее логика, заложенная в советник, "откорректирует" приоритеты.
Я, например, считаю, что достаточно 5 раз попробовать открыть ордер и после этого прекратить попытки, а Вы может считаете, что надо 20 раз или открывать "до победы".
Я, например, считаю, что достаточно 5 раз попробовать открыть ордер и после этого прекратить попытки, а Вы может считаете, что надо 20 раз или открывать "до победы".
Нет, я ничего не считаю. Своего твердого и однозначного мнения нет, поэтому и обращаюсь с просьбой порекомендовать Наиболее Достойную функцию отработки ошибок.