Erros, bugs, perguntas - página 2243
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
O código no indicador mql4 deixou de funcionar. como posso corrigi-lo?
O editor diz 'ObjectSetInteger' - nenhuma das sobrecargas pode ser aplicada à chamada de função
Tem estado a funcionar há anos e depois parou subitamente. É uma pena, no entanto.
Mas porque é que misturaram dois estilos? Se utilizar a primeira linha para especificar o código da seta, então utilize a segunda linha no mesmo estilo:
Tentei carregar uma nova versão do indicador para o mercado. O teste terminou com erros. Relatório de erro como na figura do apêndice com o seguinte conteúdo:
Talvez o problema esteja no testador?Porque é que misturaram os dois estilos? Se usar a primeira linha para definir o código da seta, então use a segunda linha no mesmo estilo:
Obrigado, isso ajudou.
Dois estilos? Eu não conhecia os estilos. É que anteriormente só se podia fazer esta secção dessa forma. Houve uma mudança. Tenho programado em MQL4 há mais de 10 anos. E agora os programadores mudaram a linguagem e muitos dos meus códigos já não funcionam. Estou muito desiludido. As mudanças não foram para melhor. Isto significa que tenho de refazer uma enorme quantidade de códigos. Apesar de serem antigas, eram muito úteis.
Tentei carregar uma nova versão do indicador para o mercado. O teste terminou com erros. Relatório de erro como mostra a figura no apêndice com o seguinte conteúdo:
Talvez o problema esteja no testador?Por favor, crie um pedido para o Servicedesk, nós resolvemos isso
UPD: Encontrei o seu pedido.
Liberta o buffer de qualquer matriz dinâmica e define o tamanho da dimensão zero para 0.
Quando os scripts e indicadores são escritos, a necessidade de utilizar a função ArrayFree() pode ocorrer raramente, uma vez que toda a memória utilizada é imediatamente libertada, e nos indicadores personalizados o trabalho principal com arrays é representado pelo acesso a buffers indicadores, cujas dimensões são automaticamente geridas pelo subsistema executivo do terminal.
Se precisar de gerir a memória por si próprio em condições dinâmicas complexas, a função ArrayFree() permitir-lhe-á libertar explícita e imediatamente a memória ocupada por uma matriz dinâmica que não necessita.
Está a ver? Desnecessário.
Naturalmente, uma vez libertada a memória, e depois atribuir-lhe novamente um tamanho à matriz, ninguém pode garantir o seu conteúdo.
Inicialização da matriz de uso: ArrayInitialize()
Como assim, ninguém garante o conteúdo? Se a memória foi libertada, desapareceu, por isso como é que se lhe mete lixo dentro? Ou será que limpar a memória implica dar permissão para que essa memória seja utilizada por outra parte do programa, não a limpando de todo?
O que quer dizer com "ninguém garante o conteúdo"? Se a memória foi apagada, já não está lá, então como é que se mete lixo nela? Ou será que limpar a memória implica dar permissão para que essa memória seja utilizada por outra parte do programa, não a limpando de todo?
ArrayResize não limpa a memória, e é por isso que contém lixo do "consumidor" anterior.
Isto é feito por velocidade, porque depois de a memória ser atribuída a uma matriz, em 99,99(9)% dos casos, o utilizador irá "preenchê-la" com os seus dados.
Obrigado, isso ajudou.
Dois estilos? Eu não conhecia os estilos. É que anteriormente só se podia fazer esta secção dessa forma. Houve uma mudança. Tenho programado em MQL4 há mais de 10 anos. E agora os programadores mudaram a linguagem e muitos dos meus códigos já não funcionam. Estou muito desiludido. As mudanças não foram para melhor. Isto significa que tenho de refazer uma enorme quantidade de códigos. Podem ser antigos, mas eram um carro inteiro mais útil.
Não é assim que o código da seta foi definido antes da introdução das funções mql4 ObjectSetXXX?
Também escrevo em mql há cerca de 10 anos (talvez mais - como o tempo voa...) - começo a esquecer estritamente as funções quaternárias - escrevo código multiplataforma sempre que possível.
ArrayResize não limpa a memória, é por isso que contém lixo do "consumidor" anterior.
Isto é feito por velocidade, porque após alocação de memória a uma matriz, em 99,99(9)% dos casos, o utilizador irá "preenchê-la" com os seus dados.
Então porque é que os valores numéricos são constantes "lixo", mesmo depois de reiniciar o terminal?
Pessoalmente, fiquei preso com a simples soma do conteúdo das células de outra matriz, e há muito tempo que me interrogo sobre o problema.
Então porque é que os valores numéricos são constantes "lixo", mesmo depois de reiniciar o terminal?
Pessoalmente, queimei-me com uma simples soma do conteúdo das células de outra matriz, e perguntei-me durante muito tempo qual era o problema
Não importa que tipo de dados estejam contidos na matriz não-inicializada, a qualquer momento, os dados podem mudar, ninguém garante o seu valor.
É por isso que a utilização de variáveis não inicializadas (ler memória) leva por vezes a situações em que é preciso muito tempo para encontrar a causa:
Só posso dar alguns conselhos.
Deve adquirir o hábito de inicializar sempre os dados, para que no futuro não perca muito tempo na procura de erros relacionados com a falta de inicialização.
O que quer dizer com "ninguém garante o conteúdo"? Se a memória foi apagada, já não está lá, então como é que se mete lixo nela? Ou será que limpar a memória implica dar permissão para que essa memória seja utilizada por outra parte do programa, não a limpando de todo?
O que quer dizer com "não"? Não se remove o cartão de memória da ranhura da placa-mãe. E se a memória estiver presente e for libertada (não inicializada com um valor, mas libertada), então começa a ser utilizada para outras necessidades do programa.