O problema da transferência do MT4 para o MT5. Ou, mais precisamente, a incapacidade de executar alguns algoritmos no MT5 sem errar. - página 4
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
Não há problema com a OnCalculate(). A GUI inteira funciona através da OnChartEvent() . Há mais de 400 botões na GUI. Alguns dos botões não interagem de forma alguma com as séries de tempo. Funções OnCalculate() e OnTrade() podem esperar até o próximo tick. Isto não é psicologicamente perceptível. E é mais complicado com a OnChartEvent(). Aqui a psicologia humana está envolvida. O usuário do programa pressiona o botão GUI. E ele não obtém a resposta que deseja. Qual é a reação dele? Uma das reações é que ele/ela aperte o mesmo botão uma segunda vez. Fi-lo de modo que uma segunda pressão em muitos dos botões desabilita a funcionalidade conectada por esse botão. Prevejo sua sugestão de desativar a ação do botão de alguma outra forma. Mas existe o mesmo programa para o MT4. Funciona lá normalmente. Acontece que o MT4 tem um algoritmo de interação com a interface gráfica, enquanto o MT5 tem um algoritmo diferente. Tal comportamento do mesmo programa só causará rejeição.
Fiz algo semelhante ao traduzir para MT5 - habilitei a saída do OnChartEvent(). Não quero mentir, é por isso que a GUI estava morrendo.
E no meu caso, a referência às séries cronológicas no OnTimer() ocorre após 5 minutos. Fá-lo-ei após 2 minutos. Vou verificar o que vai acontecer.
Artem, suas sugestões já foram úteis antes.
Não, certamente não haverá sugestões para mudar a lógica de trabalhar com gráficos - o código de plataforma cruzada deve funcionar da mesma forma.
É bem possível que quando o usuário clicou no botão mas não vê nada, então na verdade tudo está lá, apenas o gráfico ainda não está atualizado (ele se atualizará apenas com a chegada do tick)
Não, certamente não haverá nenhuma sugestão para mudar a lógica gráfica - o código entre plataformas deve funcionar da mesma forma.
A única coisa que posso sugerir para melhorar os botões é que, de qualquer forma, quando as séries de tempo necessárias ainda não estão disponíveis, ainda não é possível construir um gráfico sobre seus dados. Neste caso, precisamos esperar o momento em que os dados ficam disponíveis e tornar os botões inativos enquanto esperamos - por exemplo, torná-los semelhantes às interfaces do Windows: se nenhuma ação estiver disponível no botão, então o botão fica cinzento. Esta lógica pode estar presente em ambas as plataformas, de modo que não há diferença no código.
Eu tenho ChartRedraw() acionado ao sair de grandes blocos, por exemplo, OnChartEvent() e outros. Portanto, não há nada de errado com esta função.
Sobre as pontas das ferramentas. Eles são como indicadores que quando você clica em um número ou símbolo, tudo funcionará.
Se você clicar no número e no símbolo, um dos elementos OnChartEvent() - CHARTEVENT_OBJECT_CLICK deve acionar. Ela não é acionada se a ponta da ferramenta não aparecer. Eu gostaria de saber por que isso acontece. CHARTEVENT_OBJECT_CLICK não funciona .
E estarei de olho no acesso às séries de tempo.
Eu tenho ChartRedraw() acionado ao sair de grandes blocos, por exemplo, OnChartEvent() e outros. Portanto, não há nada de errado com esta função.
Sobre as pontas das ferramentas. Eles são como indicadores que quando você clica em um número ou símbolo, tudo funcionará.
Se você clicar no número e no símbolo, um dos elementos OnChartEvent() - CHARTEVENT_OBJECT_CLICK deve acionar. Ela não é acionada se a ponta da ferramenta não aparecer. Eu gostaria de saber por que isso acontece. CHARTEVENT_OBJECT_CLICK não funciona .
E vou ficar de olho no acesso às séries de tempo.
Logo no início do manipulador de eventos gráficos, registrar o parâmetro sparam - então qualquer ação será registrada. Então comece a limitar a saída - se houver um evento de clique do objeto (id===CHARTEVENT_OBJECT_CLICK), então saia sparam para o log. E assim você chegará lentamente à causa.
Logo no início do manipulador de eventos gráficos, registrar o parâmetro sparam - então qualquer ação será registrada. Então comece a limitar a saída - se houver um evento de clique do objeto (id=== CHARTEVENT_OBJECT_CLICK), então saia sparam para o log. E assim você chegará lentamente à causa.
Para evitar problemas com a ligação de números e símbolos, você precisa aumentar a prioridade de números e símbolos com OBJPROP_ZORDER.
Funciona no MT4 sem ele. No entanto, aumentei a prioridade no MT4 só por precaução. Além disso, a prioridade dos símbolos das ondas era maior do que a dos números.
Já resolvi o problema.
Estou tentando mudar todas as séries de tempo após 2 minutos - estou selecionando diferentes variantes para o desempenho mais suave desta tarefa.
O processo já começou...
Para evitar problemas com a ligação de números e símbolos, você precisa aumentar a prioridade de números e símbolos com OBJPROP_ZORDER.
Funciona no MT4 sem ele. No entanto, aumentei a prioridade no MT4 só por precaução. Além disso, a prioridade dos símbolos das ondas era maior do que a dos números.
Já resolvi o problema.
Estou tentando mudar todas as séries de tempo após 2 minutos - estou selecionando diferentes variantes para o desempenho mais suave desta tarefa.
O processo já começou...
A lisura não é uma opção aqui :)
Há freios.
Mas temos que aturar o que temos.
É impossível abraçar a imensidão).
A lisura não é uma opção aqui :)
É impossível separar. Se pelo menos um comércio não for atualizado, o indicador pode tornar incorretas algumas construções gráficas.
Por outro lado, verifiquei a disponibilidade das séries de tempos antes de OnCalculate e OnChartEvent. Como sugerido.
A atualização das séries cronológicas e a verificação da disponibilidade das séries cronológicas provoca grandes atrasos.
Ainda há interrupções de acesso a timeseries. Como eu disse ao criar a filial em um dos primeiros postos. Isto confirma que temos que atualizar as séries cronológicas de forma programática.
Este é o primeiro.
Segundo. Por que todo desenvolvedor tem que se preocupar com a organização do acesso às séries de tempo?
Por que não existe algum "mecanismo" adicional que elimine este incômodo?
Se alguém precisar deste incômodo, ninguém proíbe o uso do que agora está disponível. E para aqueles que pensam que o acesso alternativo universal a séries temporais é bom, é melhor que tal acesso seja feito pelos desenvolvedores.
Já tive várias pessoas me pedindo para traduzir um programa do MT4 para o MT5. Já o fiz. Não estou satisfeito com a tradução. Mas enquanto eu tiver feito o download do programa, não tenho nenhuma reclamação. Talvez eles estejam satisfeitos com isso. Embora eu duvide disso.
Eu gostaria de acrescentar algo de meu lado. Eu parei de experimentar a otimização do acesso às séries de tempo. Este é um uso improdutivo do tempo. Há coisas mais interessantes a fazer. Deixe aqueles que estiverem interessados trabalharem com o MT5. A única coisa que pode ser mastigada do MT5 é a história das citações. Para uso no ensino de NS.
Por outro lado, fez verificações de disponibilidade de séries temporais antes das funções OnCalculate e OnChartEvent. Como sugerido.
A atualização das séries temporais e a verificação da disponibilidade das séries temporais causam lentidão severa.
Foi sugerido fazer isso com um temporizador a cada minuto e meio. Não antes de cada tic-tac, e certamente não em um evento gráfico.
O acesso às séries de tempo no MT5 não é realmente o ideal. Mas se você precisar resolver um problema em vez de encontrar uma desculpa, é possível.