Hola, soy nuevo en esto de programar un backtest, y no soy capaz de escribir un código, que sirva para comprar con el 100% del capital cuando se cumplen dos condiciones , y el 50% del capital cuando se cumple una sola condición, y lo mismo para la venta. Pongo este ejemplo: quiero estar 100% invertido cuando una acción, tiene el precio está por encima de la media simple de 200 y cuando el RSI de 14 periodos, está por encima de 60, si el RSI se coloca por debajo de 60, pero el precio sigue por encima de la media de 200, solo quiero vender el 50% de la posición. Si el RSI vuelve a estar por encima de 60, quiero estar otra vez invertido 100%. Sí por ejemplo, no se cumple ninguna de las 2 condiciones, quiero vender todo, y estar 0% invertido.
Solo he conseguido, que se cumplan estas condiciones para la venta, pero en el momento, en que se produce la primera venta del 50%, si luego el RSI vuelve a estar por encima de 60, ya no se activa ninguna orden de compra, para volver a estar invertido 100%. He probado de diferentes formas con el DEFPARAM true o false, pero no lo consigo. Este es el código que tengo metido actualmente. Muchas gracias.
//SISTEMA RSI Y MEDIA200//
DEFPARAM CumulateOrders=True
//INDICADORES UTILIZADOS//
MSIMPLE= AVERAGE [200] (close)
MiRSI= RSI [14] (close)
//CONDICIONES ENTRADA
C1 = CLOSE> MSIMPLE
C2 = MiRSI>60
//CONDICIONES SALIDA PARCIAL
C3 = MiRSI <60
// CONDICIONES SALIDA TOTAL
C4 = CLOSE <MSIMPLE
//GESTIÓN DE CAPITAL
CAPITALINICIAL = 50000
CAPITALACUMULADO = STRATEGYPROFIT + CAPITALINICIAL
numShares = floor (CAPITALACUMULADO / CLOSE)
//ORDENES ENTRADA
IF C1 AND C2 AND NOT ONMARKET THEN
BUY numShares shares AT MARKET
ENDIF
//ORDENES SALIDA
IF NOT Onmarket THEN
Vender = 1
ENDIF
//REM ORDENES DE VENTA PARCIAL
IF C3 AND Vender THEN
SELL numShares /2 SHARES AT MARKET
Vender = 0
ELSIF C4 THEN
SELL AT MARKET
ENDIF
//