Un minuto y medio de diferencia entre la hora local y la hora fresca. Qué hacer. - página 3

 
pivomoe:

TimeCurrent() - El tiempo del último tick de un personaje será menor que el tiempo de retardo, por lo que se puede utilizar. Utilizar la hora local en la primera versión no fue una buena idea.

Vaya... Pues bien, la versión actual también parece no tener éxito.

Leamos la definición de TimeCurrent():

TiempoCorriente

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

Una de ellas significa que se muestra la hora de la más frecuente (para simplificar, la más líquida). Esto no es lo que quieres. Lo que necesitas es SymbolInfoInteger( blah-blah, SYMBOL_TIME ). Se ve así.

 
Alexey Kozitsyn:

Vaya... dac, la versión actual también parece fallar.

Lea la definición de TimeCurrent():

Por uno quiere decir que muestra la hora del cambio más frecuente (para simplificar, el más líquido). Y esto no es lo que necesitas. Lo que necesitas es SymbolInfoInteger( blah-blah, SYMBOL_TIME ). Creo que sí.

Así es como traté de prostotrader para llevar lo que veo el problema. En la última versión recorro todos los símbolos y tomo el tiempo máximo del último tick recibido.

   for(int i=0; i<KolichestvoSimvolov; i++)     
   if( InformaziaOPoslednemTike[i].LastTick.time_msc > VremaySamogoSvegegoTikaPoVsemSimvolam ) VremaySamogoSvegegoTikaPoVsemSimvolam= InformaziaOPoslednemTike[i].LastTick.time_msc;
Alexey Kozitsyn:

Si alguien recibió información sobre una garrapata a las 17:59:01, y yo no la recibí ni siquiera a las 18:00, eso es un gran problema.

Y esta es la cuestión. ¿Cuál es el problema (y lo hay)? En el servidor del broker, que no da el tick (a todo el mundo) durante mucho tiempo, o en MT5, que no lo recibe durante mucho tiempo.

Por un lado el tiempo medio entre "TimeCurrent" y la hora de llegada del último tick es de 5 milisegundos, por otro lado hay ticks que llegan con una caída de decenas de segundos. Por ejemplo, de 18 a 25 años. He cogido una garrapata con un retraso de 45 segundos. Y eso en un par de decenas de símbolos no líquidos.


+ a esto el problema del término puede ser exacerbado usando CopyTicks para obtener el último tick.
if(CopyTicks(Symbol(),ticks,COPY_TICKS_TRADE,0,1)==1) 

No sólo es más lento por tiempos, sino que puede ejecutarse de forma plana durante un segundo y medio.

También he entendido que OnBookEvent es adecuado sólo para operar en un símbolo.

 
pivomoe:

Así es como intenté que prostotrader llevara lo que yo veo como un problema. En la última versión recorro todos los símbolos y tomo el tiempo máximo del último tick recibido.

Por un lado el tiempo medio entre "TimeCurrent" y la hora de llegada del último tick es de 5 milisegundos, por otro lado hay ticks que llegan con una caída de decenas de segundos. Por ejemplo, de 18 a 25 años. He cogido una garrapata con un retraso de 45 segundos. Y eso en un par de decenas de símbolos no líquidos.


+ a esto el problema del término puede ser exacerbado usando CopyTicks para obtener el último tick.

No sólo es más lento por tiempos, sino que puede ejecutarse de forma plana durante un segundo y medio.

También he entendido que OnBookEvent es adecuado sólo para operar en un símbolo.

Aquí estamos. Resulta que usted acaba de entender que el cristal del mercado se forma para cada par de divisas por separado, por lo que el comercio en sus datos para diferentes pares no es posible.

Espero que pronto se dé cuenta de que la persecución de los datos de varios gráficos en una determinada secuencia, dada por usted, no se corresponde con la secuencia de los datos entrantes sobre los nuevos ticks en los gráficos de los diferentes pares de divisas.

Por lo tanto, si el EURUSD se comprueba primero, y el BTCUSD se comprueba en último lugar, y hay docenas de símbolos entre ellos, el tiempo de recepción de ticks puede tener este aspecto

18:50:00.000; 18:48:59.018; 18:51:00.001; 18:47:59.000 y así sucesivamente. Sin ninguna teoría de la conspiración, ni culpas de MT ni de los corredores. Lo que programaron es lo que tienen.

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

Aquí estamos. Resulta que se acaba de dar cuenta de que el vaso se forma para cada par de divisas por separado, por lo que operar con sus datos no es posible para diferentes pares.

Espero que pronto se dé cuenta de que la persecución de los datos de varios gráficos en una determinada secuencia, dada por usted, no se corresponde con la secuencia de los datos entrantes sobre los nuevos ticks en los gráficos de los diferentes pares de divisas.

Por lo tanto, si el EURUSD se comprueba primero, y el BTCUSD se comprueba en último lugar, y hay docenas de símbolos entre ellos, el tiempo de recepción de ticks puede tener este aspecto

18:50:00.000; 18:48:59.018; 18:51:00.001; 18:47:59.000 y así sucesivamente. Sin ninguna teoría de la conspiración, ni culpas de MT ni de los corredores. Lo que programamos es lo que tenemos.

Para captar nuevas garrapatas a través de OnBookEvent me inspiré enprostotrade, que escribió que "es más correcto". No utilizo el tick en sí, sólo me suscribo a su actualización para todos los símbolos en el informe de mercado.OnBookEven se utiliza para detectar sólo el símbolo que se utilizó para actualizar el tick. Luego se comprueba si hay un nuevo tick y entonces miro si el EA ha puesto nuevos antirregistros. Esa esen realidad toda la función:

void OnBookEvent(const string &symbol)
  {   
   if( MestoPoluchenieTikov == ON_TIMER ) return;
//--- Ищем индекс символа для которого полученно событие OnBookEvent
   int IndeksSimvola= -1;
   for(  int i=0;  i < KolichestvoSimvolov; i++ )
   if(  symbol == GCInformaziaOPoslednemTike[i].Simvol  ) { IndeksSimvola= i; break; }
   
   if( IndeksSimvola== -1 ){Print(__FUNCTION__,"Не удалось найти символ по которому полученно событие OnBookEvent ");ExpertRemove();return;}
   
   bool PoluchiliNoviiTick= false;
          
    //--- Получаем тик заданным в настройках способом.
   if( SposobPoluchenieTikov == SYMBOL_INFO_TICK  ) PoluchiliNoviiTick= PolychaemNoviiTickSymbolInfoTick(GCInformaziaOPoslednemTike[IndeksSimvola]);
   if( SposobPoluchenieTikov == COPY_TICKS       )  PoluchiliNoviiTick= PolychaemNoviiTickCopyTicks(GCInformaziaOPoslednemTike[IndeksSimvola]);    
       
     //--- Смотрим не установлены ли новые рекорды.  
   if(  PoluchiliNoviiTick ) PitaemsayObnovitRekordi( GCInformaziaOPoslednemTike, IndeksSimvola );                 
   
   ObnovlaemInformacyyNaGrafikeEslePora();
 
  }   
Alexei Tarabanov:

Espero que entienda que la persecución de los datos de los diferentes vasos en una determinada secuencia, dada por usted, no se corresponde con la secuencia de los datos entrantes sobre los nuevos ticks en los vasos de los diferentes pares de divisas.

Según tengo entendido, si no recibo una taza usando MarketBookGet, entonces no busco nada. Quizás, no has mirado mi código de la segunda página.

 
pivomoe:

La idea de captar nuevos ticks a través de OnBookEvent la tomé deprostotrade, que escribió que es "más correcto". No utilizo el tick en sí, sólo me suscribo a sus actualizaciones para todos los símbolos en el informe de mercado.OnBookEven lo utilizo básicamente sólo para identificar el símbolo, para el cual el tick ha sido actualizado. Luego se comprueba si hay un nuevo tick y entonces miro si el EA ha puesto nuevos antirreglamentarios. Esa esen realidad toda la función:

Por lo que tengo entendido, si no consigo la copa usando MarketBookGet, entonces no compruebo nada. Probablemente no has mirado mi código de la segunda página.

La señal MT no se procesa hasta que se procesa la señal anterior.

 
pivomoe:

La idea de captar nuevos ticks a través de OnBookEvent la tomé deprostotrade, que escribió que es "más correcto". No utilizo el tick en sí, sólo me suscribo a sus actualizaciones para todos los símbolos en el informe de mercado.OnBookEven lo utilizo básicamente sólo para identificar el símbolo en el que se ha actualizado el tick. Luego se comprueba si hay un nuevo tick y entonces miro si el EA ha puesto nuevos antirreglamentarios. Esa esen realidad toda la función:

