Discusión sobre el artículo "Gestionando el Horario (Parte 2): Funciones"

 

Artículo publicado Gestionando el Horario (Parte 2): Funciones:

Determinando la compensación del bróker y la hora GMT de forma automática. En lugar de pedir ayuda a su bróker, de quien probablemente recibirá una respuesta insuficiente (quién estaría dispuesto a explicar dónde se ha metido la hora faltante), simplemente nos fijaremos en cómo estos calculan sus precios en las semanas de cambio horario, pero evitando engorrosos cálculos manuales: un programa se encargará de ello, después de todo, ¿para qué tenemos un PC?

Antes de las funciones en el archivo de inclusión DealingWithTime.mqh (y después de la sustitución de la macros), declararemos las variables necesarias como variables globales:

//--- global variables for time switches
int      DST_USD=0,                             // act time shift USD
         DST_EUR=0,                             // act time shift EU
         DST_AUD=0,                             // act time shift Australia
         DST_RUS=0;                             // D'2014.10.26 02:00', -10800,

Estas variables DST_USD, DST_EUR... contendrán el cambio horario real de los EE.UU., la UE, etcétera, y serán actualizados y configurados por nuestras funciones. En el horario de invierno, que es el horario normal, serán iguales a cero: la hora no se cambia en ese periodo.

Después de ello, tendremos las variables para la próxima vez que se produzca el cambio de hora. Se necesitarán principalmente para saber cuándo requerimos un nuevo cálculo para ahorrar los recursos de la CPU:

datetime nxtSwitch_USD,                         // date of next switch
         nxtSwitch_EUR,                         // date of next switch
         nxtSwitch_AUD,                         // date of next switch
         nxtSwitch_RUB = D'2014.10.26 02:00';   // Russia s different :(

Analizaremos la situación rusa más adelante en este mismo artículo.

Esta estructura y su variable global son el corazón de todo. :)

struct _OffsetBroker
  {
   int   USwinEUwin,                            // US=Winter & EU=Winter
         USsumEUsum,                            // US=Summer & EU=Summer
         USsumEUwin,                            // US=Summer & EU=Winter
         actOffset,                             // actual time offset of the broker
         secFxWiWi,                             // duration of FX in sec
         secFxSuSu,                             // duration of FX in sec
         secFxSuWi,                             // duration of FX in sec
         actSecFX;                              // actual duration of FX in sec
   bool  set;                                   // are all set?
  };
_OffsetBroker OffsetBroker;

Asignaremos las compensaciones del bróker para los tres periodos relevantes y la duración del mercado fórex estará abierta en estos periodos, tanto para el valor real como para un conjunto de sencilla verificación, si los valores han sido asignados. La variable global se llama OffsetBroker, y la encontraremos varias veces.

Autor: Carl Schreiber

 
Estamos dispuestos a introducir los valores reales a todos nuestros comerciantes de zorro para mostrar
 
Estamos dispuestos a introducir el valor real a todo nuestro comercio de zorro para mostrar
 

Hola,

Según entiendo del artículo, la función "setBokerOffset ()" debería funcionar también en el probador de estrategias, pero no funciona.

void OnTick()
  {
//---
   bool isTimeSet = setBokerOffset();
   if(!isTimeSet)
     {
      Alert("setBokerOffset failed");
      return;
     }
  }
array out of range in 'DealingWithTime.mqh' (201,21)


¿Tiene la "La alternativa utilizando a través de variables de entrada" la única manera de obtener tiempos correctos en el probador de estrategia?

 
Nauris Zukas probador de estrategias, pero no funciona.


¿Tiene la "La alternativa utilizando a través de variables de entrada" la única manera de conseguir tiempos correctos en el probador de estrategia?

Supongo que el Probador de Estrategias no tiene las cotizaciones y entonces prev. CopyTime() falló. Compruebe si los datos solicitados y necesarios ya están disponibles localmente.
 
Carl Schreiber #:
Supongo que el Probador de Estrategias no tiene las cotizaciones y entonces prev. CopyTime() falló. Compruebe si los datos solicitados y necesarios ya están disponibles localmente.

¡Ok, voy a ver más de cerca CopyTime() y tratará de resolverlo.

Y gracias, artículo muy útil!

 
Buen artículo. Sin embargo, se plantea un problema: ¿cómo determinar que un corredor/agente está cambiando de invierno/verano sin ponerse en contacto con su servicio técnico?
 
Nikita Chernyshov # :
Buen artículo. Sin embargo, se plantea un problema: ¿cómo determinar que un corredor/agente está cambiando de invierno/verano sin ponerse en contacto con su servicio técnico?
  1. ¿Por qué no preguntar?
  2. El software sabe cuándo es verano/invierno en EE.UU. y en la UE y lo utiliza para calcular el cambio de horario del corredor.
 
Nikita Chernyshov #:
Buen artículo. Sin embargo, se plantea un problema: ¿cómo determinar que un corredor/agente está cambiando de invierno/verano sin ponerse en contacto con su servicio técnico?


.
Документация по MQL5: Дата и время / TimeDaylightSavings
Документация по MQL5: Дата и время / TimeDaylightSavings
  • www.mql5.com
TimeDaylightSavings - Дата и время - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Alexey Viktorov #:


.

sí, pero depende de la configuración horaria del usuario, lo que no funciona muy bien. Además, hay que modelarlo en un probador.

 
Carl Schreiber #:
  1. ¿Por qué no pregunta?
  2. El software sabe cuándo es verano/invierno en EE.UU. y la UE y lo utiliza para calcular la compensación del corredor.

1. Porque el soporte no siempre da la información correcta. Usted mismo señaló esto sobre el distribuidor Alpari. + es sobrecarga: averiguar de cada distribuidor la transición. Porque entonces no se puede crear una buena solución, no sé con quién está discutiendo el usuario final.

2. Bueno, más o menos, sí, pero si el concesionario no hace la transición de invierno a verano y viceversa, entonces se obtiene alguna cosa extraña en los cálculos.

Intenté modificar un poco tu biblioteca, pero al parecer algo salió mal. Pensé que el código debe conducir al hecho de que el Asesor Experto detecta automáticamente la hora GMT y comercia de acuerdo a GMT, no de acuerdo con el servidor del corredor. No estoy seguro de si el código es óptimo, pero la solución parece funcionar. Sin embargo, en aquellos corredores que no cambian la hora - hay algunos cálculos incorrectos.

Archivos adjuntos: