A lona é legal! - página 81

 
Dmitry Fedoseev trabalhar com objetos no consultório do conselheiro.

A solução para o problema está na EA:

Talvez ObjectFind() não seja necessário.

Se você tivesse anexado o código com o problema, ele já teria sido resolvido ontem

Esse não é o problema.
Esse problema ( congelamento do OnChartEvent) existe somente no MT4 e não é nada óbvio. Eu mesmo fiquei atormentado por um longo tempo. Mas isso já foi discutido neste tópico há cerca de um ano.

 
Nikolai Semko #:

Esse não é o problema.
Esse problema existe apenas no MT4 e não é nada óbvio. Eu mesmo fiquei atormentado por muito tempo. Mas isso já foi discutido neste tópico há cerca de um ano.

Não sei qual é o problema, apenas escrevi o que o causa e como ele é resolvido. Mas você pode continuar sofrendo...

 
Dmitry Fedoseev #:

E eu não sei qual é o problema, apenas escrevi o que o causa e como ele é resolvido. Mas você pode continuar sofrendo.

Essas palavras deveriam ser gravadas em pedra! :))
 
Dmitry Fedoseev #:

E eu não sei qual é o problema, apenas escrevi o que o causa e como ele é resolvido. Mas você pode continuar sofrendo.

O problema da unidade não tem nada a ver com isso. Esse problema ocorre somente no MT5. E aqui estamos falando do MT4.

 
Nikolai Semko #:

Você é uma pessoa estranha.
Você mesmo quer que os outros entendam seu código e centenas de linhas quando faz uma pergunta, mas nem sequer tenta penetrar na resposta e olhar para o código de cem linhas.

Ok. Vou facilitar a vida.
Traduza todo o código de OnChartEvent para OnTimer. Defina o cronômetro para 30 milissegundos. Você precisará inserir apenas variáveis globais (não terminais), que devem ser atualizadas em OnChartEvent e redefinidas (que são bool) em OnTimer.
As variáveis podem ser
as seguintes

Isso não era tão óbvio para mim. Aprendi com o link que forneci anteriormente que o problema é antigo e sua solução foi buscada até mesmo por autores com mais de 10.000 vendas no mercado mais de uma vez.

E isso se aplica a todos os Expert Advisors MT4 com objetos, o que significa que um grande número de usuários enfrentou esse problema. Eles escrevem para os autores do mercado e não conhecem a solução. Por isso era tão importante resolver esse problema.

Observando o GIF (prova de viabilidade), estou determinado a implementar essa abordagem em meus produtos. Provavelmente vou me sentar, fazer experimentos e informar amanhã.
 
Vitaliy Kuznetsov #:

Para mim, isso não era tão óbvio assim. No link que forneci anteriormente, aprendi que o problema é antigo e sua solução foi buscada até mesmo por autores com mais de 10.000 vendas no mercado mais de uma vez.

E isso se aplica a todos os Expert Advisors MT4 com objetos, o que significa que um grande número de usuários enfrentou esse problema. Eles escrevem para os autores do mercado e não conhecem a solução. Por isso era tão importante resolver esse problema.

Olhando para o GIF, estou determinado a implementar essa abordagem em meus produtos. Provavelmente vou me sentar, fazer experimentos e apresentar um relatório amanhã.

Talvez a mesma coisa possa ser feita no Expert Advisor.
Mas ele funciona sem atrasos.

 
Nikolai Semko #:

Talvez o mesmo possa ser feito no EA.
Mas ele funciona sem atrasos.

Em primeiro lugar, obrigado!

Hmm, parece funcionar dentro do código fornecido. Mas ainda há conflitos com os EAs. Por exemplo, com este - https://www.mql5.com/ru/code/35440.

Também verifiquei com outros EAs. Devo tentar melhorar o código do EA. O problema ainda é relevante.
cm partial closing position
cm partial closing position
  • www.mql5.com
Советник закрывает позиции частями и переводит их в безубыток.
 
Vitaliy Kuznetsov #:

Em primeiro lugar, obrigado!

Hmm, parece funcionar dentro do código fornecido. Mas ainda há conflitos com os EAs. Por exemplo, com este - https://www.mql5.com/ru/code/35440.

Também verifiquei com outros EAs. Devo tentar melhorar o código do EA. Isso ainda é um problema.

Não vejo nenhuma defasagem.
Sim, você também deve ajustar o código do EA para que não haja cálculos no OnChartEvent.
A regra é simples:
- variáveis globais (não terminais) de eventos e coordenadas devem ser preenchidas no OnChartEvent, mas não execute funções com cálculoscomplicados a partir dele .
- Todas as chamadas dessas funções devem ser feitas a partir do timer de acordo com as variáveis do evento,
- depois que os eventos forem processados, lembre-se de redefinir esses eventos no timer, para que na próxima iteração do timer você não execute a mesma coisa novamente.

Repito - esse é um bug de congelamento do OnChartEvent somente no MT4

O engraçado é que, se o MQ corrigir esse bug, que aparentemente é elementar ( OnChartEventcongela se houver cerca de 10 milissegundos de cálculos dentro dele) e for corrigido tão facilmente com a ajuda de um cronômetro, muitas pessoas perceberão, depois de recompilar seus indicadores ou Expert Advisors, nos quais o OnChartEvent é usado ativamente, que tudo está voando:)))
Ou talvez seja um bug artificial para fazer com que as pessoas mudem para o MT5 ;))))

 
Nikolai Semko #:

Não vejo nenhum atraso.
Sim, você também deve ajustar o código no EA para que não haja cálculos no OnChartEvent .
A regra é simples:
- as variáveis globais (não terminais) de eventos e coordenadas devem ser preenchidas no OnChartEvent, mas não execute funções com cálculoscomplicados a partir dele .
- Todas as chamadas dessas funções devem ser feitas a partir do cronômetro de acordo com as variáveis do evento,
- depois que os eventos forem processados, lembre-se de redefinir esses eventos no cronômetro, para que na próxima iteração do cronômetro você não execute a mesma coisa novamente.

Repito - esse é um bug de congelamento do OnChartEvent somente no MT4

O engraçado é que, se o MQ corrigir esse bug, que aparentemente é elementar ( OnChartEventcongela se houver cerca de 10 milissegundos de cálculos dentro dele) e for corrigido tão facilmente com a ajuda de um cronômetro, muitas pessoas perceberão, depois de recompilar seus indicadores ou Expert Advisors, nos quais o OnChartEvent é usado ativamente, que tudo está voando:)))
Ou talvez seja um bug artificial para fazer com que as pessoas mudem para o MT5 ;))))

Acontece que o método de aprimoramento do código do indicador comum não pode resolver o conflito com EAs em códigos fechados que usam objetos.

Espero que o aprimoramento do EA resolva globalmente o conflito com todos os indicadores do painel (que é minha tarefa).

Eu escrevi no tópico MT4 build 1353, talvez os programadores de terminal prestem atenção.

P.S. Fiz alterações nas corujas e os esquis não funcionaram...

 
Vitaliy Kuznetsov #:


P.S. Editado as corujas e algo que os esquis não foram....

Tem certeza de que não há mais nada em OnChartEvent com loops e chamadas de outras funções?
Meça
com GetMicrosecondCount() o tempo de cálculo do que acontece em OnTimer (ou OnChartEvent ) .