Perguntas de Iniciantes MQL5 MT5 MetaTrader 5 - página 850

 
Artyom Trishkin:
Corrigir o indicador de curva. Pode traçar uma linha apenas no recálculo completo, que é feito por comando do menu de contexto.
Alexey Viktorov:

Existe também um em mql4.

Obrigado.

 
Tirei-o com uma muleta). Queria que o indicador fosse actualizado depois de arrastar manualmente a linha vertical, da qual leva o seu tempo. Usei a função de evento de arrastar um objecto e coloquei nele a função de mudança de TF com retorno ao inicial. Mas por alguma razão a actualização é atrasada, cerca de vários segundos. A função da comutação TF funciona tão lentamente, que não compreendo.
 
khorosh:
Trabalhou-o com uma muleta). Precisava de actualizar o indicador após o arrastamento manual de uma linha vertical, a partir da qual leva o seu tempo. Usei a função de arrastar um objecto e coloquei nele a função de mudar o TF com um retorno ao inicial. Mas por alguma razão a actualização é atrasada, cerca de vários segundos. A função da comutação TF é demasiado lenta, não a compreendo.

Esta função é assíncrona. Apenas devolve o resultado do comando na fila do evento.

Para actualizar imediatamente, é necessário executar o comando ChartRedraw() após o comando de mudança de gráfico

Esta é, evidentemente, uma abordagem errada. Se quiser actualizar o gráfico apenas após a conclusão da mudança de linha, o ciclo de recálculo do indicador deve ser chamado não de OnCalculate() mas de ChartEvent() - a mudança da linha é capturada - a função de recálculo do indicador é chamada, que irá executar todo o ciclo de recálculo da linha com os novos dados (a linha é necessária para alguns dados, não é?).

Ou o indicador simplesmente não é feito correctamente e não actualiza a barra de zero sobre os dados actuais, e você chutou-a?

 
ilyav:

Qualquer pessoa pode ajudar a fixar o código EA no MT5?

Já li os manuais, mas não consigo vencer 2 vars. ao compilar.

declaração de 'xxxx' esconde a declaração global

и

possível perda de dados devido à conversão do tipo

Ver a dica em anexo.

Eu apenas fixei estupidamente os nomes das variáveis globais e fiz corresponder os tipos.

São 10.000.000 que pode cobrar - por ter superado a sua preguiça.

Arquivos anexados:
 
Artyom Trishkin:

Apenas corrigiu sem rodeios os nomes das variáveis globais e alinhou os tipos.

Deves-me 10 000 000 por teres superado a tua preguiça.

Muito obrigado.

Tenho vergonha de mostrar como o consertei)

int CountTrades(posição longaID1)

 
Artyom Trishkin:

Esta função é assíncrona. Apenas devolve o resultado do comando na fila do evento.

Para actualizar imediatamente, é necessário executar o comando ChartRedraw() após o comando de mudança de gráfico

Esta é, evidentemente, uma abordagem errada. Se precisar de actualizar o gráfico apenas após a conclusão da mudança de linha, o ciclo de recálculo do indicador deve ser chamado não de OnCalculate() mas de ChartEvent() - o deslocamento da linha é capturado - a função de recálculo do indicador é chamada, que irá realizar o ciclo completo de recálculo da linha com os novos dados (a linha é necessária para alguns dados, não é?).

Ou talvez o indicador tenha sido simplesmente incorrectamente actualizado e não actualiza a barra de zero nos dados actuais e fodeu-o?

O indicador conta as últimas barras não calculadas. E depois de arrastar a vertical, deve recalcular completamente após a leitura do novo tempo vertical. Escrevi sobre isso aqui e adicionei imagens de ecrã de como funciona.

Obrigado, vou tentar implementar a sua ideia. Geralmente não sou muito bom com indicadores, tenho lidado principalmente com Consultores Especialistas.

 
Artyom Trishkin:

Esta função é assíncrona. Apenas devolve o resultado do comando na fila do evento.

Para actualizar imediatamente, é necessário executar o comando ChartRedraw() após o comando de mudança de gráfico

Esta é, evidentemente, uma abordagem errada. Se quiser actualizar o gráfico apenas após a conclusão da mudança de linha, o ciclo de recálculo do indicador deve ser chamado não a partir de OnCalculate() mas a partir de ChartEvent() - shift of the line - função de recálculo do indicador de chamada, que irá executar todo o ciclo de recálculo da linha com os novos dados (a linha é necessária para alguns dados, certo?).

Ou talvez o indicador não seja feito correctamente e não actualize a barra de zero nos dados actuais, e você chutou-a?

Fez o que aconselhou. Tudo funcionou na perfeição. Agora instantaneamente após arrastar o indicador é completamente redesenhado. Mais uma vez, obrigado.

 
khorosh:

Fiz o que me aconselhou. Tudo funcionou perfeitamente. Agora, imediatamente após arrastar o indicador é completamente redesenhado. Mais uma vez, obrigado.

De nada. Mas deve ser desenhado em OnCalculate(), ou não?

Quando é arrastado no gráfico, o indicador não está ciente de quaisquer alterações da linha, mas deve traçar a linha.

 
Artyom Trishkin:

De nada. Mas deve ou não desenhar em OnCalculate()?

Quando se aplica a um gráfico, este não tem conhecimento de quaisquer movimentos da linha, mas deve traçar a linha.

Quando o indicador é anexado ao gráfico, uma linha vertical é criada no init() e algum tempo é inicialmente definido para ele, por exemplo Tempo[10]. Dupliquei o código emOnChartEvent() e OnCalculate(). Apenas no OnChartEvent eu recalculei por todas as barras.

 
khorosh:

Ao instalar o indicador no gráfico no init() é criada uma linha vertical e inicialmente é definida para algum tempo, por exemplo Tempo[10]. Eu duplicei o código em OnChartEvent() e OnCalculate(). Apenas no OnChartEvent eu recalculei por todas as barras.

Não seria melhor criar simplesmente a função Refresh(), por exemplo, com os parâmetros formais exigidos, e chamá-la quando necessário?

E a propósito, ao obter as taxas_total no indicador para além de OnCalculate() usando Bars() com um intervalo de datas, pode apanhar um pendurado do indicador:

Fórum sobre comércio, sistemas automatizados de comércio e testes de estratégia comercial

Analógico do iBarShift

Nikolai Semko, 2018.04.05 23:47

Até agora esta variante, mas agora quero adicioná-la para contornar este bug de pendências de função de Barras, sobre o qual já escrevi ao servicedesk.

A essência deste bug é que se na função Bars tantoo tempo_de_início como otempo_de_paragem estão dentro de uma barra ou estão no futuro (à direita da barra zero), então esta função fica suspensa por mais de 10 segundos.

Talvez eu faça uma versão adequada mais rápida mas mais pesada mais tarde.