Hola.
En el siguiente código, cuya entrada es con un cruce de medias, se intenta un stop loss dinámico con el mínimo de las 60 barras previas, en caso de largos, o el máximo cuando se está corto.
Pero el precio supera la orden stop y no se ejecuta dicha orden. Por ejemplo, en Wall Street Cash (1€) en velas de 1 minuto, hay una entrada en corto el 29 de abril a las 20:15 que debería cerrar a las 20:43 cuando el precio de stop vale slb = 24700,20 y el máximo es high=24717,7. Pero no sale. Y así en otras entradas. Y no encuentro la causa. Agradezco ayudas:
// Wall Street Cash 1€
// 1 minuto
//Condiciones de entrada
MMr = Average[50] (close)
MMl = Average[200] (close)
PositionSize = 1
IF MMr CROSSES OVER MMl AND NOT OnMarket THEN
BUY PositionSize CONTRACTS AT market
ENDIF
IF MMr CROSSES UNDER MMl AND NOT OnMarket THEN
SELLSHORT PositionSize CONTRACTS AT market
ENDIF
ONCE barras = 60
//StopLoss dinámico para largos
ONCE sla = 0
IF LongOnMarket THEN
slaPrv = lowest[barras] (low)
IF slaPrv > sla THEN
sla = slaPrv
SELL AT sla STOP
ENDIF
ENDIF
//StopLoss dinámico para cortos
ONCE slb = 100000
IF ShortOnMarket THEN
slbPrv = highest[barras] (high)
IF slbPrv < slb THEN
slb = slbPrv
EXITSHORT AT slb STOP
ENDIF
ENDIF
IF NOT OnMarket THEN
sla = 0
slb = 100000
ENDIF
Mueva la línea 23 a una nueva línea entre 24 y 25.
Mueva la línea 33 a una nueva línea entre 34 y 35.
Ahora la salida STOP se realiza solo si SLA y SLB son más bajos o más grandes que el máximo o mínimo, mientras que SIEMPRE debe realizarse cuando una posición está abierta.
Le señalo que las líneas 19 y 29 serán verdaderas solo en la barra siguiente, por lo que para la primera barra no tendrá la parada de protección.