Erros, bugs, perguntas - página 1440
![MQL5 - Linguagem para estratégias de negociação inseridas no terminal do cliente MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
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
MT 4. MathRand() gerador de números aleatórios dentro de OnTick(). Ao testar a coruja, obtêm-se resultados diferentes quando esta é executada novamente nas mesmas definições. Isto é natural se o número gerado afectar o algoritmo.
Ao optimizar, obtenho, por alguma razão, resultados idênticos numa segunda corrida com as mesmas configurações. Então MathRand() não funciona em modo de optimização?
Segundo (tenho medo de cometer um erro aqui, espero queAlexander Puzanov possa corrigir-me se alguma coisa), se o programador por alguma razão decidir adicionar um item com índice 20 a uma matriz dinâmica, nada de mal acontecerá. A matriz tomará esta dimensão e escreverá aí um valor e inicializará os índices "em falta" com valores zero.
Exactamente. Porquê "zero"? Talvez deva ser EMPTY_VALUE ? Ou WRONG_VALUE ?
O problema de tais atribuições implícitas é exactamente a sua natureza implícita - o compilador introduz algum código, que um programador pensa de uma forma, enquanto outro pode pensar de forma diferente.
Além disso, é ineficaz - nem sempre é necessário inicializar imediatamente uma variável, e inicializar uma grande variedade num laço pode reduzir significativamente a velocidade.
E em terceiro lugar, ninguém impede o programador de controlar a dimensionalidade e o índice utilizado! A única diferença é que agora ele é obrigado a fazê-lo! )))
Se o compilador mantém um registo da dimensão de uma matriz em si, nenhuma classe será capaz de limpar este código. A eficiência pode muito bem baixar.
Ao mesmo tempo, se o compilador não se encarregar desta tarefa, o programador pode escrever uma classe para o fazer e depois utilizar uma matriz que se expandirá e será inicializada com zeros sempre que necessário.
No segundo caso, a flexibilidade é maior.
Portanto, o que propõe é também uma boa solução para muitos casos. Mas pode diminuir a eficácia, o que não é bom.
Este é, em princípio, um exemplo simples de como uma matriz dinâmica deve ser normalmente preenchida. Já não escrevo em C há muito tempo, não me lembro, mas é assim que as matrizes são preenchidas em php! Tudo é lógico e compreensível. Se eu adicionar um elemento a um array (arr[] = x), o array é automaticamente expandido, e o elemento é adicionado ao fim do array. E não temos de o esticar sozinhos, e não temos de especificar o índice do elemento por nós próprios. Mas aqui temos de fazer movimentos absolutamente desnecessários:
a diferença é óbvia...
Na minha opinião, é estranho, para dizer o mínimo ))))
As linguagens de programação estão divididas em estritamente dactilografadas e não. O seu PHP, R e outras linguagens funcionais pertencem às linguagens não estritamente dactilografadas. Em linguagens estritamente digitadas como MQL ou C# e Java, este tipo de manipulação ambígua de dados não é permitida. E isto é feito especificamente para a segurança do próprio programador. A tipagem rigorosa implica que cada um dos seus procedimentos é extremamente específico: "tomar um elemento no índice 0 no array" é um procedimento específico e claro, mas propõe a sua substituição por "tomar algo do array e adicioná-lo ao que o compilador decidir voltar primeiro". - Concorda que não irá longe nisto.
Por outro lado, é claro que queremos construções simples de alto nível sem o cansativo dimensionamento da matriz e constante rearranjo do utilizador. É exactamente para isso que serve a biblioteca padrão. Em vez de utilizar arrays básicos, mudar para as classes do grupo Array. É assim que, por exemplo, a adição de zero a 16 no conjunto CArrayInt se parece:
Como se pode ver, não há nada demasiado natural. E não há necessidade de rachar o cérebro sobre o tamanho actual da matriz e outros rearranjos. Tudo é feito por si, dentro de uma digitação rigorosa, e é convidado a concentrar-se directamente na tarefa do utilizador. Este é o poder e o objectivo do OOP.
A gravação completa não está disponível. Erro de compilação
Não consigo encontrar onde estou errado.
A tarefa consiste em encontrar o valor máximo e mínimo num intervalo
Ordem errada dos argumentos em ArrayMaximum(), ArrayMinimum().
Não consigo encontrar onde estou errado.
A tarefa consiste em encontrar o valor máximo e mínimo num intervalo
Funções
CopyHigh(_Symbol,0,2,Kol_Kan,HI);//copy values of maxima
CopyLow(_Symbol,0,2,Kol_Kan,LO); //copy values of minima
já redimensionou a matriz.
Isto é desnecessário
ArrayResize(HI,Kol_Kan); //seture o tamanho da matriz
ArrayResize(LO,Kol_Kan);
Неправильный порядок аргументов в ArrayMaximum(), ArrayMinimum().
Exactamente)) E aqui estava eu a pensar...
Funções
CopyHigh(_Symbol,0,2,Kol_Kan,HI);//copy values of maxima
CopyLow(_Symbol,0,2,Kol_Kan,LO); //copy values of minima
já redimensionou a matriz.
Isto é desnecessário
ArrayResize(HI,Kol_Kan); //seture o tamanho da matriz
ArrayResize(LO,Kol_Kan);
Sabê-lo-ei, obrigado.
O autor, por outro lado, já o descobriu. ))
PabloEs:
Exactamente)). E aqui estava eu a pensar...