Erros, bugs, perguntas - página 1182
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
A optimização não está a funcionar.
2014.08.05 19:34:42 Testador não seleccionado parâmetro optimizado, por favor verifique a(s) entrada(s) a ser(em) optimizada(s) e defina cuidadosamente os valores de início, passo e paragem
A tradução não deu nada.
O que quer dizer com "nada"? A tradução deveria ter-me dado algo, como que eu deveria seleccionar pelo menos um parâmetro para optimização e garantir que o início, fim e passo do teste estão correctos.
Enfrentei este problema: preciso de comparar dois objectos da mesma classe um com o outro e decidi sobrecarregar o operador == por conveniência. Verificou-se que se os objectos são dinâmicos, o meu operador não é executado, e em vez dos próprios objectos são comparados os seus apontadores. Bem, faz sentido em princípio, a operação de saltar para o objecto pelo seu ponteiro é necessária: *a == *b. Mas no MQL esta possibilidade tinha sido esquecida. Temos de acrescentar.
Embora eu tenha acabado de pensar, o facto de estarmos a comparar apontadores em vez de objectos é fundamentalmente errado, considerando as especificidades da linguagem. Afinal, o MQL é uma linguagem gerida, e o próprio conceito de "objecto" é aqui utilizado independentemente de como o objecto é armazenado e como é acedido. Os membros e os métodos são, em qualquer caso, acedidos por um ponto. De forma correspondente, o operador de comparação deve trabalhar da mesma forma tanto para objectos estaticamente seleccionados como para objectos dinâmicos. E se precisar de comparar apontadores, deve fazê-lousando GetPointer().
Embora estivesse apenas a pensar, o facto de haver uma comparação de apontadores em vez dos próprios objectos é fundamentalmente errado, dadas as especificidades da língua.
Ao testar o Expert Advisor, ele gera um erro
lucro takeprofit inválido para a função OrderSend
Erro de encomendaEnviar 4107
Como posso corrigi-lo sem entrar no código?
Não há necessidade de inventar regras de comparação em MQL que contradigam C++, desde que outros meios possam ser utilizados. Se tiver indicações e precisar de comparar objectos, use uma função de comparação É uma coisa que sugere permitir uma entrada do tipo (*a == *b), e outra coisa muito diferente para dar um significado diferente à entrada (a == b)
Bem, estou a explicar que as regras de MQL contradizem C++ como é. A referência a um objecto por um ponteiro aqui é feita com um ponto, enquanto que deve ser feita com ->, se seguirmos as regras de C++.
Isto é, "ponteiro" e "objecto" são duas noções absolutamente diferentes em C++, é por isso que a sintaxe é diferente. Tudo é rigoroso, mas aqui tudo é misturado. Parece que abordamos as propriedades e métodos de um ponteiro. Não estou a dizer que é mau, é mais conveniente ao OOP, é feito em C# por exemplo. Mas então tudo o resto deve ser implementado da mesma forma. Caso contrário, ocorrem contradições e confusão: em alguns casos usamos um ponteiro da mesma forma que o próprio objecto, e em outros casos o ponteiro ganha vida de repente.
Procedendo ao lado prático de tudo isto, já me deparei com um problema: o meu código estava a utilizar objectos estáticos. Depois decidi substituir alguns deles por dinâmicos. Como resultado, as operações de comparação e atribuição começaram a funcionar de forma bastante diferente. E este problema era difícil de detectar porque o programa continua a compilar e a funcionar normalmente, mas não da forma que deveria.
Tenho alguma classe no meu código que contém algum objecto:
A classe CObj é declarada antes dela.
Ao tentar compilar recebo um erro: 'Objecto' - não pode ser desajustado
O que significa este erro e qual é a sua causa? Não me lembro de ter encontrado este erro antes. A classe CObj tem um construtor e destruidor.
Tentei declarar Objecto simplesmente como uma variável - tudo está bem. Mas não o fará quando fizer parte de uma classe.
Então, alguém pode explicar o que é este erro ("- não pode ser desestabilizado")? Quando é que ele ocorre?