Discussão do artigo "Tratamento de erros e registro em log na MQL5"

 

Novo artigo Tratamento de erros e registro em log na MQL5 foi publicado:

Este artigo aborda questões sobre o tratamento de erros comuns no software. Além disso, trata do registro em log e monstra uma forma de empregar o registrador de logs via MQL5.

Essa abordagem possui várias desvantagens:

  1. As mensagens de vários programas podem ser despejadas em uma "pilha" comum, o que impede a sua análise
  2. O arquivo de log, tendo em vista a fácil disponibilidade, pode ser acidentalmente ou deliberadamente excluído pelo usuário.
  3. É difícil implementar e configurar os níveis de registro em log.
  4. É impossível redirecionar a exibição da mensagem de log para outra fonte (arquivo externo, banco de dados, correio, etc.).
  5. É impossível implementar a rotação forçada dos arquivos de log (alterar arquivos segundo a data, tempo ou atingimento de certo tamanho).

Autor: Sergey Eremin

 

Boa tarde!

Por que você não considerou a questão "Processamento de códigos de retorno do servidor de comércio"?

Isso é muito mais IMPORTANTE do que tudo em seu artigo.

 
Михаил:

Boa tarde!

Por que você não considerou a questão "Processamento de códigos de retorno do servidor de comércio"?

Isso é muito mais IMPORTANTE do que tudo em seu artigo.

Antes de mais nada, leia o artigo inteiro. Se não o entender, leia-o novamente e novamente até compreendê-lo completamente. Só então você perceberá que sua mensagem não tem nada a ver com o tópico abordado no artigo.
 
Karputov Vladimir:
Antes de mais nada, leia o artigo inteiro. Se não o entender, leia-o novamente e novamente até compreendê-lo completamente. Só então você perceberá que sua mensagem não tem nada a ver com o tópico do artigo.

O artigo deveria ter sido chamado não de"Tratamento e registro deerros no MT5",

mas "Processamento de erros PRÓPRIOS e registro de logs no MT5"!

 
Михаил:

Boa tarde!

Por que você não considerou a questão "Processamento de códigos de retorno do servidor de comércio"?

Ela é muito mais IMPORTANTE do que tudo em seu artigo.

Mikhail, por que você simplesmente não escreve esse artigo? É um tópico pronto! :)

Não achei que esse tópico fosse mais importante do que tudo o que está no artigo. Se você acha que sim - bem, faça-o, por que me repreender por não tê-lo feito?


Na verdade, não tentei considerar esse ponto em detalhes, pois queria abordar questões mais gerais. Portanto, podemos entrar em uma análise detalhada dos códigos de erro retornados pelas funções padrão da linguagem. Por exemplo, como outro tópico do artigo - "Manipulação de erros que ocorrem ao trabalhar com objetos gráficos em MQL5".

Meu objetivo não era o mesmo. Mas, sim, um mês depois de escrever o artigo, vejo que ele ficou "mais ou menos". Bem, tentarei ser melhor no futuro.

 
Sergey Eremin:

Por que você simplesmente não escreve um artigo como esse? É um tópico pronto! :)

Na verdade, eu não queria discutir esse ponto em detalhes, pois queria abordar questões mais gerais. Portanto, podemos analisar detalhadamente os códigos de erro retornados pelas funções padrão da linguagem. Por exemplo, como outro tópico do artigo - "Manipulação de erros que ocorrem ao trabalhar com objetos gráficos em MQL5".

Meu objetivo não era o mesmo. Mas, sim, um mês depois de escrever o artigo, vejo que ele ficou "mais ou menos". Bem, tentarei ser melhor no futuro.

Sergei!

Está tudo bem, mas eu chamaria o artigo de

"Métodos avançados de depuração de Expert Advisors no MT5 com registro".

Porque quando o Expert Advisor é depurado, não há mais erros,

mas os códigos de retorno do servidor de negociação podem estar cheios de erros,

que precisam ser processados apenas no modo normal do Consultor especialista.

 
Михаил:

Sergei!

Está tudo bem, mas eu chamaria o artigo de

"Métodos avançados de depuração de Expert Advisors no MT5 com registro".

Mas o tratamento de erros não é depuração :)

Ou você quer dizer que, por exemplo, processar o erro "fundos insuficientes" (que é mencionado no artigo como exemplo) é depuração?

 
Sergey Eremin:

Mas o tratamento de erros não é depuração :)

Ou você quer dizer que, por exemplo, processar o erro "fundos insuficientes" (que é o exemplo mencionado no artigo) é depuração?

"Fundos insuficientes" não é um erro, mas uma mensagem para você (para o especialista sobre o estado da sua conta) e

essa é uma situação de tratamento PADRÃO. E um desenvolvedor normal DEVE, antes de fazer uma transação ou fazer um pedido.

verificar a disponibilidade de fundos.

//+------------------------------------------------------------------+
//| Função Expert Check Money|
//+------------------------------------------------------------------+ 
bool CheckMoney( const long volume )
{
  double a_go = SymbolInfoDouble( _Symbol, SYMBOL_MARGIN_INITIAL ) * double(volume);
  double free_margin = ( AccountInfoDouble( ACCOUNT_FREEMARGIN ) / 100 ) * 90;
//--- 
  if ( a_go <= free_margin )
  {
    return( true );
  }
  Print( "Dinheiro do cheque: fundos insuficientes!" );
  return( false );
}
 
Михаил:

"Insufficient funds" não é um erro, mas uma mensagem para você (para o Expert Advisor sobre o estado da sua conta) e

essa é uma situação processada PADRÃO.

Mas também não é um momento de depuração. Chame-o como quiser, mas ele deve ser processado (e, a meu ver, concordamos com isso). No meu entendimento, é uma situação errônea em relação ao curso normal das coisas. Afinal de contas, o especialista pode presumir que os meios são suficientes. E se isso não for verificado e processado de alguma forma, acabará não sendo nada.

Assim como, por exemplo, o erro de abrir um arquivo devido à sua ausência - por um lado, é uma situação padrão que precisa ser tratada, mas, por outro lado, é um erro supor que o arquivo está lá e que podemos trabalhar com ele.


E mais uma vez: neste artigo, tentei considerar questões de tratamento de erros no processo de operação do programa em vez de questões de depuração de software. Esse é um tópico completamente diferente e se correlaciona com o artigo apenas dentro da estrutura de registro (e apenas parcialmente).
E não era meu objetivo considerar erros específicos (sejam códigos de retorno do servidor comercial ou, como eu disse acima, por exemplo, possíveis erros ao trabalhar com objetos gráficos). Apenas métodos gerais que são aplicáveis a erros (ou situações padrão, se preferir) que também são retornados pelo servidor de negociação.

Desculpe se minha mensagem não ficou clara. Espero que tudo se encaixe agora.

 
Михаил:

essa é uma situação de tratamento PADRÃO. E um desenvolvedor normal DEVE, antes de fazer uma transação ou fazer um pedido.

ou fazer um pedido para verificar a disponibilidade de fundos.

Infelizmente, tenho que perguntar: você leu o artigo ou apenas o leu e julgou? Eu falei sobre as verificações preliminares no artigo (eu me arrependo, não falei especificamente sobre a verificação de fundos, mas achei que estava claro). E não é uma má ideia lidar com um possível erro "fundos insuficientes" mesmo depois de tentar abrir uma negociação, mesmo que tenhamos feito essa verificação antes. Tudo pode acontecer no intervalo de tempo entre a verificação "anterior" e a tentativa imediata de abertura.

 
Sergey Eremin:

Infelizmente, tenho que perguntar: você leu o artigo ou apenas o leu e julgou? Falei sobre verificações preliminares no artigo (me arrependo, não falei especificamente sobre verificação de fundos, mas achei que estava claro). E lidar com um possível erro de "fundos insuficientes" mesmo depois de tentar abrir uma negociação não é a pior ideia, mesmo que tenhamos feito essa verificação antes. Tudo pode acontecer no período entre a verificação "anterior" e a tentativa imediata de abertura.

Sergey!

É para isso que servem os códigos de retorno do servidor de negociação nessas situações.

Exemplo: Você verificou a disponibilidade de fundos livres e recebeu um resultado afirmativo.

Você enviou uma ordem, mas ela não foi aceita (como você disse: "O que pode acontecer"),

então o servidor de negociação lhe dará o erro "Insufficient funds" (fundos insuficientes) no código de retorno.

E acontece que não faz absolutamente "nenhuma diferença" quantas vezes você verifica o erro.

entre seu cheque (CheckMoney) e o código de retorno do servidor de negociação!