[SERVICE DESK] ¡Error al obtener la hora de la TF superior en el temporizador! - página 10

 
Alexey Kozitsyn:

Pruébalo tú mismo. Poner en marcha el indicador, apagar el terminal y volver a encenderlo cuando llegue la nueva hora.

Así que si obtienes TimeCurrent

Devuelve la última hora conocida del servidor, la hora de llegada de la última cotización de uno de los símbolos seleccionados en Market Watch.

Esto es correcto.
 
Konstantin Nikitin:

Así que si obtienes TimeCurrent

Devuelve la última hora conocida del servidor, la hora de llegada de la última cotización de uno de los símbolos seleccionados en Market Watch.

Así es.

¿Puedes decirme en qué parte de este código está la llamada a TimeCurrent?

 
Alexey Kozitsyn:

¿Puedes decirme en qué parte de este código se hace la llamada a TimeCurrent?

Así que la hora de apertura del bar sigue siendo la misma que antes del cierre de la terminal. Se forma una nueva barra y se actualiza la hora. ¿Cuál es el problema?

 
Konstantin Nikitin:

La hora de apertura del bar es la misma que la que recibimos antes de que se cerrara la terminal. Se forma una nueva barra y se actualiza la hora. ¿Cuál es el problema?

Esa es la cuestión, el terminal se desconecta cuando la última barra horaria del gráfico está a las 22:00. Se apaga a las 22:45, por ejemplo. Se enciende a las 23:01 - solicitud de tiempo para la última hora después de que la conexión con el servidor se ha establecido y después de la solicitud previa a OnInit() sin ningún tipo de temporizadores - sigue siendo 22 horas. ¿Esto es normal, crees?

 

Comprueba el tiempo de la vela, no el cálculo de las barras.
Así se actualizará correctamente (comprobado).

//--- Проверяем первый запуск индикатора
   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__,": Данные старших ТФ загружены!");
     }
 
Según entiendo, el terminal, por primera vez, da los últimos datos que tiene en el historial, y luego se descargan del servidor.
 
Taras Slobodyanik:

Comprueba el tiempo de las velas, no el cálculo de las barras.
Así se actualizará correctamente (comprobado).

¿De qué tipo de cálculo de barra estamos hablando?

Comprobaré tu variante, pero en realidad sólo has añadido una petición de datos "ociosa" en OnCalculate() y ya está. Y por lógica, ni siquiera llegará a la petición "ociosa", porque prev_calculated <= 0 ya se habrá ejecutado y se ejecutará el primer bloque de ejecución.

De todos modos, esto es una muletilla, no deben existir estas situaciones en el lenguaje. Se establece la conexión, se comprueba la función de adquisición de datos para ver si hay errores y si los datos obtenidos son correctos. Pero al final, ¿qué conseguimos? Los datos siguen siendo erróneos.

En realidad, si queremos estar seguros, podemos simplemente solicitar la hora actual en el inite y luego solicitar la hora actual en OnCalculate() y compararlas hasta que sean diferentes. Pero esa es la misma muletilla y no debería ser el caso.

 
Alexey Kozitsyn:

Esa es la cuestión, el terminal se desconecta cuando la última barra horaria del gráfico está a las 22:00. Se apaga a las 22:45, por ejemplo. Se enciende a las 23:01 - solicitud de tiempo para la última hora después de que la conexión con el servidor se ha establecido y después de la solicitud previa a OnInit() sin ningún tipo de temporizadores - sigue siendo 22 horas. ¿Es esto normal según usted?

La hora de cierre de cualquier última barra será TimeCurrent (es decir, actual). Parece que es lo que necesitas, a juzgar por tu pregunta.

 
Taras Slobodyanik:
Según entiendo, el terminal, por primera vez, saca los últimos datos que tiene en el historial, y luego se produce la carga desde el servidor.

¡Pregunta! Por qué sale el dato anterior cuando ya se ha establecido la conexión con el servidor, había una preconsulta de datos en OnInit(), una comprobación de carga de datos en cada una de las funciones CheckCurren...(). ¿Cuántas malditas comprobaciones tengo que hacer para que todo funcione correctamente...

 
Konstantin Nikitin:

La hora de cierre de cualquier última barra será TimeCurrent, que es lo que parece necesitar según su pregunta.

¿A qué hora se cierra? Necesito una hora de apertura...