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

 
Alexey Kozitsyn:

Experimente você mesmo. Inicie o indicador, desligue o terminal e ligue-o novamente quando a nova hora chegar.

Portanto, se você receber o TimeCurrent

Retorna a última hora conhecida do servidor, a hora de chegada da última cotação por um dos símbolos selecionados no Market Watch.

Isto é correto.
 
Konstantin Nikitin:

Portanto, se você receber o TimeCurrent

Retorna a última hora conhecida do servidor, a hora de chegada da última cotação para um dos símbolos selecionados no Market Watch.

É isso mesmo.

Você pode me dizer onde, neste código, está a chamada TimeCurrent?

 
Alexey Kozitsyn:

Você pode me dizer onde, neste código, é feita a chamada TimeCurrent?

Portanto, o tempo de abertura do bar ainda é o mesmo que antes do fechamento do terminal. Uma nova barra é formada e o tempo é atualizado. Qual é o problema?

 
Konstantin Nikitin:

O horário de abertura do bar é o mesmo que o recebido antes do fechamento do terminal. Uma nova barra é formada e o tempo é atualizado. Qual é o problema?

É isso mesmo, o terminal se desliga quando a última barra de hora no gráfico é às 22:00. É desligada às 22:45, por exemplo. Acontece às 23:01 - solicitação de tempo para a última hora após a conexão com o servidor ter sido estabelecida e após o pré-requisito para o OnInit() sem nenhum temporizador - ainda são 22 horas. Isto é normal, você acha?

 

Verifique o tempo da vela, não o cálculo das barras.
É assim que ele será atualizado corretamente (verificado).

//--- Проверяем первый запуск индикатора
   if(prev_calculated<=0 || 
      _weekOpenTime!=iTime(_Symbol,PERIOD_W1,0)+SEC_PER_DAY ||
      _dayOpenTime!=iTime(_Symbol,PERIOD_D1,0) ||
      _hourOpenTime!=iTime(_Symbol,PERIOD_H1,0) )
     {
     
      _weekOpenTime= 0;
      _dayOpenTime = 0;
      _hourOpenTime= 0;
        
      //--- Проверяем, записано ли время открытия текущей недели
      if(!CheckCurrentWeekOpenTime())                              // Если время не записано
         return(0);                                                // Выходим
      //--- Проверяем, записано ли время открытия текущего дня
      if(!CheckCurrentDayOpenTime())                              // Если время не записано
         return(0);                                                // Выходим
      //--- Проверяем, записано ли время открытия текущего часа
      if(!CheckCurrentHourOpenTime())                              // Если время не записано
         return(0);                                                // Выходим
      //--- Устанавливаем флаг соединения с сервером для запуска таймера
      _isConnected=true;
      //---
      Print(__FUNCTION__,": Данные старших ТФ загружены!");
     }
 
Pelo que entendi, o terminal, pela primeira vez, fornece os últimos dados que possui na história, e depois é baixado do servidor.
 
Taras Slobodyanik:

Verifique o tempo do castiçal, não o cálculo das barras.
É assim que ele será atualizado corretamente (verificado).

De que tipo de cálculo de barras estamos falando?

Vou verificar sua variante, mas na verdade você acabou de adicionar um pedido de dados "ociosos" ao OnCalculate() e isso é tudo. E por lógica, ele não chegará nem mesmo ao pedido "ocioso", porque o pré-cálculo <= 0 já será executado e o primeiro bloco de execução será executado.

De qualquer forma, isto é uma muleta, não deve haver tais situações no idioma. A conexão é estabelecida, a função de aquisição de dados é verificada quanto à existência de erros e correção dos dados obtidos. Mas no final, o que recebemos? Os dados ainda estão errados.

Na verdade, se quisermos ter certeza, podemos simplesmente solicitar a hora atual no inite e depois solicitar a hora atual no OnCalculate() e compará-las até que sejam diferentes. Mas isso é a mesma muleta e não deveria ser o caso.

 
Alexey Kozitsyn:

É isso mesmo, o terminal se desliga quando a última barra de hora no gráfico é às 22:00. É desligada às 22:45, por exemplo. Acontece às 23:01 - solicitação de tempo para a última hora após a conexão com o servidor ter sido estabelecida e após o pré-requisito para o OnInit() sem nenhum temporizador - ainda são 22 horas. Isto é normal, de acordo com você?

O horário de fechamento de qualquer última barra será TimeCurrent (ou seja, atual). Parece ser o que você precisa, a julgar pela sua pergunta.

 
Taras Slobodyanik:
Pelo que entendi, o terminal, pela primeira vez, emite os últimos dados que tem na história, e depois acontece o carregamento a partir do servidor.

Pergunta! Por que ele fornece dados anteriores após a conexão com o servidor já ter sido estabelecida, houve uma pré-venda de dados no OnInit(), uma verificação de carga de dados em cada uma das funções CheckCurren...(). Quantos cheques sangrentos preciso fazer para que tudo funcione corretamente...

 
Konstantin Nikitin:

O horário de fechamento de qualquer último bar será TimeCurrent, que é o que você parece precisar com base em sua pergunta.

Qual a hora de encerramento? Preciso de um horário de abertura...