Escapada de Londres

 

Estimados miembros del foro,

Desde hace unas semanas estoy intentando avanzar con MQL4, pero ¡¡¡qué reto!!! Esperaba ser un experto ya! pero no lo soy y espero recibir un poco de ayuda.

Estoy tratando de construir un asesor experto de ruptura para la sesión de apertura de Londres. Quiero que mi asesor experto calcule el máximo y el mínimo de las 5 barras antes de la apertura de Londres y luego calcule el máximo y el mínimo.

Para esta función asumo que tengo que usar el alto de la función iHigh y el bajo de la función iLow para calcular el rango. Pero este rango entonces estará cambiando durante el día. Quiero que esos máximos y mínimos de ese rango sean estáticos y no variables.

¿Alguien tiene alguna idea?

Gracias por adelantado.

 
Nour:

Estimados miembros del foro,

Desde hace unas semanas estoy intentando avanzar con MQL4, pero ¡¡¡qué reto!!! Esperaba ser un experto ya! pero no lo soy y espero recibir un poco de ayuda.

Estoy tratando de construir un asesor experto de ruptura para la sesión de apertura de Londres. Quiero que mi asesor experto calcule el máximo y el mínimo de las 5 barras antes de la apertura de Londres y luego calcule el máximo y el mínimo.

Para esta función asumo que tengo que usar el alto de la función iHigh y el bajo de la función iLow para calcular el rango. Pero este rango entonces estará cambiando durante el día. Quiero que esos máximos y mínimos de ese rango sean estáticos y no variables.

¿Alguien tiene alguna idea?

Gracias por adelantado.


como encontrar el bar donde empieza el open de londres...

muestra como lo haces

 

Ese es otro problema deVries, no sé cómo encontrar la barra donde se abre Londres...

Todavía soy bastante nuevo en MQL4

 

... ¿me estoy perdiendo algo, o las funciones de fecha/hora incorporadas en MQL4 siguen siendo inadecuadas para este tipo de cosas?

Dos cuestiones:

* No se puede obtener de forma fiable el desfase entre el servidor del broker y GMT porque (a) puede cambiar con el horario de verano, y (b) cualquier comparación de TimeCurrent() con TimeGMT() para calcular un desfase falla durante los fines de semana.

* Aunque se puede obtener el desfase actual mientras el mercado está abierto, no hay una forma integrada de traducir la hora GMT a otra zona horaria como Londres.

En otras palabras: no hay una forma integrada de determinar (a) que el servidor del broker funciona en CET, y por lo tanto (b) que las horas de Londres para cada barra están 1 hora por detrás de la hora reportada por MT4.

 

Nour:

Ese es otro problema deVries, no sé cómo encontrar la barra donde se abre Londres...

Todavía soy bastante nuevo en MQL4

https://docs.mql4.com/series/ibarshift
 
gchrmt4:

... ¿me estoy perdiendo algo, o las funciones de fecha/hora incorporadas en MQL4 siguen siendo inadecuadas para este tipo de cosas?

Dos cuestiones:

* No se puede obtener de forma fiable el desfase entre el servidor del broker y GMT porque (a) puede cambiar con el horario de verano, y (b) cualquier comparación de TimeCurrent() con TimeGMT() para calcular un desfase falla durante los fines de semana.

* Aunque se puede obtener el desfase actual mientras el mercado está abierto, no hay una forma integrada de traducir la hora GMT a otra zona horaria como Londres.

En otras palabras: no hay una forma integrada de determinar (a) que el servidor del broker funciona en CET, y por lo tanto (b) que las horas de Londres para cada barra están 1 hora por detrás de la hora reportada por MT4.


Parece que TimeGMT() no cambia con el horario de verano. Por ejemplo, yo vivo en los EE.UU., por lo que actualmente mi zona horaria local es EDT. El servidor MT4 de mi corredor actualmente es EEST. Ahora, considere el siguiente código y su salida:

   Print ("1. GMT = ", TimeToString(TimeGMT()));
   Print ("2. Local Time (EDT) = ", TimeToString(TimeLocal()));
   Print ("3. Daylight Saving Adjustment: ", TimeDaylightSavings()/3600);
   Print ("4. GMTOffset for TimeLocal = ", TimeGMTOffset()/3600);
   Print ("5. Server Time (EEST) = ", TimeToString(TimeCurrent()));
   
   int local = (TimeLocal() - TimeGMT()) / 3600;
   int server = MathRound((TimeCurrent() - TimeGMT()) / 3600.0);
   string prt = "TimeLocal is ";
   if (local > 0)
      prt = StringConcatenate(prt, "GMT+", MathAbs(local));
   else if (local < 0)
      prt = StringConcatenate(prt, "GMT-", MathAbs(local));
   else
      prt = StringConcatenate(prt, "GMT");
      
   prt = StringConcatenate(prt, " and TimeCurrent is ");
   if (server > 0)
      prt = StringConcatenate(prt, "GMT+", MathAbs(server));
   else if (local < 0)
      prt = StringConcatenate(prt, "GMT-", MathAbs(server));
   else
      prt = StringConcatenate(prt, "GMT");
    
   Print (prt);

