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

 
Renat Fatkhullin:

1) Medir o tempo de execução por cálculo OnTick/OnCalculate em microssegundos e exibi-los no registro.

Dessa forma, você pode ver quanto tempo leva para calcular um único tique. Em seguida, estime quantos carrapatos a esta velocidade você pode contar por segundo. Provavelmente não será mais do que uma dúzia de carrapatos, e há conscientemente mais carrapatos por segundo.


2) Meça o tempo para cada OnCalculate nos indicadores que estão anexados aos gráficos/tempos dos quais você está extraindo dados.

Provavelmente existe uma situação semelhante. Devido aos cálculos lentos, o terminal espera até que o símbolo calculado: timeframe seja desbloqueado. São os indicadores lentos, especialmente em uma história profunda, que levam ao congelamento dos pagamentos de outros EAs.


Ao projetar indicadores, você precisa colocar em primeiro lugar as questões de desempenho e os recálculos econômicos. Caso contrário, você vai matar tudo ao seu redor.

Renat, é realmente muito triste. Os tiki agora estão esperando por mim para resolver meus problemas? Até agora, eu assumi que os tiques eram gerados por mim mesmo, e ou eu tenho tempo ou não tenho. Agora acontece que eu posso suspender o sistema.

 
Алексей Тарабанов:

Renate, tem sido bastante triste. Os tiques agora estão esperando por mim para resolver meus problemas? Até agora, eu assumia que os tiques estavam se gerando, e ou eu tenho tempo ou não tenho. Agora acontece que eu posso pendurar o sistema.

O indicador funciona em cada tic tac, sem saltar. Você tem que monitorar a duração da OnCalculate e a freqüência dos carrapatos que chegam o tempo todo. Caso contrário, você terá uma geléia.

A maneira mais fácil de reproduzi-lo é rodar o indicador em um símbolo personalizado e começar a fazer tic-tac com uma certa freqüência. À medida que a freqüência aumenta, você verá a frenagem. Tudo isso é lógico.

 

Em que casos o indicador não pode extrair seu valor? os buffers são preenchidos com valores válidos, mas o gráfico do indicador está vazio.... pelo menos não é o contrário. construir 1940

1944 o mesmo. deve ser assim.

 
fxsaber:

O indicador é executado em cada tic tac, sem saltos. Você precisa monitorar a duração da OnCalculate e a taxa de chegada do tick o tempo todo. Caso contrário, você terá uma geléia.

A maneira mais fácil de reproduzi-lo é rodar o indicador em um símbolo personalizado e começar a fazer tic-tac com uma certa freqüência. À medida que a freqüência aumenta, você verá a frenagem. Tudo isso faz sentido.

Sim, exatamente como isso.

 
Алексей Тарабанов:

Renate, tem sido bastante triste. Os tiques agora estão esperando por mim para resolver meus problemas? Até agora, eu assumia que os tiques estavam se gerando, e ou eu tenho tempo ou não tenho. Agora acontece que eu posso pendurar o sistema.

Os carrapatos sempre estiveram esperando. Garantimos que a OnCalculate é chamada em cada tic tac.

Enquanto em quatro causou o congelamento da GUI, em cinco é apenas um atraso no processamento de um fio individual de uma determinada característica. E foi sempre assim em cinco. É que você só o viu agora

 
Renat Fatkhullin:

A atualização congelada do prazo invisível alienígena após a reconexão foi resolvida e corrigida. A razão estava no status de cache errado após a reconexão.

Versão Beta 1946 disponível via Help -> Check Desktop Updates -> Versão Beta mais recente.

Atualizado, vamos testá-lo.

A questão é se o problema atual também estava relacionado a casos de carregamento de outras ferramentas (tempo invisível), ou seja, indicadores de múltiplas moedas e EAs, ou não estão estes problemas inter-relacionados?

 
Slava:

Os carrapatos sempre estiveram esperando. Garantimos que a OnCalculate é chamada em cada tic tac.

Se em quarto, congelaria a GUI, mas em quinto, é apenas um atraso de um fio separado que processa um determinado caráter. E foi sempre assim na quinta. É que você só viu isso agora.

o registro terminal terá uma mensagem sobre esta situação, algo como "indicador é muito lento" ?

?

 
Igor Makanu:

haverá uma mensagem no registro terminal sobre esta situação, tal como "indicador é muito lento"?

?

No diário de bordo do especialista
 
Slava:
No diário de bordo do especialista

Obrigado, isto é algo, mas entendo que não se pode determinar programmaticamente que o indicador calcula ticks que não são relevantes e que o indicador pendura a rosca terminal?

 
Igor Makanu:

Obrigado, isso é algo, mas entendo que você não pode determinar programticamente que o indicador está calculando ticks que não são relevantes e que o indicador está suspendendo o fio terminal?

É possível tentar determinar.

Se for minutos, você pode comparar o tempo da última barra com o TimeCurrent(). Se não for M1, você pode perguntar ao iTime(_Symbol,PERÍODO_M1,0) e comparar com TimeCurrent().

Você pode comparar o Preço de Licitação ou Último preço (dependendo do símbolo) com o Preço de fechamento da última barra. Você pode pedir diretamente à SymbolInfoTick o símbolo atual. Além da Licitação e da Última, há também o tempo de carrapato