Discusión sobre el artículo "Gestionando el Horario (Parte 2): Funciones" - página 3

 

Hola @Carl Schreiber,

Gran artículo que has hecho, ayuda mucho. Sólo quiero decirte lo que he encontrado después de usar el código.

Estoy usando eightcap broker y trató de utilizar un script simple para mostrar lo que el tiempo real en el país respectivo y encontró que el tiempo de Tokio es de 1 hora de retraso de la hora real. Aquí está la secuencia de comandos que utilizo,

void OnStart()
  {
   bool isTimeSet = setBokerOffset();
   if(!isTimeSet)
     {
      Alert("setBokerOffset failed");
      return;
     }

   Alert("+++++++++++++++");
   checkTimeOffset(TimeCurrent());
   datetime tGMT  = TimeCurrent() + OffsetBroker.actOffset;    // GMT
   datetime tNY   = tGMT - (NYShift+DST_USD);                  // tiempo en Nueva York
   datetime tLon  = tGMT - (LondonShift+DST_EUR);              // tiempo en Londres
   datetime tSyd  = tGMT - (SidneyShift+DST_AUD);              // tiempo en Sidney
   datetime tMosc = tGMT - (MoskwaShift+DST_RUS);              // tiempo en Moscú
   datetime tTok  = tGMT - (TokyoShift);                       // hora en Tokio - sin DST

   Alert("time NY: ", tNY);
   Alert("time Lon: ", tLon);
   Alert("time Syd: ", tSyd);
   Alert("time Tok: ", tTok);
  }

el código es copiar y pegar desde el artículo y me acaba de devolver el valor de la misma. No creo que el problema de cómo he utilizado el código porque la otra sesión es correcta.

Carl Schreiber
Carl Schreiber
  • 2023.03.22
  • www.mql5.com
Trader's profile
 
Luandre Ezra #:

Hola @Carl Schreiber,

Gran artículo que has hecho, ayuda mucho. Sólo quiero decirte lo que he encontrado después de usar el código.

Estoy usando eightcap broker y trató de utilizar un script simple para mostrar lo que el tiempo real en el país respectivo y encontró que el tiempo de Tokio es de 1 hora de retraso de la hora real. Aquí está el script que uso,

el código es copiar y pegar desde el artículo y me acaba de devolver el valor de la misma. No creo que el problema de cómo he utilizado el código porque la otra sesión es correcta.

