Buenos días,
soy nuevo en el foro y en backtests de prorealtime y os quería pedir ayuda. Tengo un sistema ultra sencillo que quiero backtestear.
Entra largo cuando tanto la linea MACD como el histograma son positivos.
Sale de la posición cuando el histograma es negativo. Este es el código:
defparam cumulateorders= false
//indicadores
Mimacd= MACDline[10,20,7](close)
MiHisto= MACD[10,20,7](close)
capital= 10000 + STRATEGYPROFIT
//entrada cuando tanto la linea MACD como el histograma son positivos
IF NOT longonmarket AND Mimacd>0 and MiHisto>0 THEN
contratos = capital/close
BUY contratos SHARES AT MARKET
ENDIF
//salida cuando el histograma es negativo
if longonmarket and MiHisto<0 THEN
sell contratos SHARES AT MARKET
ENDIF
Pero estoy intentado añadir que la salida de la posición no sea automática sino que, cuando se dé la condición (histograma negativo), se active un stoploss un 1% por debajo del mínimo de esa barra.
En caso de que el histograma volviera a ser positivo, el stoploss se desactiva.
He creado una variable onceSLActive que con 1 indica stoploss activado y con 0 indica stoploss desactivado.
defparam cumulateorders= false
//indicadores
Mimacd= MACDline[10,20,7](close)
MiHisto= MACD[10,20,7](close)
capital= 10000 + STRATEGYPROFIT
// Variables de control
onceSLActive = 0
stopPrice = 0.0
//condicion de entrada
IF NOT longonmarket AND Mimacd>0 and MiHisto>0 THEN
contratos = capital/close
onceSLActive = 0
BUY contratos SHARES AT MARKET
ENDIF
//activacion del stoploss
if longonmarket and onceSLActive = 0 and MiHisto<0 THEN
onceSLActive = 1
stopPrice = close * 0.99
ENDIF
//desactivacion del stoploss porque el histograma vuelve a ser positivo
if longonmarket and onceSLActive = 1 and MiHisto>0 THEN
onceSLActive = 0
ENDIF
// Ejecución del stop loss si el precio cae por debajo del stopPrice
IF onceSLActive = 1 AND close <= stopPrice THEN
sell contratos SHARES AT MARKET
onceSLActive = 0
ENDIF
el problema es que no me funciona. Lo unico que hace el backtest es hacer una compra al inicio del periodo y una venta al final.
Si fuerais tan amables de indicarme el error.
Muchas gracias.
Buenas. Esto creo que cumple con lo que buscas:
defparam cumulateorders= false
//indicadores
Mimacd= MACDline[10,20,7](close)
MiHisto= MACD[10,20,7](close)
capital= 10000 + STRATEGYPROFIT
//entrada cuando tanto la linea MACD como el histograma son positivos
IF NOT longonmarket AND Mimacd>0 and MiHisto>0 THEN
contratos = capital/close
BUY contratos SHARES AT MARKET
ENDIF
if longonmarket and MiHisto crosses under 0 THEN
// ajuste del stop a 1% por debajo del minimo
stoploss = 0.99*low
elsif longonmarket and MiHisto crosses over 0 then
// quitamos el stop loss (para largos)
stoploss = 0
elsif not onmarket then
// aseguramos que no haya stop loss
stoploss = 0
ENDIF
set stop price stoploss
// representación del stop loss en el grafico
graphonprice stoploss
Respecto a lo anterior, ignórelo… Puedo verlo en el código disponible para Algos, etc.
¡Estos nervios por los aranceles me están afectando y me están quitando el sueño! 😉