Respuesta

[Bug + Fix] La salida en viernes no se calcula correctamente

18 respuestas

geektrader

Customer, bbp_participant, community, 522 replies.

Visitar el perfil

hace 8 años #114118

Así que he estado mirando a mi VPS esta noche y se dio cuenta de que no había más operaciones en (todas mis estrategias utilizan órdenes pendientes solamente). Mirando en el registro, vi que siempre lo hizo añadir / ajustar las nuevas órdenes de parada cada 30 minutos como se supone que debe hacer, pero directamente los eliminó después cada vez.

 

Después de una larga depuración del código MQL4 a través de "Imprimir", todo se redujo a la función Salir el viernes que siempre pensaba que ya es el final del viernes y debe eliminar todas las órdenes pendientes / cerrar todas las operaciones activadas. La función compara lo siguiente para determinar si es el momento adecuado para salir:

 

....else if(dow == 5 && TimeCurrent() >= StrToTime(ExitTimeOnFriday)) {

            closeActiveOrders();

            closePendingOrders();

         }

 

Así que después de imprimir "TimeCurrent()" y StrToTime(ExitTimeOnFriday)) a través del comando "Print", el resultado fue que "TimeCurrent()" era de hecho mayor que "ExitTimeOnFriday", aunque mi "ExitTimeOnFriday" es 23:57, y el servidor de comercio MT4 que estoy utilizando (Global Prime Forex) actualmente estaba en viernes 01:34 por ese tiempo. Entonces, ¿por qué sucedió esto? Simple, no se puede pasar "ExitTimeOnFriday" ("23:57") a la función "StrToTime" así, porque la función "StrToTime" utiliza el día actual del ORDENADOR LOCAL para añadir un día a las 23:57, mientras que la función "TimeCurrent()" siempre utiliza el día actual del servidor MT4 - y mi ordenador local tiene una hora completamente diferente a la del servidor de trading MT4 ya que está en otra zona horaria. Así que en su estado original, la salida el viernes de verificación compara manzanas con naranjas.

 

Para los programadores de SQ, la solución es la siguiente:

 

....else if(dow == 5 && TimeCurrent() >= StrToTime(DoubleToStr(TimeYear(TimeCurrent()), 0) + "." + DoubleToStr(TimeMonth(TimeCurrent()), 0) + "." + DoubleToStr(TimeDay(TimeCurrent()), 0) + " " + ExitTimeOnFriday)) {

…..

 

Esto siempre utilizará el día actual del servidor MT4 (el mismo día que devuelve "TimeCurrent()") para calcular la hora de salida del viernes en lugar del día del ordenador local. De esta manera la Salida del Viernes es siempre exacta y usted puede ajustar el reloj de su ordenador local a lo que quiera:)

 

 

Y sí, todavía estoy disponible para ser contratado para encontrar y corregir más errores;)


🚀 Unlock Your Edge in Automated Forex Strategy Development 🚀

Historical Forex Data Starting From 1987, 28 Pairs, M1, 99% Error-Free, Lifetime Free Updates

0

Fluke

Abonado, bbp_participant, comunidad, 43 respuestas.

Visitar el perfil

hace 8 años #133103

¡¡¡Mark, con este nuevo arreglo que han corrompido cualquier código fuente mql4!!! La prueba de espalda en metatrader ir en fuera de la memoria!!! por favor, reparar rápidamente

0

Matusiak Adrian

Cliente, bbp_participant, comunidad, 300 respuestas.

Visitar el perfil

hace 8 años #133294

BTW,

 

¿se ha resuelto ya este error?

La última actualización estaba destruyendo el código mql pero ¿la próxima actualización arregló el archivo corrupto + salida el viernes?

btn_viewmy_160x33.png

0

Mark Fric

Administrador, sq-ultimate, 2 respuestas.

Visitar el perfil

hace 8 años #133295

Sí, lo escribí en otro hilo. Se ha solucionado con la última actualización automática.

 

Añado aquí también la actualización automática por si no lo has confirmado. Sólo tienes que extraer el archivo ZIP a la carpeta principal de EA Wizard.

Archivo: sq_update.zip

Mark
Arquitecto de StrategyQuant

0

Viendo 3 respuestas - de la 16 a la 18 (de un total de 18)

1 2