Bug MQL5 quando se trabalha com acesso iClose/iOpen timeseries, etc. - página 2

 
Stanislav Dray:

Então me diga por que o congelamento acontece no meu caso? Tenho congelamento de dados no OnTick antes da função de pesquisa de indicadores, ou seja, a atualização do CopyTime por M1 atua como acionador para iniciar outro processamento no OnTick, e antes do CopyTime nenhuma função ou pesquisa de indicadores.

E por que não havia tais problemas antes de 30 de julho de 2017 e desde outubro de 2017 tudo estava funcionando bem?

Faça o que eu aconselhei.

Caso contrário, é necessário material completo para reprodução a 100%.
 

Por que os desenvolvedores não escrevem uma função que garanta uma matriz sincronizada de dados (através de várias ferramentas) para que as pessoas não se incomodem e não percam seu tempo em vão?

afinal de contas o MT5 está posicionado como uma ferramenta legal e útil, certo?

muito ansioso...

 
Vladimir Karputov:

Também sempre foi recomendado que, se você estiver trabalhando com o cronograma de outra pessoa - você deve obter OHLC desse cronograma uma vez por minuto (qualquer função CopyXXXX). Este tem sido sempre o caso.

Slava disse uma vez a cada dois minutos. Preguiçoso para procurá-lo, mas lembro-me exatamente disso.

 
transcendreamer:

Por que os desenvolvedores não escrevem uma função que garanta uma matriz sincronizada de dados (através de várias ferramentas) para que as pessoas não se incomodem e não percam seu tempo?

afinal de contas o MT5 está posicionado como uma ferramenta legal e útil, certo?

estamos esperando...

Sim. OnCalculate construtor para o número necessário de símbolos e prazos. Ou, além do OnCalculate, introduzir um novo objeto, por exemplo "MainCalculate" para um máximo de 255 OnCalculate, no qual os objetos OnCalculate vivem - quem não precisa dele, usa o antigo OnCalculate, quem precisa de mtf e símbolos diferentes usa "MainCalculate". O primeiro e o último tique da barra é o mesmo para todos os símbolos e prazos correspondentes. Como a OnCalculate já foi desenvolvida e estabelecida, é lógico emitir todas as chamadas para símbolos e prazos de terceiros através da agregação OnCalculate sem outras funções mediadoras de prazos e símbolos.

 

Pense onde os dados (especialmente os dados garantidos) estarão disponíveis quando seus indicadores estiverem insuportavelmente lentos, levando centenas de milissegundos ou mesmo segundos para receber/layout ticks por tick. Como resultado, nenhuma CPU é suficiente a tempo para processar os carrapatos, o que se traduz em um déficit acumulado e um correspondente atraso no histórico do gráfico.

Quando você pede "dar garantido", é muito provável que seja um pedido de "não quero saber nada, quero continuar escrevendo como eu quero, não quero pensar em desempenho e fechaduras, apenas dar"?


Quando você tiver milhões de barras à sua disposição, pense no desempenho de seus indicadores e dos de outras pessoas. Um indicador mal escrito e caro pode facilmente retardar a atualização de seus gráficos de símbolos.

Primeiro, meça o tempo de resposta da OnCalculate em microssegundos. Em seguida, divida 1 segundo pelo tempo médio de resposta do tick para obter a divisão máxima do indicador em ticks por segundo.

Isto é imediatamente sóbrio.

 
Artyom Trishkin:

A cada dois minutos, disse Slava. Sou preguiçoso demais para procurá-lo, mas lembro-me exatamente disso.

Eu me lembro, mas sempre uso um intervalo de 1 minuto. É mais confiável dessa forma.

 
Farkhat Guzairov:

Desculpe-me, mas neste caso a profundidade da história no cronograma da M15 foi de 120 barras e o que, já é crítico para a MQL5?

Você não forneceu nenhum material reprodutível.

Expliqueipor que as funções de acesso aos dados de outras pessoas serão retardadas quando houver indicadores de retardo em seus símbolos. Você está falando de seu caso particular de chamada, ignorando completamente a presença de outros indicadores nos gráficos. E é com eles que você deveria ter começado, especialmente porque eu escrevo claramente sobre isso.

Não se envolva em demagogia e declarações comparativas com uma completa falta de escrituras técnicas e listas de acusadores com especialistas.

Dê-me o código para reproduzir, por favor.

 
Farkhat Guzairov:

***

Então, como se joga de volta? Por favor, me forneça os dados para reprodução.

 
Farkhat Guzairov:

Claro que não posso colocar o código inteiro aqui, mas já apontei a parte onde o problema ocorre, então vou fazer isso novamente:

Ou o código inteiro ou não diga nada. Sem o código completo, é apenas muito ar.

 
Renat Fatkhullin:

Pense onde os dados (mais é garantido) estarão disponíveis, quando seus indicadores retardarem insuportavelmente a recepção/aplicação de ticks, gastando centenas de milissegundos ou mesmo segundos por um tick. Como resultado, nenhuma CPU é suficiente a tempo para processar os carrapatos, o que se traduz em um déficit acumulado e um correspondente atraso no histórico do gráfico.

Quando você pede "dar garantido", é muito provável que seja um pedido de "não quero saber nada, quero continuar escrevendo como eu quero, não quero pensar em desempenho e fechaduras, apenas dar"?


Quando você tiver milhões de barras à sua disposição, pense no desempenho de seus indicadores e dos de outras pessoas. Um indicador mal escrito e caro pode facilmente atrasar as atualizações de seu símbolo.

Comece medindo o tempo de resposta OnCalculate em microssegundos. Em seguida, divida 1 segundo pelo tempo médio de resposta do tick para obter o rendimento máximo do indicador em tick por segundo.

Isto é imediatamente sóbrio.


Você nem sempre precisa da supervelocidade, a usabilidade é muito importante, hoje em dia o processo de escrever indicadores multimoedas é como "pôr-do-sol à mão", mesmo no MT4 era mais fácil, porque lá você sempre pode obtê-lo através das funções i, mesmo que lentamente, mas você pode obtê-lo, mas no MT5 os dados estão lá ou não, e você precisa criar um código especial por si mesmo.


Além disso, deve-se ter em mente que nem todos os usuários são programadores de alta classe, algumas pessoas apenas precisam de uma ferramenta conveniente e confiável, mesmo que não seja supersônica, e tal velocidade não é normalmente necessária para sistemas de portfólio, e o máximo rendimento não é crítico neste caso, o importante é que funcione de forma garantida e fácil, de fato, este é o fator para tornar o produto mais popular e acessível.


O aparecimento das funções i no mt5 melhorou um pouco a situação, mas não resolveu o problema, não há possibilidade de obter facilmente e simplesmente uma matriz sincronizada para vários instrumentos, talvez não seja necessário para todos, talvez nem seja uma prioridade, eu posso entender, mas ainda assim existe tal tarefa.


Função: GetSyncData

Entrada: lista de símbolos, intervalo de tempo, intervalo de barras e/ou intervalo de datas

Saída: matriz com elementos MqlRates para que os índices de todos os símbolos correspondam ao mesmo tempo