¡¡EXIT RULE en MT4 problema!!
18 respuestas
Gaudio Fx
hace 8 años #114590
puedo cambiar esta regla de salida por una mas logica igual esta:
¡¡¡pero si esta condicion es verdadera antes de la orden, en metatrader el cierre es en el mismo punto que la apertura ..pero en strategyquant el cierre es despues del cierre de la vela!!! .. quiero la misma condición en MT4...ES POSIBLE?
mikeyc
hace 8 años #134663
Esa regla de salida no tiene sentido lógico para mí.
¿Por qué un volumen por encima de la media significaría cerrar una posición corta y un volumen por debajo de la media significaría cerrar una posición larga o viceversa? Esto parece otro ejemplo de extraña lógica en la elección de reglas simétricas.
El hecho de que el volumen sea superior o inferior a la media no tiene un sesgo direccional.
Gaudio Fx
hace 8 años #134664
no es lógico lo sé .. pero era sólo un ejemplo .. es el concepto que creo que es importante, o si la "regla de salida está activo antes de la apertura del comercio, POR QUÉ en metatrader4 está activo al mismo tiempo la apertura, mientras que en strategyquant está activo sólo en el cierre de la vela ????? .. ESTA ES LA PREGUNTA ... no para la salida ejemplo lógico ...
puedo cambiar esta regla de salida por una mas logica igual esta:
¡¡¡pero si esta condicion es verdadera antes de la orden, en metatrader el cierre es en el mismo punto que la apertura ..pero en strategyquant el cierre es despues del cierre de la vela!!! .. quiero la misma condición en MT4...ES POSIBLE?
mikeyc
hace 8 años #134665
Parece que son órdenes pendientes (órdenes limitadas o stop). Está seguro de que se están cerrando y no borrando?
¿Qué muestra la pestaña de resultados en MT4 en lugar del gráfico?
Gaudio Fx
hace 8 años #134666
tomas262
hace 8 años #134667
Gaudio, me parece que las condiciones de entrada y salida a veces pueden "colisionar" y dependiendo de la precisión del backtesting se obtienen comportamientos diferentes como la salida inmediata después de la entrada. ¿Puedes enviarme la estrategia (archivo *.STR) a [email protected] ¿para poder verificarlo? La solución aquí puede ser un arreglo para SQ o editar el código de su estrategia para esperar el cierre de la barra.
geektrader
hace 8 años #134673
Sí, es un problema de precisión. Si usted backtest tal estrategia con tick-datos reales, actúa el mismo en SQ también y fallará. Así que asegúrate de verificar siempre las estrategias con datos reales de los últimos años al menos para evitar estas cosas. Personalmente yo nunca usaría "volumen" para ninguna lógica de trading ya que el volumen es totalmente diferente entre cada broker. Lo mismo para "hora", excepto en el caso de que sepas que los datos históricos que estás utilizando están absolutamente sincronizados con tu broker actual.
mikeyc
hace 8 años #135652
Repito: strategyquant activa la regla de salida inmediatamente después del cierre de la vela en la que abrió el comercioen lugar mt4 esto no sucede, la regla de salida está activa al mismo tiempo la apertura.
Acabo de encontrar este problema con SQ vs MT4 también.
En SQ, la posición se abre en la apertura de la barra, y la posición se cierra al final de la barra/apertura de la barra siguiente. En MT4 (utilizando la precisión de cada tick), la orden se abre y se cierra inmediatamente en la apertura de la barra.
Así que en MT4 no se ve ningún beneficio, en SQ muy buena rentabilidad. Los resultados son completamente diferentes.
Esto sucede en estrategias que tienen una regla de salida que es verdadera al mismo tiempo que la regla de entrada es verdadera, lo que significa abrir una operación y cerrar una operación en esta barra. Parece SQ toma esto para significar, abrir el comercio en la barra abierta y cerrar al final de la barra, y la lógica MT4 hace tanto en la barra abierta.
Lo preocupante es que esto se aplica a muchas estrategias con reglas de entrada y salida.....
mikeyc
hace 8 años #135653
Las pruebas iniciales muestran que puede "arreglar" las estrategias MT4 para que funcionen como lo hacen en SQ añadiendo una línea de código a la siguiente función:
void cerrarPosicionEnMercado() { ActualizarTarifas(); doble precioCP; if(OrderType() == OP_BUY) { precioCP = Oferta; } else { precioCP = Oferta; } if(OrderOpenTime() >= Time[0]) return; // ¡Nueva línea de código! Salir si la orden se acaba de abrir rettmp = OrderClose(OrderTicket(), OrderLots(), priceCP, MaxSlippage); }
Gaudio Fx
hace 8 años #135655
Las pruebas iniciales muestran que puede "arreglar" las estrategias MT4 para que funcionen como lo hacen en SQ añadiendo una línea de código a la siguiente función:
void cerrarPosicionEnMercado() { ActualizarTarifas(); doble precioCP; if(OrderType() == OP_BUY) { precioCP = Oferta; } else { precioCP = Oferta; } if(OrderOpenTime() >= Time[0]) return; // ¡Nueva línea de código! Salir si la orden se acaba de abrir rettmp = OrderClose(OrderTicket(), OrderLots(), priceCP, MaxSlippage); }
geektrader
hace 8 años #135656
Sí, pero en realidad si lo piensas bien, SQ lo está haciendo mal en el backtest, no MT4. Si una regla para abrir y cerrar se aplica al mismo tiempo, la orden debe ser abierta y cerrada dentro de 2 ticks - tick 1 abrir, tick 2 cerrarla. Mantenerla durante una barra es menos válido que cerrarla inmediatamente como hace MT4. Así que en realidad SQ backtesting código debe ajustarse para cerrar la orden de inmediato también y para invalidar realmente la estrategia de esta manera también, porque eso es todo lo que es, no se puede tener una regla de apertura y cierre de aplicar en el mismo momento. Sería válido SI la estrategia TAMBIÉN tuviera la opción de mantener la operación al menos 1 barra, entonces de acuerdo, tu código MT4 de arriba sería correcto entonces. Pero si la regla de apertura y cierre son válidas al mismo tiempo, lo que hace SQ es exactamente lo que es lógicamente correcto y cómo una estrategia de este tipo en realidad también funcionaría si se opera manualmente. Por ejemplo, las reglas de orden dirían: abrir una operación si Cierre anterior > Apertura actual y cerrarla si Cierre anterior > Apertura actual. Lo que tendrías que hacer en ese caso para seguir las reglas es abrir la orden y cerrarla inmediatamente de nuevo - seguramente no tiene sentido, pero eso es justo lo que hacen también las estrategias que tienen tales reglas. Si dijera, abrir una operación si el cierre anterior > la apertura actual, mantener al menos 1 barra y cerrarla si el cierre anterior > la apertura actual, entonces está bien, esto tiene sentido.
mikeyc
hace 8 años #135658
Busca en el archivo mq4 closePositionAtMarket()
Añada la línea
si(OrderOpenTime() >= Tiempo[0]) devolver; // ¡Nueva línea de código! Salir si la orden se acaba de abrir
Donde lo he mostrado.
geektrader
hace 8 años #135660
Sí, entiendo perfectamente lo que quieres decir, pero eso equivale a una regla extra de "mantener la operación al menos 1 barra antes de salir", que no es una regla en SQ para esa estrategia como dices y por lo tanto es incorrecta LOGICAMENTE. Seguramente tu arreglo hace lo que tu quieres que haga, lo entiendo, pero logicamente sigue sin ser correcto. Si usted tiene las mismas reglas para abrir y cerrar aplicando al mismo tiempo, para traducir la lógica de SQ correctamente a MT4, la orden DEBE ser abierta y cerrada dentro de 2 ticks si se expone al mercado real. Claro, SI añades la regla extra de "mantener al menos 1 barra", entonces tu solución es correcta, pero como esa regla no está en la estrategia original en SQ, no es correcto hacerlo así en MT4. Sólo digo, es un problema de lógica y SQ actúa correctamente aquí, no es un error realmente, sino exactamente cómo tales reglas (sin la regla extra "mantener la operación al menos 1 barra") actuarían en el comercio en vivo.
mikeyc
hace 8 años #135663
Sólo estoy proponiendo una solución para hacer que MT4 se comporte como lo hace SQ. Nadie tiene que hacer esto, pero si quieren que el comercio en vivo para que coincida con SQ, esto es lo que se necesita.
Gaudio Fx
hace 8 años #135664
Busca en el archivo mq4 closePositionAtMarket()
Añada la línea
if(OrderOpenTime() >= Time[0]) return; // ¡Nueva línea de código! Salir si la orden se acaba de abrir
Donde lo he mostrado.
okok ..
si quiero esto en "o" lógico y no en "si", ¿cambió "si" por "o"?
Ej: or(OrderOpenTime() >= Time[0]) return; // ¡Nueva línea de código! Salir si la orden se acaba de abrir
geektrader
hace 8 años #135665
Sólo estoy proponiendo una solución para hacer que MT4 se comporte como lo hace SQ. Nadie tiene que hacer esto, pero si quieren que el comercio en vivo para que coincida con SQ, esto es lo que se necesita.
Sí, con datos de tick backtesting sin embargo, SQ abre y cierra la orden dentro de 2 ticks, así, al igual que MT4 hace.