Hola!
Estoy intentando hacer algo bastante simple, que imagino ya estará explicado por aquí, pero no lo encuentro. A ver si alguien me puede ayudar:
La idea es comprobar el resultado de, con un objetivo de 1-1, entrar al mercado cuando se produce una sobreventa, pero con una orden ‘STOP LIMIT’, sólo si al día siguiente a la señal de sobreventa el precio supera el máximo del día anterior (con un pequeño margen, p.ej. del 0.2%).
El stop también lo colocaría en función de la vela que da la señal, bajo su mínimo (con un margen también del 0.2 %).
Sólo encuentro la posibilidad de entrar con una orden a mercado o al cierre del día siguiente. No sé si es una limitación del software, o tiene relación con que sólo tengo datos a fin de día…
Muchas gracias de antemano
Creo que este pedacito de código puede hacer el trabajo que desea. La prueba de sobreventa sólo se realiza si el RSI está por debajo de la zona de nivel 30, no si está saliendo de este nivel (cruce).
defparam cumulateorders=false
myrsi = rsi[14]
if myrsi<30 and not longonmarket then
priceopen = high+((high/100)*0.002)
stoploss = low-((low/100)*0.002)
BUY 1 SHARE AT priceopen STOP
endif
SELLSHORT AT close-stoploss STOP
Qué velocidad! Muchas gracias por la pronta respuesta (ahora tengo que probar si funciona en mi plataforma, en diario y sin ‘tiempo real’…)
No sé qué ocurriría si abriera con un gap (la orden que le doy al broker es en realidad stop-limit, de manera que si abre con un gap la orden se ejecuta si el precio de apertura está entre los dos valores). ¿Se puede incluir esta opción, de manera que se ejecute si sobrepasa el máximo en un 0.2%, como está, pero siempre que no haya abierto con un gap superior a un 1%?
Muchas gracias por su asistencia
Lo siento, pero esto no es posible, porque si el precio ha saltado sobre el nivel de precios donde el trade debería haber sido abierto, ya ha sucedido!
Ok, entiendo que si abre con gap la compra se realizaría siempre al precio del máximo anterior más el 0.2%, verdad? No se correspondería al 100% con lo que quiero simular, pero me puede servir para hacerme una idea aproximada.
Para las salidas, quiero que simule un 1-1, es decir que tenga un profit = stop loss. Podría valer algo así?
riesgo=(priceopen-stoploss)
SET TARGET $PROFIT riesgo
SET STOP $LOSS riesgo
No, porque estás calculando el stoploss y takeprofit como distancia de precio, no dinero. Por lo tanto, la instrucción exacta que se utilizará sería la siguiente:
SET TARGET PROFIT riesgo
SET STOP LOSS riesgo
Hola, Nicolas
Finalmente, con vuestra ayuda (gracias!!) he llegado a un código que parece hacer lo que estaba intentando. Los valores para la entrada y el stop (encima y debajo de la vela donde se produce la señal) podrían ser parametrizados en función de la volatilidad del activo.
He utilizado tus correcciones y parte de un código de Adolfo para calcular las posiciones (manera fantástica de calcular el número de acciones o contratos).
Lo único que me queda por resolver es conseguir que no se active la señal de BUY STOP si abre con un GAP muy grande, pero por lo que te he entendido no es posible. Si encuentro la manera, lo compartiré en este hilo.
Copio el resultado hasta ahora, por si a alguien le sirve para algo.
defparam cumulateorders=false
REM ######################
REM ## MONEY MANAGEMENT ##
REM ######################
Capital = 3500
Risk = 1
REM Calculo nº de acciones
equity = Capital + StrategyProfit
maxrisk = round(equity*(Risk/100))
riesgo=(priceup-pricedown)
REM SEÑAL
myrsi = rsi[14]
c1= myrsi<30
if c1 then
priceup = high+((high-low)*(15/100))
pricedown = low-((high-low)*(8/100))
riesgo=(priceup-pricedown)
PositionSize = abs(round(maxrisk/riesgo))
endif
if c1 and not longonmarket then
BUY PositionSize SHARES AT priceup STOP
endif
SET TARGET PROFIT riesgo
SET STOP LOSS riesgo