[Erro em obter o tempo do TF sênior no temporizador! - página 4

 
Vitaly Gorbunov:
Bem, eu não diria que é uma muleta. Estou esperando um fluxo de citações do servidor, caso contrário, o histórico não será atualizado. Outra opção é tomar a hora local do computador e corrigi-la para o fuso horário, que pode ser calculado automaticamente e, no final, aguardar a atualização das cotações de qualquer forma. É um pouco tortuoso, mas não acho que Metakvotov vá mudar nada no MT4. No final do dia, é um problema de conexão ao servidor que tem que ser tratado de uma forma ou de outra.

Aí. E você percebeu que isso é um problema! Mas, acho que deve ser corrigido e/ou a ajuda deve ser complementada com um algoritmo para todos os casos.

A função de recuperação de dados não deve fornecer dados canhotos sem erros e avisos!

Este não é meu primeiro tópico (o anterior era sobre o MT5, não tenho nenhuma resposta clara sobre ele) sobre sincronização e acompanhamento de pendências/erro.

 
Alexey Kozitsyn:

Sim, isso parece funcionar. Como opção, ele pode ser usado. Obrigado! Mas eu ainda gostaria que as funções funcionassem corretamente.

Funcionará somente se não houver barras em falta - e isto não pode ser garantido. Suponha, por exemplo, que não haja novas citações no servidor para a hora atual (e talvez para a hora anterior também). Assim, a última barra é uma anterior.

 
Ihor Herasko:

Há dois erros significativos em sua abordagem de verificação:

  1. No OnInit() do indicador você não pode obter dados corretos de nenhuma TF, mesmo do atual. O OnInit() do indicador no início do terminal é executado quase em uma janela vazia (pode até não haver os dados que estavam no momento do desligamento do terminal). Mesmo o ambiente de mercado ainda é muitas vezes indisponível. A ajuda contém muitos avisos sobre o que não se deve fazer no OnInit(). Portanto, não há muito a incluir em seu código. Normalmente, esta é uma verificação dos valores dos parâmetros definidos, ligação de buffers indicadores a arrays e criação de classes, caso sejam utilizados. Tudo o resto tem que ser feito na OnCalculate().
  2. Todas essas verificações só podem ser feitas após a OnCalculate ser chamada pelo menos uma vez.

Igor, você já reviu o código? Onde eu consigo algo no OnInit()?

2. Que verificações? Onde está escrito que o indicador deve usar OnCalculate() pelo menos uma vez para funcionar corretamente?

 
Alexey Navoykov:

Suponha que não haja novas citações no servidor para a hora atual (e talvez para a hora anterior também). Assim, a última barra é alguma barra anterior.

Esta (como eu disse, muleta) solução é até agora melhor do que nada. Como eu disse (e comprovei), existe um bug. Quanto mais cedo os desenvolvedores consertarem isso, melhor.

 
Portanto, não fornece dados falsos, fornece os últimos dados recebidos e o erro não ocorrerá até que o terminal comece a receber o fluxo de cotação. No seu caso, você está tentando receber dados antes que as cotações sejam recebidas, e o programador deve tratar ele mesmo de tais situações excepcionais. Assim como qualquer falha de conexão. Qual é o problema com o MT5?
 
Alexey Navoykov:

Suponha que não haja novas citações no servidor para a hora atual (e talvez para a hora anterior também). Portanto, a última barra é uma barra anterior.

O método com iBarShift permite identificar lacunas no histórico, mas precisa ser verificado em certos intervalos. Escrevi para mim mesmo um procedimento que trata disso, e depois disso esqueci as lacunas nos programas de MTF.
 
Vitaly Gorbunov:
Portanto, não fornece nenhum dado restante, fornece os últimos dados recebidos e o erro não ocorrerá até que o terminal comece a receber um fluxo de citações. No seu caso, você está tentando receber os dados antes do início das citações. Assim como qualquer falha de conexão. Qual é o problema com o MT5?

Oh, cara... Já passamos dessa fase de desmantelamento. Veja seu próprio diário de bordo:

2018.09.21 15:02:42.910 Custom indicator test XAUUSD,H1: removed
2018.09.21 15:15:27.985 test XAUUSD,H1: initialized
2018.09.21 15:15:29.520 test XAUUSD,H1: OnTimer: Связь отсутствует!
2018.09.21 15:15:29.552 test XAUUSD,H1: OnTimer: Связь отсутствует!
2018.09.21 15:15:29.589 test XAUUSD,H1: OnTimer: Связь отсутствует!
2018.09.21 15:15:29.605 test XAUUSD,H1: OnTimer: Связь отсутствует!
2018.09.21 15:15:29.636 test XAUUSD,H1: OnTimer: Связь отсутствует!
2018.09.21 15:15:29.667 test XAUUSD,H1: OnTimer: Связь отсутствует!
2018.09.21 15:15:29.705 test XAUUSD,H1: OnTimer: Связь отсутствует!
2018.09.21 15:15:29.736 test XAUUSD,H1: OnTimer: Связь отсутствует!
2018.09.21 15:15:29.768 test XAUUSD,H1: OnTimer: Связь отсутствует!
2018.09.21 15:15:29.805 test XAUUSD,H1: OnTimer: Связь отсутствует!
2018.09.21 15:15:29.837 test XAUUSD,H1: OnTimer: Связь отсутствует!
2018.09.21 15:15:29.868 test XAUUSD,H1: OnTimer: Связь отсутствует!
2018.09.21 15:15:29.906 test XAUUSD,H1: OnTimer: Связь отсутствует!
2018.09.21 15:15:29.937 test XAUUSD,H1: OnTimer: Связь отсутствует!
2018.09.21 15:15:29.969 test XAUUSD,H1: OnTimer: Связь отсутствует!
2018.09.21 15:15:30.006 test XAUUSD,H1: OnTimer: Связь отсутствует!
2018.09.21 15:15:30.038 test XAUUSD,H1: OnTimer: Связь отсутствует!
2018.09.21 15:15:30.069 test XAUUSD,H1: OnTimer: Связь отсутствует!
2018.09.21 15:15:30.106 test XAUUSD,H1: OnTimer: Связь отсутствует!
2018.09.21 15:15:30.138 test XAUUSD,H1: OnTimer: Связь отсутствует!
2018.09.21 15:15:30.169 test XAUUSD,H1: OnTimer: Связь отсутствует!
2018.09.21 15:15:31.880 test XAUUSD,H1: test.mq4: Данные истории по последнему часу отсутствуют! Ошибка #4066
2018.09.21 15:15:31.900 test XAUUSD,H1: test.mq4: Данные истории по последнему часу отсутствуют! Ошибка #0
2018.09.21 15:15:31.940 test XAUUSD,H1: test.mq4: Данные истории по последнему часу отсутствуют! Ошибка #0
2018.09.21 15:15:31.990 test XAUUSD,H1: test.mq4: Данные истории по последнему часу отсутствуют! Ошибка #0
2018.09.21 15:15:32.010 test XAUUSD,H1: test.mq4: Данные истории по последнему часу отсутствуют! Ошибка #0
2018.09.21 15:15:32.074 test XAUUSD,H1: test.mq4: Данные истории по последнему часу отсутствуют! Ошибка #0
2018.09.21 15:15:32.100 test XAUUSD,H1: test.mq4: Данные истории по последнему часу отсутствуют! Ошибка #0
2018.09.21 15:15:32.120 test XAUUSD,H1: test.mq4: Данные истории по последнему часу отсутствуют! Ошибка #0
2018.09.21 15:15:32.174 test XAUUSD,H1: test.mq4: Данные истории по последнему часу отсутствуют! Ошибка #0

Sequência. Primeiro verificamos a conexão. Uma vez estabelecida a conexão, temos tempo para isso. Explique-me, por favor, por que diabos o erro 4066 voltou primeiro e depois não voltou!? O que mudou em 20ms desde a última chamada?

 
Vitaly Gorbunov:
Qual é o problema com o MT5 lá muito interessante de ler?

https://www.mql5.com/ru/forum/219829

Клинч в индикаторах mql5.
Клинч в индикаторах mql5.
  • 2017.11.15
  • www.mql5.com
Недавно столкнулся с одной крайне неприятной проблемой...
 
Alexey Kozitsyn:

Esta (como eu disse, muleta) solução é até agora melhor do que nada. Como eu disse (e comprovei), existe um bug. Quanto mais cedo os desenvolvedores consertarem isso, melhor.

Bem, se falamos da melhor muleta, devemos verificar não apenas a hora atual, mas todas as horas anteriores desde o último bar conhecido. Caso contrário, você ficará preso a esta verificação, se não houver citações para a hora atual.
 
Alexey Kozitsyn:

Oh, cara... Já passamos desse ponto. Veja seu próprio diário de bordo:

Sequência. Primeiro verificamos a conexão. Uma vez estabelecida a conexão, temos tempo para isso. Explique-me, por favor, por que diabos o erro 4066 voltou primeiro e depois não voltou!? O que mudou em 20ms desde a última chamada?

Os dados são carregados com erro 4066, então é um metakvotovtsev de erro, muito provavelmente os dados recebidos são processados para esta situação, um erro não é inventado. E, até esse ponto, tudo é lógico.