Buenas tardes
Quería trasladarles 2 dudas en relación con el código de un sistema automático que estoy desarrollando para la temporalidad H1.
- La idea es que, EN EL MOMENTO en que se cumplan una serie de condiciones, se realicen las entradas y salidas, según corresponda. Sin embargo, en las pruebas que estoy realizando, las entradas y salidas las realiza en LA VELA SIGUIENTE en la que se producen las condiciones lo cual provoca que el sistema empeore bastante sus resultados. ¿Qué instrucción debo añadir en el código para que las ejecuciones se realicen EN EL MOMENTO en que se produzcan las condiciones y no en LA VELA SIGUIENTE?
- La otra duda es la siguiente: quiero incluir en el código una instrucción según la cual, en el momento en que ocurra un suceso X (por ejemplo que el precio cruce a la baja un indicador XX previamente definido), en la siguiente vela el sistema coloque un stop loss (en el caso de posiciones largas sería una venta) un tick por debajo del mínimo de la vela en la que haya ocurrido el suceso 1. ¿Cómo debería ser el código de esa parte subrayada?
Muchas gracias por adelantado y un saludo
Carlos D.
Muchas gracias por tu pronta respuesta Roberto. Te respondo:
- Ok, investigaré la instrucción MTF para ver si puedo hacer que el sistema haga el análisis en H1 pero la ejecución en M1.
- Tienes razón, no lo especificaba (disculpa). Reformulo la duda: Quiero incluir en el código una instrucción PARA CUANDO HAY UNA POSICIÓN ABIERTA según la cual, en el momento en que ocurra un suceso X (por ejemplo que el precio cruce a la baja un indicador XX previamente definido), en la siguiente vela el sistema coloque un stop loss (en el caso de posiciones largas sería una venta) un tick por debajo del mínimo de la vela en la que haya ocurrido el suceso 1. ¿Cómo debería ser el código de esa parte subrayada?
Gracias nuevamente y un saludo
Carlos D.
En el momento de la apertura, se debe determinar el precio de la entrada. Esto se puede hacer en la próxima vela (si usa MTF incluso solo 1 segundo o 1 minuto después), con esta instrucción (que debe colocarse ANTES del código de entrada al mercado):
IF (OnMarket AND Not OnMarket[1]) OR (LongOnMarket AND ShortOnMarket[1]) OR (ShortOnMarket AND LongOnMarket[1]) THEN
EntryPrice = TradePrice
ENDIF
Luego puede agregar el código del evento:
IF EventX THEN
SET STOP LOSS abs(EntryPrice - low) - 1 * PipSize
ENDIF
Muchas gracias Roberto.
Si entiendo bien el código que has enviado, lo que tú planteas es que, una vez ocurra el suceso X, se coloque un Stop Loss 1 pip por debajo del mínimo de la vela EN QUE SE ABRIÓ LA POSICIÓN. ¿Es así?
Sin embargo, lo que yo busco es colocar el stop 1 pip por debajo del mínimo de la vela EN QUE SE PRODUCE EL SUCESO X (lo cual puede suceder pasadas varias velas después de la entrada).
Por tanto creo que lo que me faltaría averiguar es cómo definir en código “el mínimo de la vela en que se produce EventX”.
Incluyo un ejemplo (tonto) para plantear la problemática:
// Definición de los parámetros del código
MED50 = Average[50](close)
// Condiciones para entrada de posiciones largas (SIN COLOCAR STOP POR EL MOMENTO): que el precio cruce al alza MED50
C1 = Close CROSSES OVER MED50
//Orden de entrada en largo
IF NOT LONGONMARKET AND C1 THEN
BUY 1 SHARE AT MARKET
ENDIF
// Condiciones para que se coloque el STOP: que el precio cruce a la baja la media de 50
EventX = Close CROSSES UNDER MED50
//Orden de colocación del stop loss (en este caso una venta) en LA SIGUIENTE VELA DONDE OCURRE EventX
//y al precio de 1 tick por debajo del mínimo de la VELA DONDE SUCEDE EventX:
IF EventX THEN
SET STOP LOSS (el mínimo de la vela en que se produce EventX) - 1 * PipSize
ENDIF
Muchas gracias nuevamente
Carlos D.
He puesto la distancia del Stop Loss del precio de entrada, si quieres ponerlo del precio actual solo tienes que usar esto:
IF EventX THEN
SET STOP LOSS abs(close - low) + 1 * PipSize
ENDIF
(en el ejemplo anterior había puesto “-” por error).
O puede usar una orden pendiente (STOP o LIMIT, según el precio actual, si es mayor o menor; coloqué STOP al azar):
IF EventX THEN
ExitPrice = low - 1 * PipSize
SELL AT ExitPrice STOP //or LIMIT
ENDIF
En este caso “-” está bien.
Recuerda que las órdenes pendientes solo duran 1 barra, por lo que en la siguiente barra debes colocarla nuevamente, de lo contrario te quedarás sin Stop Loss.