Hola comunidad, tengo el siguiente sistema:
// Condiciones de salida de posiciones cortas
// Exit on ATR
if shortonmarket and atr2 crosses under avgatr2 then
exitshort at market
SET STOP %LOSS 0.1
endif
//trailing stop function
trailingstart = 20 //trailing will start @trailinstart points profit
trailingstep = 1 //trailing step to move the “stoploss”
//reset the stoploss value
IF NOT ONMARKET THEN
newSL=0
ENDIF
//manage short positions
IF SHORTONMARKET THEN
//first move (breakeven)
IF newSL=0 AND tradeprice(3)-close>=trailingstart*pipsize THEN
newSL = tradeprice(4)-trailingstep*pipsize
ENDIF
//next moves
IF newSL>0 AND newSL-close>=trailingstep*pipsize THEN
newSL = newSL-trailingstep*pipsize
ENDIF
ENDIF
//stop order to exit the positions
IF newSL>0 THEN
EXITSHORT AT newSL STOP
ENDIF
pero tengo el problema de que no pone el stoploss, es decir, no lo ejecuta. Y no sé porqué. Alguien me puede echar una mano por favor.
Hola. Por lo que veo en las primeras líneas de código colocas el stop loss dentro de la condicion de salida por lo que no se va a ejecutar hasta que no se de la salida técnica de ATR que has puesto.
Si quieres colocar el stop loss lo puedes hacer fuera del condicional y siempre tendrás un stop loss en el nivel que tú decidas (no me meto en si lo tienes muy cerca o no).
Por otro lado tambien puedes colocar el stop loss dentro de un condicional para que se active/actualice al cumplirse las condiciones establecidas.
De acuerdo, mmm, bien, me puedes decir cómo se escriben las dos formas Iván? No quiero equivocarme otra vez, gracias
por ejemplo,
if tuscondiciones then
buy 1 contract at market
set stop %loss 5
endif
o
//tus condiciones de entrada
if xxxx then
buy 1 contract at market
endif
set stop %loss 5
o
if condicionesparaStop then
set stop %loss 5
endif
hola de nuevo Iván, no me he aclarado con la respuesta anterior. Necesito que el sistema ponga un stoploss y que éste vaya moviéndose con los parámetros del trailling que ya tengo codificados en mi sistema, y que también salga de la posición si el ATR cruza debajo de su media.
El problema está en que cuando el sistema realiza una operación no lanza el dichoso stoploss.
En estas líneas, SET STOP no se ejecuta para la operación actual porque se cerró en la línea anterior.
Por lo tanto sólo es válido para operaciones posteriores.
// Condiciones de salida de posiciones cortas
// Exit on ATR
if shortonmarket and atr2 crosses under avgatr2 then
exitshort at market
SET STOP %LOSS 0.1
endif
Mueva SET STOP a la línea después de SELLSHORT:
IF Not OnMarket AND (sma1 CROSSES UNDER sma2) THEN
SELLSHORT 1 Contract at Market
SET STOP %LOSS 0.1
ENDIF
Utilice TRADEPRICE o TRADEPRICE(1), no TRADEPRICE(3) ni TRADEPRICE(4), que también son precios de salida de operaciones anteriores.
Este es el código actualizado:
sma1 = Average[20,0](close)
sma2 = Average[50,0](close)
atr2 = AverageTrueRange[14](close)
avgatr2 = average[10,0](atr2)
IF Not OnMarket AND (sma1 CROSSES UNDER sma2) THEN
SELLSHORT 1 Contract at Market
SET STOP %LOSS 1.0
ENDIF
// Condiciones de salida de posiciones cortas
// Exit on ATR
if shortonmarket and atr2 crosses under avgatr2 then
exitshort at market
endif
//trailing stop function
trailingstart = 20 //trailing will start @trailinstart points profit
trailingstep = 1 //trailing step to move the "stoploss"
//reset the stoploss value
IF NOT ONMARKET THEN
newSL=0
ENDIF
//manage short positions
IF SHORTONMARKET THEN
//first move (breakeven)
IF newSL=0 AND tradeprice-close>=trailingstart*pipsize THEN
newSL = tradeprice(1)-trailingstep*pipsize
ENDIF
//next moves
IF newSL>0 AND newSL-close>=trailingstep*pipsize THEN
newSL = newSL-trailingstep*pipsize
ENDIF
ENDIF
//stop order to exit the positions
IF newSL>0 THEN
EXITSHORT AT newSL STOP
ENDIF
graphonprice Tradeprice * 1.001 AS "Stop Loss" coloured("Red")
graphonprice NewSL AS "Trailing Stop" coloured("Blue")
Añadí, al final, dos líneas con GRAPHONPRICE para que podáis ver en el gráfico el Stop Loss 0,1% (en Rojo) y el Trailing Stop (en Azul).