Desde GMT (=UTC) la diferencia horaria es de 0900 horas (desde https://www.worldtimeserver.com/current_time_in_JP.aspx?city=Tokyo)

= 9*-3600=32400 segundos:

Y esto está configurado:

#define  TokyoShift   -32400                           // siempre 9h
Current local time in Tokyo, Japan
  • www.worldtimeserver.com
Current local time and date in Tokyo, Japan from a trusted independent resource
 
Carl Schreiber #:

Desde GMT (=UTC) la diferencia horaria es de 0900 horas (desde https://www.worldtimeserver.com/current_time_in_JP.aspx?city=Tokyo)

= 9*-3600=32400 segundos:

Y esto se establece:

Error que cometí. No es tokyo sino sydney.


 
Podría ser que el cálculo del conmutador DST australiano esté defectuoso, lo investigaré, gracias.
Time Zones - WorldTimeServer.com
  • www.worldtimeserver.com
A list of all worldwide time zones with abbreviation and name. Click on a time zone to see more details.
 

Australian First Sunday of October at 02:00 to First Sunday of April at 02:00

Australian DST 2010 inicio 2010.10.03 - fin 2010.04.04
Australian DST 2011 inicio 2011.10.02 - fin 2011.04.03
Australian DST 2012 inicio 2012.10.07 - fin 2012.04.01
Australian DST 2013 inicio 2013.10.06 - fin 2013.04.07
Australian DST 2014 inicio 2014.10.05 - fin 2014.04.06
Australian DST 2015 inicio 2015.10.04 - fin 2015.04.05
Australian DST 2016 inicio 2016.10.02 - fin 2016.04.03
Australian DST 2017 inicio 2017.10.01 - fin 2017.04.02
Australian DST 2018 inicio 2018.10.07 - fin 2018.04.01
Australian DST 2019 inicio 2019.10.06 - fin 2019.04.0707
Australian DST 2020 start 2020.10.04 - end 2020.04.05
Australian DST 2021 start 2021.10.03 - end 2021.04.04
Australian DST 2022 start 2022.10.02 - end 2022.04.03
Australian DST 2023 start 2023.10.01 - end 2023.04.02
Australian DST 2024 start 2024.10.06 - end 2024.04.0707
Australian DST 2025 inicio 2025.10.05 - fin 2025.04.06
Australian DST 2026 inicio 2026.10.04 - fin 2026.04.05
Australian DST 2027 inicio 2027.10.03 - fin 2027.04.04
Australian DST 2028 inicio 2028.10.01 - fin 2028.04.02
Australian DST 2029 inicio 2029.10.07 - fin 2029.04.01

Australia & New Zealand End DST
Australia & New Zealand End DST
  • www.timeanddate.com
People in New Zealand and parts of Australia will get an additional hour to enjoy when Daylight Saving Time (DST) ends on Sunday, April 2, 2023.
 

He encontrado el problema: me faltaba una comprobación:

Al principio de la función void checkTimeOffset(datetime tB) puse un check:

if(tB < nxtSwitch_USD && tB < nxtSwitch_EUR)
      return;  

Y esto lo tuve que cambiar por:

if(tB < nxtSwitch_USD && tB < nxtSwitch_EUR && tB < nxtSwitch_AUD)
      return;  

Lo actualizaré ...

 
Carl Schreiber control:

Al principio de la función void checkTimeOffset(datetime tB) puse una comprobación:

Y esto tuve que cambiarlo por:

Lo actualizaré ...

Hola Carl, Desafortunadamente cambiar el código correspondiente no soluciona el problema. También he descubierto que la hora de Moscú es diferente de la hora universal.


 

La versión de DealingWithTime.mqh v. 1.01 del artículo "Dealing with Time (Part 2): Las Funciones" ( https://www.mql5.com/en/articles/9929 ) ya no funcionaba porque MQ cambió el comportamiento de la función CopyTime( ) algún tiempo después de la publicación de este artículo. Ahora esta función ya no devuelve valores de tiempo futuros si son mayores que TimeCurrent( ) especificado para los parámetros start_time y/o stop_time. En su lugar, se devuelve la hora de apertura de la última barra actual como el mayor valor posible.

Como el final de la sesión FX se determinaba de esta forma para determinar el desplazamiento de la hora del broker, entre otras cosas, ¡esto conduce ahora a valores incorrectos!

Este cálculo se ha modificado en la versión 2.03. Esta nueva versión ya está disponible en la CodeBase aquí: https://www.mql5.com/en/code/45287.

También se ha cambiado completamente el cálculo del cambio de hora, de modo que ahora también se cubren los complicados tiempos del cambio de hora de Sydney (Australia) hasta los años 70.

Adjunto también la tabla DST 1975 - 2030.xlsx como archivo zip con todos los cambios de hora desde los años 70, para que todo el mundo pueda comprobar el correcto funcionamiento de las fórmulas, he aquí una serie de ejemplo de la tabla:

01.01.1982 es la hora de invierno en USA (DST==0) y el proximo cambio es el 25.04.1982, el ultimo (25 del mes) domingo de Abril (4). La tabla ya está ordenada según el huso horario geográfico (columna A), luego según el huso horario del año (columna L, spr=primavera, aut=otoño,) y finalmente según la fecha de consulta (columna C). La tabla puede ser creada automáticamente por el EA incluido (no se puede ejecutar un script en modo depuración). Test_DST 2.mq5 si lo ejecuta en modo depuración y copia las líneas del registro del diario en el depurador y las pega en un programa de hoja de cálculo; el separador de celdas sería el carácter espacio.

Además, ahora hay una nueva y sencilla función SecTillClose(), que le da el tiempo restante en segundos (la moneda de tiempo de MQ) hasta que se cierre el mercado de divisas - sin CopyTime(). Esto es interesante para aquellos que quieren cerrar sus posiciones antes del fin de semana o no quieren abrir una nueva posición en un período definido antes del fin de semana.

El indicador incluido DealingWithTime_TestIndi.mq5 muestra como comentario en el gráfico no sólo el horario de verano/invierno de Europa, EE.UU. y Australia (Sydney), sino también la hora actual y la diferencia horaria de varias ciudades. Aquí también encontrarás una tabla con las diferentes horas locales de las principales ciudades, por ejemplo para comparar con: https://www.timeanddate.com/worldclock/. Así podrá comprobar los valores en cualquier momento. Este indicador también muestra cómo se determinan y utilizan estos valores (qué se resta o se suma a qué) para que sea más fácil utilizarlo usted mismo: copiar y pegar, la forma más rápida de programar.

Las dos últimas líneas también muestran el último segundo de la sesión FX actual y el tiempo restante en horas (más fácil de juzgar) y segundos. Si la sesión FX en Nueva York se cierra a las 17:00 hora local los viernes, no hay ninguna barra válida con hora de apertura a las 17:00 hora de Nueva York. Por lo tanto, en esta función se resta 1 segundo para obtener la última hora de apertura válida de la última barra en tiempo del broker. Sin embargo, algunos brokers finalizan su sesión de FX unos minutos antes dejando de proporcionar precios y dejando de aceptar órdenes de negociación.


Dealing with Time (Part 2): The Functions
Dealing with Time (Part 2): The Functions
  • www.mql5.com
Determing the broker offset and GMT automatically. Instead of asking the support of your broker, from whom you will probably receive an insufficient answer (who would be willing to explain a missing hour), we simply look ourselves how they time their prices in the weeks of the time changes — but not cumbersome by hand, we let a program do it — why do we have a PC after all.
 

La versión de DealingWithTime.mqh v. 1.01 del artículo Dealing with Time (Part 2): Las Funciones ( https://www.mql5.com/es/articles/9929 ) dejó de funcionar porque MQ cambió el comportamiento de la función CopyTime( ) algún tiempo después de la publicación de este artículo. Ahora esta función ya no devuelve valores de tiempo futuros si son mayores que TimeCurrent( ) especificado para los parámetros start_time y/o stop_time. En su lugar, se devuelve la hora de apertura de la última barra actual como el mayor valor posible.

Dado que el final de la sesión FX se determinó de esta manera para determinar el desfase horario del corredor, ¡esto conduce ahora a valores incorrectos!

Este cálculo se ha modificado en la versión 2.03. Esta versión ya está disponible en la CodeBase aquí: https://www.mql5.com/es/code/45287.

Pero también el cálculo del cambio de hora fue completamente cambiado, de manera que ahora se cubren los tiempos complicados del cambio de hora desde Sydney (Australia) hasta los años 70.

También se adjunta la tabla DST 1975 - 2030.xlsx como archivo zip con todos los cambios de hora desde los años 70 para que todo el mundo pueda comprobar el correcto funcionamiento de las fórmulas, aquí hay una serie de ejemplo de la tabla:

El 1 de enero de 1982 es la hora estándar en EEUU (DST==0) y el próximo cambio será el 25 de abril de 1982, el último (25 del mes) domingo de abril (4). La tabla ya está ordenada por zona horaria geográfica (columna A), luego por zona horaria del año (columna L, spr=primavera, aut=otoño,) y finalmente por fecha de consulta (columna C). La tabla puede ser creada automáticamente por el EA incluido (no se puede ejecutar un script en modo depuración). Test_DST 2.mq5 si lo ejecuta en modo depuración y copia las líneas del registro del diario en el depurador y las pega en una hoja de cálculo; El separador de celdas sería el espacio.

Además, ahora hay una nueva y simple función SecTillClose(), que le da el tiempo restante en segundos (la moneda de tiempo de MQ) hasta que el mercado de divisas se cierra - sin CopyTime(). Esto es interesante para aquellos que quieren cerrar sus posiciones antes del fin de semana o no quieren abrir una nueva posición en un período definido antes del fin de semana.

El indicador incluido DealingWithTime_TestIndi.mq5, como comentario en el gráfico, muestra no sólo el horario de verano en Europa, EE.UU. y Australia (Sydney), sino también la hora actual y la diferencia horaria de varias ciudades. Aquí puedes encontrar una tabla con las diferentes horas locales de las principales ciudades para comparar: https://www.timeanddate.com/worldclock/. Así podrá comprobar los valores en cualquier momento. Este indicador también muestra cómo se determinan y utilizan estos valores (qué se resta o se suma de qué), lo que facilita su uso: copiar y pegar, la forma más rápida de programar.

Las dos últimas líneas también muestran el último segundo de la sesión FX actual y el tiempo restante en horas (que es más fácil de juzgar) y en segundos. En Nueva York, cuando la sesión FX se cierra a las 17:00 hora local de un viernes, no hay ninguna barra válida abierta a las 17:00 hora de Nueva York. Por lo tanto, en esta función, se resta 1 segundo para obtener la última hora de apertura válida de la última barra en el horario del broker. Sin embargo, algunos brokers finalizan su sesión de FX unos minutos antes, dejando de proporcionar precios y dejando de aceptar órdenes de negociación.


Dealing with Time (Part 2): The Functions
Dealing with Time (Part 2): The Functions
  • www.mql5.com
Determing the broker offset and GMT automatically. Instead of asking the support of your broker, from whom you will probably receive an insufficient answer (who would be willing to explain a missing hour), we simply look ourselves how they time their prices in the weeks of the time changes — but not cumbersome by hand, we let a program do it — why do we have a PC after all.
 

La versión de DealingWithTime.mqh v. 1.01 del artículo "Gestionando el Horario (Parte 2): Funciones" ( https://www.mql5.com/es/articles/9929 ) dejó de funcionar porque MetaQuotes cambió el comportamiento de CopyTime() y ahora ya no funcionan algún tiempo después de la publicación de este artículo. Ahora esta función ya no devuelve valores de tiempo futuros si son mayores que TimeCurrent() especificado para los parámetros start_time y/o stop_time. En su lugar, el tiempo de apertura de la última barra actual se devuelve como el mayor valor posible.

Dado que el final de la sesión de FX se determinó de esta manera para determinar la compensación de tiempo del corredor, ¡esto ahora conduce a valores incorrectos!

Este cálculo se modificó en la versión 2.03. Esta versión ya está disponible en CodeBase aquí: https://www.mql5.com/en/code/45287 .

Pero también se cambió por completo el cálculo del cambio de hora, por lo que ahora se cubren los tiempos complicados del cambio de hora desde Sídney (Australia) hasta los años 70.

También se adjunta la tabla DST 1975 - 2030.xlsx como archivo zip con todos los cambios de hora desde los años 70 para que todos puedan verificar el correcto funcionamiento de las fórmulas, aquí hay una serie de ejemplos de la tabla:

El 1 de enero de 1982 es la hora estándar en EE. UU. (DST==0) y el próximo cambio será el 25 de abril de 1982, el último (25 del mes) domingo de abril (4). La tabla ya está ordenada por zona horaria geográfica (columna A), luego por zona horaria del año (columna L, spr=primavera, aut=otoño) y finalmente por fecha de consulta (columna C). La tabla puede ser creada automáticamente por el EA incluido (un script no puede ejecutarse en modo de depuración). Test_DST 2.mq5 si lo ejecuta en modo de depuración y copia las líneas del registro diario en el depurador y las pega en una hoja de cálculo; El separador de celdas sería el espacio.

Además, ahora hay una función nueva y simple, SecTillClose(), que le brinda el tiempo restante en segundos (la moneda de tiempo de MetaQuotes) hasta que se cierre el mercado de divisas, sin CopyTime(). Esto es interesante para aquellos que quieren cerrar sus posiciones antes del fin de semana o no quieren abrir una nueva posición en un período definido antes del fin de semana.

El indicador incluido DealingWithTime_TestIndi.mq5, como comentario en el gráfico, muestra no solo el horario de verano en Europa, EE.UU. y Australia (Sídney), sino también la hora actual y la diferencia horaria de varias ciudades. Aquí puede encontrar una tabla con diferentes horas locales de las principales ciudades para comparar: https://www.timeanddate.com/worldclock/ . Por lo tanto, puede comprobar los valores en cualquier momento. Este indicador también muestra cómo se determinan y usan estos valores (qué resta o agrega), lo que facilita su uso: copiar y pegar, la forma más rápida de programación.

Las dos últimas líneas también muestran el último segundo de la sesión FX actual y el tiempo restante en horas (que es más fácil de juzgar) y en segundos. En Nueva York, cuando la sesión de FX cierra a las 5:00 p.m., hora local, un viernes, no hay una barra válida abierta a las 5:00 p.m., hora de Nueva York. Por lo tanto, en esta función, se resta 1 segundo para obtener el último tiempo de apertura válido de la última barra en el tiempo del corredor. Sin embargo, algunos corredores finalizan su sesión de FX unos minutos antes y ya no brindan precios ni aceptan órdenes comerciales.