17:52:28 Experto TestEA-1 EURUSD,H1: cargado con éxito

17:52:28 TestEA-1 EURUSD,H1: 1. GMT = 2014.03.11 21:52

17:52:28 TestEA-1 EURUSD,H1: 2. Hora local (EDT) = 2014.03.11 17:52

17:52:28 TestEA-1 EURUSD,H1: 3. Ajuste de horario de verano: -1

17:52:28 TestEA-1 EURUSD,H1: 4. GMTOffset para TimeLocal = 4

17:52:28 TestEA-1 EURUSD,H1: 5. Hora del servidor (EEST) = 2014.03.12 00:52

17:52:28 TestEA-1 EURUSD,H1: TimeLocal es GMT-4 y TimeCurrent es GMT+3

He comprobado la hora GMT anterior con la de Londres, y eran iguales (Londres no cambia a BST hasta finales de marzo). Así que creo que TimeGMT() devuelve GMT sin añadir el ajuste local del horario de verano. EDT se define como UTC-4 y EEST se define como UTC+3.

Además, si necesita determinar cuándo comienza y termina el horario de verano para los EE.UU. o para la UE, vea estas funciones.

 
Thirteen:

He comprobado la hora GMT de arriba con la de Londres [...]

Como casi seguro sabes... uno de los problemas es que el desfase entre la hora del broker y la GMT (a) puede o no ser variable en función del horario de verano y (b) si es o no variable no se puede determinar en base a la información que proporciona MT4. No he mirado estas funciones en detalle, pero creo que estamos de acuerdo en que no se puede hacer ningún cálculo de este tipo basándose únicamente en la información que proporciona MT4.

Por lo que veo, a principios de abril el código anterior empezará a decir que el broker está en GMT+4. Mi punto es que no hay manera de saber de lo que MT4 le dice que, en la semana anterior, el corredor estaba en GMT + 3 y que los usos de, por ejemplo, iBarShift() puede necesitar ser ajustado en consecuencia si se quiere trabajar en la actividad de los precios en tiempos específicos GMT, o desplazamientos de los tiempos GMT.

Por cierto, si ha ejecutado el código anterior hoy, es casi seguro que su corredor no puede estar en EEST. Deberían estar en EET hasta el 30 de marzo. Si están actualmente en GMT+3 entonces están usando algo diferente a EEST. (La página a la que has enlazado dice "Durante esta época del año, las localizaciones en EEST están ahora en EET").

 

gchrmt4:

. . .

Por cierto, si ha ejecutado el código anterior hoy, es casi seguro que su corredor no puede estar en EEST. Deberían estar en EET hasta el 30 de marzo. Si están actualmente en GMT+3 entonces están usando algo diferente a EEST. (La página a la que has enlazado dice "Durante esta época del año, las localizaciones en EEST están ahora en EET").

Mi broker cambia la zona horaria en su servidor de MT4 de GMT+2 a GMT+3 para que se corresponda con el cierre de Nueva York a las 5 de la tarde, y lo hace al mismo tiempo que Estados Unidos cambia al horario de verano, lo que ocurrió el 09 de marzo de 2014. En Europa, GMT+2 corresponde aproximadamente a EET para la hora estándar, por lo que GMT+3 corresponde a EEST para el horario de verano. Véase, por ejemplo, Zonas Horarias Europeas. Así que, como puedes ver, no hay duda de que he ejecutado el código hoy cuando mi zona horaria local es EDT y la zona horaria de mi broker corresponde a EEST.

[1] Por lo que veo, a principios de abril el código anterior empezará a decir que el broker está en GMT+4.

[2] Lo que quiero decir es que no hay forma de saber, a partir de lo que te dice MT4, que en la semana anterior el broker estaba en GMT+3 y que los usos de, por ejemplo, iBarShift() pueden tener que ajustarse en consecuencia si quieres calcular la actividad de los precios en momentos específicos de GMT, o desplazamientos de los mismos.