Por lo que tengo entendido, si no consigo la copa usando MarketBookGet, entonces no compruebo nada. Probablemente no has mirado mi código de la segunda página.

No lo he hecho.

 
pivomoe:

Tu lógica está bien, no escuches a los que pasan.

1. Intenta mantener entre 3 y 5 instrumentos (uno de ellos sin liquidez). ¿Se puede reproducir?

2. Ejecútelo en una máquina limpia sin ningún otro software que utilice Internet. ¿Se repetirá?

3. Intente separar la captura de latencia en diferentes EAs (1 por herramienta).

Si el problema no está en los recursos (había alguna limitación en el número de hilos asignados a un terminal), entonces el fallo debería estar solucionado.

 
Andrey Khatimlianskii:

Tu lógica está bien, no escuches a los que pasan.

1. Intenta mantener entre 3 y 5 instrumentos (uno de ellos sin liquidez). ¿Se puede reproducir?

2. Ejecútelo en una máquina limpia sin ningún otro software que utilice Internet. ¿Se repetirá?

3. Intente separar la captura de latencia en diferentes EAs (1 por herramienta).

Si el problema no es de recursos (había alguna limitación en el número de hilos asignados a un terminal), entonces el fallo debería estar solucionado.

Gracias por la respuesta. Hoy he avanzado un poco en la solución de este problema. Se trata con el comando Sleep() entre las llamadas a SymbolInfo(). Antes, recorría todo el panorama del mercado sin pausa. Lo he probado con 40 símbolos por la noche. Si Sleep(5) entonces cojo "new tick", que debería haber sido hace dos segundos. Pero Sleep(10) muestra un retardo de 400 milisegundos (debido a Sleep(10) ( 40 símbolos *10 ). He intentado probarlo con los 4 símbolos más líquidos en Vespers. Con Sleep(1) no hay retraso alguno.... todo es perfecto. Aquí no entiendo cómo puede ser, si el símbolo en la revisión es pequeño SymbolInfo se puede utilizar sin ninguna pausa. Y si el símbolo es mucho hay que usar pausas.

Ahora las respuestas:

1) En el líquido de la noche no se juega.

2) A los 40 caracteres, se repite incluso con el software desactivado.

3) No entiendo lo que sugiere. ¿Coger nuevos ticks a la vez de dos EAs en un terminal?

Ahora estoy investigando la viabilidad de llamar a SymbolInfo. Por ejemplo, me las arreglé para descubrir que incluso un símbolo en la visión general del mercado no es capaz de enviar nuevos ticks con más de 3,5 milisegundos de diferencia (fue por la noche, sin embargo).

 
pivomoe:

1) En las líquidas, no se reproduce en las vísperas.

2) En 40 caracteres se repite incluso con el software desactivado.

3) No entiendo lo que sugieres. ¿Coger nuevos ticks a la vez de dos EAs en un terminal?

ZZZ Ahora estoy indagando en la dirección de la viabilidad de llamar a SymbolInfo. Por ejemplo, me las arreglé para descubrir que incluso un símbolo en la visión general del mercado no es capaz de dar nuevas garrapatas más de 3,5 milisegundos (fue en el tiempo de la tarde, sin embargo).

1. Trata de añadir uno sin liquidez

3. captar los fallos de un instrumento de un EA. Y ejecutar 40 EAs.

 
pivomoe:

Gracias por su respuesta. Hoy he avanzado un poco más en la solución de este problema. Se trata con el comando Sleep() entre las llamadas a SymbolInfo(). Solía recorrer todo el panorama del mercado sin detenerse. Lo he probado con 40 símbolos por la noche. Si Sleep(5) entonces cojo "new tick", que debería haber sido hace dos segundos. Pero Sleep(10) muestra un retardo de 400 milisegundos (debido a Sleep(10) ( 40 símbolos *10 ). He intentado probarlo con los 4 símbolos más líquidos en Vespers. Con Sleep(1) no hay retraso alguno.... todo es perfecto. Aquí no entiendo cómo puede ser, si el símbolo en la revisión es pequeña SymbolInfo se puede utilizar sin ninguna pausa. Y si tienes muchos caracteres, tienes que usar pausas.

Por favor, facilítame un trozo de código que capte los retrasos. Aquí mismo, mediante el botón de inserción de código.

Razón de la queja: