Discusión sobre el artículo "El comercio nocturno en la sesión asiática: cómo mantener los beneficios"
//--- parámetros de entrada input int order_time=0; // Hora de apertura del pedido
El problema con ambos probadores es que no se puede optimizar datetime. De ahí esta fealdad forzada.
Deberíamos haber resuelto este problema hace mucho tiempo.
ZY OnTesterInit puede ayudar con datetime, pero no todos pueden.
Estaría bien que en el terminal se pudiera saber la hora del turno del broker al menos con respecto a GMT. Más concretamente, estaría escrito en el terminal para cada broker. Y en los resultados de las pruebas. Pero las pruebas se dan - ¿qué turno de tiempo hay? No se.
Solicitar TimeGMT() es bueno, pero no es suficiente. Y no da nada para considerar la prueba. Necesitamos exactamente el tiempo de cambio de broker en relación con GMT.
El problema con ambos probadores es que no se puede optimizar datetime. De ahí esta fealdad forzada.
Debería haberse hecho algo al respecto hace mucho tiempo.
No es datetime lo que se quiere decir aquí -- ver:
if(time_now_str.hour==order_time && work==true && work_day==true)Es que el autor tiene un problema con los nombres de las variables
Estaría bien que en el terminal se pudiera saber la hora del turno del broker al menos con respecto a GMT. Más concretamente, estaría escrito en el terminal para cada broker. Y en los resultados de las pruebas. Pero las pruebas se dan - ¿qué turno de tiempo hay? No se.
Solicitar TimeGMT() es bueno, pero no es suficiente. Y no da nada para considerar la prueba. Lo que se necesita es el desplazamiento horario del broker con respecto a GMT.
Es fácil determinar TimeGMT en el modo de optimización en MT5, una sola ejecución - usted debe pensar en ello.
Esto no es datetime -- ver:
Es que el autor tiene un problema con los nombres de las variablesMe arrepiento, leí el artículo sólo hasta la línea citada. Pero el problema de datetime existe. El tiempo debe ser optimizado no sólo a través de MQL, sino también, humanamente hablando, a través de GUI.
En el modo de optimización en MT5 no es difícil determinar TimeGMT, una sola ejecución - es necesario pensar en ello.
¿Qué pasa si otras personas reciben los resultados de las pruebas? No hay forma de saberlo.
Sí, eso no se menciona en el informe. Es por eso que los informes personalizados son poderosos. Especialmente en MT5.
Tal vez en lugar de
//+------------------------------------------------------------------+ //| Función tick experto| //+------------------------------------------------------------------+ void OnTick() { //--- time_now_var=TimeCurrent(time_now_str);// hora actual switch(time_now_str.day_of_week) { case 1: if(mon==false){work_day=false;} else {work_day=true;} break; case 2: if(tue==false){work_day=false;} else {work_day=true;} break; case 3: if(wen==false){work_day=false;} else {work_day=true;} break; case 4: if(thu==false){work_day=false;} else {work_day=true;} break; case 5: if(fri==false){work_day=false;} else {work_day=true;} break; }
usar uno más simple
//+------------------------------------------------------------------+ //| Función tick experto| //+------------------------------------------------------------------+ void OnTick() { time_now_var=TimeCurrent(time_now_str);// hora actual switch(time_now_str.day_of_week) { case 1: work_day=mon; break; case 2: work_day=tue; break; case 3: work_day=wen; break; case 4: work_day=thu; break; case 5: work_day=fri; break; } ...
Como se suele decir, no es nada personal, sólo un hábito estúpido - no puedo pasar de largo cuando veo un código ineficiente.
No he mirado más en el código.
Tal vez en lugar de
usar uno más simple
Como se suele decir, no es nada personal, sólo un hábito estúpido - no puedo pasar de largo cuando veo un código ineficiente.
No he mirado más en el código.
Gracias por tu comentario. El hábito es bueno, yo también lo hago a veces.....
Tu ejemplo:
//+------------------------------------------------------------------+ //| Función tick experto| //+------------------------------------------------------------------+ void OnTick() { time_now_var=TimeCurrent(time_now_str);// hora actual switch(time_now_str.day_of_week) { case 1: work_day=mon; break; case 2: work_day=tue; break; case 3: work_day=wen; break; case 4: work_day=thu; break; case 5: work_day=fri; break; } ...
Francamente no lo entiendo, hay que completarlo... Porque en las variables entrantes en el Asesor Experto, los días de la semana en los que necesitas trabajar están marcados como "true", y si no necesitas trabajar ese día, entonces "false".
Y la variable "día_trabajo" envía la respuesta como "verdadero" o "falso". En tu ejemplo, la variable pasa a ser de tipo "cadena", por lo que tendrás que volver a hacer una comparación.
Por lo tanto, estoy a favor de la optimización del código, aunque en este EA no era una prioridad.
Este código en particular se puede optimizar:
//+------------------------------------------------------------------+ //| Función tick experto| //+------------------------------------------------------------------+ void OnTick() { //--- time_now_var=TimeCurrent(time_now_str);// hora actual work_day=true; switch(time_now_str.day_of_week) { case 1: if(mon==false){work_day=false;} break; case 2: if(tue==false){work_day=false;} break; case 3: if(wen==false){work_day=false;} break; case 4: if(thu==false){work_day=false;} break; case 5: if(fri==false){work_day=false;} break; }
El tamaño del código se reducirá, pero la velocidad de trabajo no...
Tal vez usted puede implementar un bucle en la función, entonces el tamaño puede ser menor, pero la velocidad de procesamiento será más largo.
También puede trabajar y cambiar los parámetros de entrada, entonces usted puede cambiar el código, tal vez simplificarlo.
work_day=false; switch(time_now_str.day_of_week) { case 1: if (mon) work_day=true; break; case 2: if (tue) work_day=true; break; case 3: if (wen) work_day=true; break; case 4: if (thu) work_day=true; break; case 5: if (fri) work_day=true; break; }
Usted podría ofrecer un código de este tipo también. Pero eliminando los operadores "else", habrás simplificado el código fuente sólo a la mitad. La variante óptima se obtendrá si elimina también los operadores "if", dejando sólo 5 operadores de asignación. Esta será la variante óptima que se ha sugerido.
switch(time_now_str.day_of_week) { case 1: work_day=mon; break; case 2: work_day=tue; break; case 3: work_day=wen; break; case 4: work_day=thu; break; case 5: work_day=fri; break; default: work_day=false; // в субботу и воскресенье не торгуем... }
Pero no entiendo en absoluto lo de la variable que pasa a ser de tipo "cadena".
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Usted acepta la política del sitio web y las condiciones de uso
Artículo publicado El comercio nocturno en la sesión asiática: cómo mantener los beneficios:
En el artículo se analizan el concepto de comercio nocturno, sus estrategias comerciales y su implementación en MQL5. Se han realizado varias simulaciones y se han sacado las conclusiones pertinentes.
Vamos a tomar la popular pareja EUR/USD. Normalmente, durante la sesión asiática, comienza a disminuir su volatilidad y a moverse hacia el flat. La corrección en esta etapa puede ser tan insignificante, que se podría considerar movimiento horizontal.
Fig.2. Movimiento plano en la sesión Asiática, pareja EUR/USD
Autor: Dmitriy Zabudskiy