Você está perdendo oportunidades de negociação:
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Registro
Login
Você concorda com a política do site e com os termos de uso
Se você não tem uma conta, por favor registre-se
Fórum sobre Comércio, Sistemas Automatizados de Comércio e Testes de Estratégia
FAQ de Iniciantes MQL5 MT5 MetaTrader 5
Aleksey Vyazmikin, 2019.02.17 06:56
Decidi repetir o experimento novamente, aqui está o código
E aqui está o resultado
Alguma idéia do que causou o erro?Os telepatas estão de férias. E para as pessoas comuns, precisamos:
Onde foi dito que houve um erro? Eu lhe disse - procure o ponto na biblioteca onde ele pode estar escrito na variável _LastError. Não é necessariamente que o código com o erro tenha funcionado. Porque pode procurar por um objeto (e se ele estiver ausente, o código de erro será escrito na variável) e criá-lo. Mas se o objeto não for criado, então é um erro, mas ele será criado e tudo dará certo. Mas após a verificação, o código de erro (o objeto estava ausente antes da criação) será escrito em uma variável, que você então lerá em seu código.
Os telepatas estão de férias. O que é necessário para as pessoas comuns é:
1. Código
2. Nenhuma expectativa de mensagens de erro no log
3. Windows 7 Home 32 bit, construído em 1940, não conectado ao servidor durante os testes - corretor Discovery.
Onde você foi informado de que há um erro? Eu lhe disse - procure um fragmento na biblioteca onde ele possa estar escrito na variável _LastError. Não é necessariamente que o código com o erro tenha funcionado. Porque pode procurar por um objeto (e se ele estiver ausente, o código de erro será escrito na variável) e criá-lo. Mas se o objeto não for criado, é um erro, mas será criado e tudo vai dar certo. Mas após a verificação, o código de erro (o objeto estava ausente antes da criação) será escrito em uma variável, que você então lerá em seu código.
A biblioteca deve produzir um erro quando há um erro real, ou lidar corretamente com a situação e não produzir um erro onde não há nenhum. Se o meu uso da biblioteca não estiver descrito na classe ao verificar a existência de erros, você deve especificá-lo. De qualquer forma, não é razoável para o usuário editar as bibliotecas do fabricante do produto.
A biblioteca deve produzir um erro quando há um erro real, ou lidar corretamente com a situação e não produzir um erro onde não há nenhum. Se o meu uso da biblioteca não estiver descrito na classe ao verificar a existência de erros, você deve especificá-lo. De qualquer forma, não é razoável para o usuário editar as bibliotecas do fabricante do produto.
Não há erro aí, leia novamente:
Onde você foi informado de que havia um erro? Eu lhe disse - procure um fragmento na biblioteca onde ele possa estar escrito na variável _LastError. Não é necessariamente que o código com o erro tenha funcionado. Porque pode procurar por um objeto (e se ele estiver ausente, o código de erro será escrito na variável) e criá-lo. Mas se o objeto não for criado, então é um erro, mas ele será criado e tudo dará certo. Mas depois de verificar o código de erro (o objeto estava ausente antes da criação) será escrito em uma variável que você então lerá em seu código.
Portanto, é apenas seu interesse saber porque você leu o erro após a execução normal do código. O que você não entende é que a presença de código diferente de zero na variável _LastError não significa necessariamente que há um erro no código da CGraphic e não apenas nele. Neste caso, poderia ser um simples resultado da busca pela existência de um objeto, que foi executado dentro da CGraphic em SB. Houve um pedido de um objeto pelo nome, o resultado retornou -1 e o código 4202 foi escrito em _LastError. Então o objeto foi criado, tudo funcionou e foi devolvido ao programa de chamada. E lá você lê imediatamente o código de erro e o obtém. Mas não há erro - você vê o resultado de consultas dentro da SB.
Estou apenas sugerindo uma possível razão para o que você está relatando.
Portanto, se você realmente quer encontrar um erro real e relatá-lo, você precisa passar por todo o código CGráfico no depurador e pegar o erro real que levará a falhas lógicas e de desempenho, em vez de apenas afirmar que você leu o código de erro e, portanto - ele está definitivamente lá.
Não há erro aí, leia novamente:
Portanto - é apenas seu interesse saber porque você está lendo o erro após a execução normal do código. Você provavelmente não entende que o conteúdo da variável _LastError, que não é zero, não significa necessariamente que exista um erro no código CGráfico, e não apenas nele. Neste caso, poderia ser um simples resultado da busca pela existência de um objeto, que foi executado dentro da CGraphic em SB. Houve um pedido de um objeto pelo nome, o resultado retornou -1 e o código 4202 foi escrito em _LastError. Então o objeto foi criado, tudo funcionou e foi devolvido ao programa de chamada. E lá você lê imediatamente o código de erro e o obtém. Mas não há erro algum - você vê o resultado de consultas dentro da SB.
Estou apenas sugerindo uma possível razão para o que você está relatando.
Portanto, se você realmente quer encontrar o erro real e relatá-lo, então você precisa passar por todo o código CGráfico no depurador e pegar o erro real que fará com que a lógica e a operação falhem, ao invés de apenas alegar que você leu o código de erro e, portanto - ele está definitivamente lá.
Você mesmo disse em seu raciocínio lógico que poderia haver um erro no código, e este se expressa em não reiniciar o erro. que foi recebido devido à falta de um objeto antes de ser criado.
Não, eu não tenho competência para procurar um erro em código complexo e depois obter uma resposta de que foi pretendido dessa forma.
Você pode me dizer se esta mensagem é ou não um erro do usuário?
O código que aponta para isso éD.PointsFill(falso);
Você mesmo indicou em seu raciocínio lógico que pode haver um erro no código, e ele é expresso por não redefinir o erro. que foi recebido devido à ausência do objeto antes de ele ter sido criado.
Não, eu não tenho competência para procurar um erro em código complexo e depois obter uma resposta de que foi pretendido dessa forma.
Você pode me dizer se esta mensagem é ou não um erro do usuário?
Ele aponta para este código -D.PointsFill(falso);
Não entendo o significado da frase de forma alguma.
Parece-me que já lhe descrevi tudo em detalhes.
Eu não sei. Não há muita informação.
Não entendo o significado da frase de forma alguma.
Parece-me que já lhe expliquei tudo em detalhes.
Eu não sei. Não há muita informação.
Você não entende que se seu código é construído para reagir a um erro (nós criamos um objeto em caso de erro), então após corrigir o erro(criar um objeto) é lógico reiniciar este erro, o que, de acordo com seu raciocínio lógico, não é feito na biblioteca.
Aqui também não tenho informações de como reagir a este erro...
Você não entende que se o código é construído sobre a resposta ao erro (em caso de erro, criamos um objeto), então após a correção do erro(criação do objeto), é lógico reiniciar este erro, o que, de acordo com seu raciocínio lógico, não é feito na biblioteca.
Aqui não tenho informações sobre como reagir a este erro...
Você deve estar bem ciente de que não é o código em _LastError que não é igual a zero que é um erro, mas o resultado retornado pela função que aponta para uma execução errônea desta função. E _LastError contém código que aponta exatamente para aquele erro que faz com que a função seja executada por engano. Portanto, é duvidoso que você possa usar a descrição do código de erro armazenado na variável de serviço em vez de usar diretamente o código de retorno da função. Se a função retornada -1 ou falsa ou 0 (para cada função seu código de erro é descrito na ajuda), bem - somente a análise do resultado retornado pela função deve ser tratada por você, não o código em _LastError, que não indica o erro, mas é usado para indicar a causa do retorno de algum resultado retornado pela função.
A função de busca de objeto retorna um valor menor que zero no caso de um objeto com o nome dado não existir. É um erro? Não. Esta é uma resposta regular da função, com base na qual você toma uma decisão sobre a criação de um objeto com o nome dado. O código contido em _LastError diz explicitamente que "Um objeto com o nome solicitado não existe" - você pode criá-lo.
Bem, estou cansado de explicar isso para você. Quem quiser, vai entender.