Даеш SetLastError!!! - страница 5

 
vit46:

А это не безусловное обнуление а только если last_error_fifo == 0 короче те же яйца только в профиль. проверяйте что вернула функция прежде чем проверять ошибки.

 
Roger:
Развивайте тему.

Именно для Вас, смотрите :

варианты окончания работы OrderSend();

1. Нет ошибки. Вы все равно вызываете GetLastError() - в принципе не страшно, если предыдущая ошибка считана, обработана и обнулена.

ИМХО - не нужно.

2. Есть ошибка - при вызове GetLastError() насколько я понял Вы анализируете одну единственную, хотя их может быть много.

ИМХО - более правильный вариант:

        ticket=OrderSend(symbol,cmd,op_v,ordprice,slippage,0,0,comment,magic,expiration,arrow_color);
        if(ticket<0)
        {
            err = GetLastError();
            int err_res = ErrReaction(err);
.........................................

Последняя - 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)

функция обработки разделяет ошибки на "устранимые" и "неустанимые" - "устранимые" пытается устранить, код неустранимой возвращает обратно - для обработки во внешней (вызвывающей) процедуре.

 
sergeev:



ну всеравно мои тараканы круче потому что нет необходимости проверять что вернула каждая функция так код выглядит лучше... плюс к тому же можно собственные коды ошибок организовать.
 
vit46:
плюс к тому же можно собственные коды ошибок организовать.


нам как-то хватает, чтоб еще и собственные делать.

 
Roger:

Это зависит от Вашей логики. Ведь можно сделать обработку каждой ошибки, а можно только тех которые важны в данной ситуации.

Желательно, конечно, иметь функцию обработки всех наиболее значимых ошибок, ну, а далее логика, заложенная в советник, "откорректирует" приоритеты.

Отдельно прошу прощения у топикстартера, если мой вопрос уводит в сторону от Главного направления темы.

 
sergeev:


нам как-то хватает, чтоб еще и собстенные делать.



для кого же изобретатели MQL5 так стараются SetUserError... они зарезервировали целых 65535 кодов ошибок для себя а все что выше берите не жалко можете свои организовать :)
 
VladislavVG:

Именно для Вас, смотрите :

2. Есть ошибка - при вызове GetLastError() насколько я понял Вы анализируете одну единственную, хотя их может быть много.

ИМХО - более правильный вариант:

Последняя - ErrReaction(err) - это обработка ошибки.

Именно этот вариант и есть спорный. Если Вы не обнулите ошибку, а после ОрдерСенд не будет ошибки, Вы все равно обработаете старую ошибку.
 

vit46:

Ознакомьтесь с этим материалом. imho, не повредит.

https://www.mql5.com/ru/forum/131373

 
charter:

Желательно, конечно, иметь функцию обработки всех наиболее значимых ошибок, ну, а далее логика, заложенная в советник, "откорректирует" приоритеты.


Я, например, считаю, что достаточно 5 раз попробовать открыть ордер и после этого прекратить попытки, а Вы может считаете, что надо 20 раз или открывать "до победы".
 
Roger:

Я, например, считаю, что достаточно 5 раз попробовать открыть ордер и после этого прекратить попытки, а Вы может считаете, что надо 20 раз или открывать "до победы".

Нет, я ничего не считаю. Своего твердого и однозначного мнения нет, поэтому и обращаюсь с просьбой порекомендовать Наиболее Достойную функцию отработки ошибок.
Причина обращения: