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

 
Taras Slobodyanik:

No veo el problema, ha aparecido una nueva vela - se recalcula la última vela del indicador/asesor.
Hay más de una vela nueva - hacemos un recálculo completo del indicador/asesor.
Esto es lo mismo: aparece una nueva vela.

Una cosa más: hay que "tirar" constantemente de los periodos requeridos para actualizarlos.
Si no hay nadie trabajando en el símbolo-período (las comillas no se comprueban, el indicador no se ejecuta), entonces "duerme" porque se considera innecesario.

Estamos tirando, estamos tirando. Hacemos una petición, obtenemos un error y nos vamos. Pero aquí, como ves, surge otra "peculiaridad": el error no se restablece tras el reinicio. Si lo hiciera, no habría ningún problema. Pero el problema es devolver datos incorrectos. Y lo veo muy claro.

Todo el sistema de comprobación de errores se va al garete en este ejemplo.

 

¿Cómo sabe el terminal que los últimos datos están desfasados?
Porque la historia está ahí, está ahí.
La solicitud se envía al corredor... lo antes posible.

Aparece una nueva barra: los datos se actualizan.

 
Taras Slobodyanik:

¿Cómo sabe el terminal que los últimos datos están desfasados?
Al fin y al cabo, hay una historia, la hay.
Se envía la solicitud al corredor... Tan pronto como sea así.

Aparece una nueva barra: los datos se actualizan.

Se establece la comunicación con el servidor. Cuando se solicitan datos del TF superior, si los datos no están listos - error o retorno 0. Si los datos están listos - devuelve SOLO los datos reales. Eso es todo. Si los datos no están listos durante mucho tiempo - que devuelva error o 0.

 
Taras Slobodyanik:

Por cierto, no has respondido a tu pregunta sobre la versión del terminal.

 
Alexey Kozitsyn:

Por cierto, no has respondido a la pregunta sobre la versión del terminal.

¿Qué tiene que ver la versión del terminal con todo esto? Los nuevos datos, están ahí o no están. Y ninguna versión los guardará si no provienen del servidor.
El indicador simplemente se pone en marcha antes de que lleguen los nuevos datos. Alternativamente, mueva las comprobaciones a OnCalculate, que se activa cuando se recibe un nuevo tick.

 
Konstantin Nikitin:

Alternativamente, mueva las comprobaciones a OnCalculate, que se activa cuando se recibe un nuevo tick.

se ha sugerido varias veces, y también el admin

en el indicadorOnCalculate() se iniciará al comienzo del indicador, pero la segunda vez OnCalculate() se iniciará al recibir el tick - aquí es necesario iniciar el temporizador y descargar los nuevos datos de OHLC

 
Igor Makanu:

se le ha ofrecido varias veces, y también al administrador

el indicador iniciará OnCalculate() al inicio del indicador, pero la segunda vez OnCalculate() se iniciará al recibir el tick - aquí es necesario iniciar el temporizador y descargar los nuevos datos de OHLC

Echa un vistazo a mi último código publicado. No se trata de un temporizador, todo se ha trasladado ya a OnCalculate(). Sigue sin funcionar cuando se inicia el terminal.

 
//--- Проверяем связь с сервером
if(firstrun)
{
 firstrun=false;                // первый запуск индикатора
 return(0);
}   
if(!IsConnected())                              // Если не удалось установить связь с сервером
     {
      //--- Сбрасываем флаг соединения с сервером
      _isConnected=false;
      //--- Выходим
      return( 0 );
     }
También comprobaría GetTickCount() para dar tiempo a que la terminal se cargue, genere gráficos y establezca comunicación con el servidor; también hay que trazar el reinicio de la terminal, no sé cómo trazarlo, pero hay que dar tiempo
 
Alexey Kozitsyn:

Echa un vistazo al último código que he publicado. Ya no es el temporizador, todo se traslada a OnCalculate(). Sigue sin funcionar al iniciar el terminal.

Bueno, salta la primera pasada en el arranque

int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
   static bool res = false;
   if( !res )
     {
      res = true;
      return( rates_total );
     }
   /* работаем */
   return( rates_total );
  }
 
Konstantin Nikitin:

Bueno, salta la primera pasada en la puesta en marcha

Lee el punto 1.

Razón de la queja: