Perguntas de Iniciantes MQL5 MT5 MetaTrader 5 - página 116
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 erro estava no cabo indicador criado na função OnTick e os dados são copiados no mesmo tick. Compreendi-o à noite, agora vou tentar transferir as pegas dos indicadores para a função OnInit.
Não funcionou. Aqui está o código agora
As seguintes mensagens aparecem no diário de bordo
2013.04.13 15:21:31 2010.01.04 00:00:00:01 6.187448020344988e-005 0
2013.04.13 15:21:31 2010.01.04 00:00:00:01 6.187448020344988e-005 0
2013.04.13 15:21:31 2010.01.04 00:00:00:01 6.187448020344988e-005 0
E é sempre assim. Não parece haver um erro de cópia.
Mas até agora não tem nem uma verificação para a criação bem sucedida de pegas, nem uma verificação para o cálculo bem sucedido de indicadores e verificação para a cópia. A ideia de deslocar a inicialização das pegas para o OnInit() é correcta.
Além disso, adicione a linha Print(MacdArray[0]) no início de OnTick() - para ver qual o valor do lixo contido na matriz antes de começar a copiar buffers.
Para acrescentar. Naturalmente, a utilização de GetLastError() após a própria função pode ser uma peculiaridade do estilo de programação. Mas ainda assim verificá-lo-ia tendo em conta o exemplo da Referência. Se não estou enganado, um valor nulo de GetLastError() nem sempre significa que a função funcionou com sucesso.
Mas até agora não tem nem uma verificação para a criação bem sucedida de pegas, nem uma verificação para o cálculo bem sucedido de indicadores e verificação para a cópia. A ideia de deslocar a inicialização das pegas para o OnInit() é correcta.
tol64:
Mas apenas pela primeira vez. Se em qualquer outra parte do programa se verificar que alguma pega é inválida, terá de tentar obtê-la novamente. Por conseguinte, não podemos dizer que o código escrito para obter alças no OnInit() resolverá completamente o problema e será 100% correcto. ))
Verifiquei quantos dados foram copiados com a função CopyBuffer, escreve sempre 1. E não há erro, mas os dados ainda estão errados.
Tenho este resultado deste código no testador:
//---
A única coisa que fiz antes do teste foi apenas converter os valores indicadores antes da saída para o registo:
Está a dizer que a ideia de mover a inicialização do manipulador para OnInit() a partir de OnTick() está errada por si só?
Obtive este resultado deste código no testador:
//---
A única coisa que fiz antes do teste foi simplesmente converter os valores indicadores antes de os emitir para o registo:
E sem "se"? E em relação a esta situação particular? O manípulo indicador foi criado na função OnTick durante cada tick, e os dados são copiados durante o mesmo tick. Isto significa que o mesmo manípulo indicador foi solicitado de cada vez, sem verificação da validade/invalidade. Neste contexto, continuará a argumentar que a ideia de transferir a inicialização das pegas para o OnInit() a partir do OnTick() está errada por si só?
PS. Parece que ajudou o homem, pelo que a questão pode ser considerada esgotada.