1. ¿Por qué devolvería GMT+4 en abril? La hora de mi ordenador local ya está ajustada al horario de verano, y mi broker ya ha ajustado su servidor para reflejar el horario de verano, así que ¿qué cambiará en abril?

2. Un corredor puede cambiar su hora para reflejar el horario de verano, lo que cambiaría su desplazamiento a GMT. Pero se puede predecir ese cambio. Por ejemplo, mientras que las fechas/horas en las que comienza y termina el horario de verano cambian de año en año, ese cambio es predecible - y por lo tanto programable. Sólo hay que codificar la regla. Pero TimeGMT() debe devolver GMT independientemente de la zona horaria local, de la zona horaria del corredor o de la compensación del horario de verano.

Como casi seguro que sabes... uno de los problemas es que el desfase entre la hora del broker y GMT (a) puede o no ser variable en función del horario de verano y (b) si es o no variable no se puede determinar en base a la información que proporciona MT4. No he mirado estas funciones en detalle, pero creo que estamos de acuerdo en que no se puede hacer ningún cálculo basado únicamente en la información que proporciona MT4.

Si un corredor se ajusta para el horario de verano, entonces ese ajuste cambiaría su desplazamiento a GMT, pero como he dicho anteriormente, usted puede predecir esos cambios y ajustar para ellos. O si un lugar (por ejemplo, Londres) ajusta el horario de verano, usted puede codificar la regla local y así predecir ese cambio y ajustarlo.

 
Thirteen:

Si un corredor se ajusta al horario de verano, entonces ese ajuste cambiaría su desfase con respecto a GMT, pero como dije anteriormente, usted puede predecir esos cambios y ajustarse a ellos. O si un lugar (por ejemplo, Londres) se ajusta al horario de verano, puedes codificar la norma local y así predecir ese cambio y ajustarte a él.

Sigo estando fundamentalmente de acuerdo contigo en que los cambios son predecibles y codificables... pero no sólo utilizando la información que proporciona la propia MT4. Tienes que "codificar la regla local" para Londres GMT, en lugar de decirle a MT4 "dame la hora equivalente para x en Londres".

La hora de tu servidor de GMT+3 puede corresponder a EEST en el sentido de que EEST es GMT+3 pero, según tanto Wikipedia como worldclock.com, en ningún sitio debería estar todavía en EEST. Ese cambio no debería producirse hasta el 30 de marzo. La hora actual en Chipre, Grecia, Israel, etc. es GMT+2.

Por lo tanto, lo que probablemente tienes es un broker que ejecuta sus servidores en GMT+2, pero que cambia al horario de verano en las fechas de Estados Unidos y no en las europeas. Eso no es lo mismo que EET/EEST. (Y es incluso menos predecible en términos de poder escribir un código que ajuste automáticamente las horas y las fechas sin tener que pedir al usuario algún tipo de información sobre la configuración horaria que utiliza el broker).

Por lo tanto, si el broker ha cambiado recientemente de GMT+2 a GMT+3, en lugar de estar a punto de cambiar de GMT+3 a GMT+4, lo que significa es que el desfase actual entre la hora del broker y la hora GMT sería erróneo si se intentara aplicar a las barras de la semana pasada, antes del cambio de reloj en EE.UU. Esta semana, las barras del broker van 3 horas por delante de Londres. La semana pasada se adelantaron 2 horas. (Y, a partir del 30 de marzo, volverán a estar 2 horas adelantadas.) Si tomas ese desfase actual de 3 horas y lo utilizas para intentar obtener el precio a las 8 de la mañana, hora de Londres, de un día de la semana pasada, obtendrás una respuesta errónea.

Todo lo que estoy diciendo es que la información que es posible obtener sólo de MT4 sí mismo - compensación actual entre el tiempo del corredor y GMT - es inadecuado en la práctica para hacer cosas como decir "calcular el precio de apertura en Londres el pasado miércoles".

 

¿Cómo podría MT4 ser más adecuado para hacer eso? No sé tú, pero yo no me entusiasmaría con la tarea de crear una calculadora de offset histórico regional GMT. ¿Te imaginas? omg. Si alguna vez lo hago, lo pondré en el mercado y será mejor que tengáis un gran talonario de cheques ;)

Estoy bromeando, no hay manera de que intente codificar eso. Sin embargo, WHR podría hacerlo, apuesto a que ya lo ha hecho.