Dê-me SetLastError!!! - página 5

 
vit46:

E não é zeragem incondicional, mas somente se last_error_fifo == 0. Em resumo, é o mesmo que ovos em perfil. verifique o que a função retornou antes de verificar a existência de erros.

 
Roger:
Desenvolva o tema.

Exatamente para você, veja :

Opções de rescisão OrderSend();

1. Sem erros. Você ainda chama GetLastError() - em princípio não há problema se o erro anterior for lido, processado e reinicializado.

IMHO - você não precisa fazer isso.

2. Há um erro - ao chamar GetLastError (), pelo que entendi, você analisa um único erro, embora possa haver muitos deles.

IMHO, é mais correto:

        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);
.........................................

A última é ErrReaction(err) - isto é manipulação de erros.

Por exemplo, assim :

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)

A função de processamento divide os erros em "corrigível" e "irrecuperável" - o "corrigível" tenta eliminar, o código do irrecuperável retorna - para processamento em um procedimento (de chamada) externo.

 
sergeev:



Enfim, minhas baratas estão mais frias porque não há necessidade de verificar o que cada função retornou para que o código pareça melhor... Além disso, você pode organizar seus próprios códigos de erro.
 
vit46:
Além disso, você pode organizar seus próprios códigos de erro.


de alguma forma, temos o suficiente para fazer o nosso próprio também.

 
Roger:

Depende de sua lógica. Afinal, você pode fazer o processamento de cada erro, e só pode fazer aqueles que são importantes nesta situação.

É desejável, é claro, ter uma função para processar todos os erros mais significativos, e então a lógica inerente ao Expert Advisor irá "ajustar" as prioridades.

Separadamente, peço desculpas ao iniciador do tópico se minha pergunta me afastar da direção principal do tópico.

 
sergeev:


De alguma forma, temos o suficiente para fazer o nosso próprio também.



Quem fazem os inventores da MQL5 se esforçam tanto para criar o SetUserError. eles reservaram até 65535 códigos de erro para si mesmos, e qualquer coisa acima que esteja ok, você pode organizar seu próprio :)
 
VladislavVG:

Só para você, veja :

2. Há um erro - ao chamar GetLastError () até onde eu entendo você analisa um único erro, embora possa haver muitos.

IMHO - variante mais correta:

A última é ErrReaction(err) - isto é manipulação de erros.

É esta opção que é discutível. Se você não zerar o erro e não houver erro após o OrderSend, você ainda processará o erro antigo.
 

vit46:

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

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

 
charter:

É desejável, é claro, ter uma função para processar todos os erros mais significativos, e então a lógica inerente ao Expert Advisor irá "corrigir" as prioridades.


Por exemplo, acredito que é suficiente tentar abrir um pedido 5 vezes e depois parar de tentar, enquanto você pode pensar que precisa abrir um pedido 20 vezes ou "para ganhar".
 
Roger:

Eu, por exemplo, acho que basta tentar abrir um pedido 5 vezes e depois parar de tentar, mas você pode pensar que tem que tentar 20 vezes ou abrir "até ganhar".

Não, eu não estou contando nada. Eu não tenho minha própria opinião firme e inequívoca, é por isso que estou pedindo que você recomende o recurso de correção de erros mais decente.