La estrategia de ruptura dual del RSI es una estrategia de trading algorítmica que identifica los puntos de reversión del precio utilizando el indicador RSI.
Esta estrategia se basa principalmente en el indicador RSI para juzgar la condición del mercado. El indicador RSI se calcula en función de los cambios en los precios de cierre durante un cierto período, reflejando el impulso de compra y venta de la acción. Cuando el RSI cruza por encima del umbral superior preestablecido (default 75), indica que la acción ha entrado en la zona de sobrecompra. Cuando el RSI cae por debajo del umbral inferior preestablecido (default 25), indica que la acción ha entrado en la zona de sobreventa.
Las reglas de la sentencia son:
Su lógica de negociación es simple y clara, con ajustes de parámetros de referencia razonables, un gran espacio de configuración y es adecuada para capturar tendencias más grandes en el mercado.
Las ventajas de esta estrategia incluyen:
En general, con ajustes razonables de parámetros de referencia, una implementación sencilla y la capacidad de determinar efectivamente las reversiones de precios a través del RSI, esta estrategia es adecuada para la captura de tendencias a medio y largo plazo y es fácil de comprender y utilizar como una estrategia cuantitativa.
Aunque esta estrategia es relativamente sencilla y fiable, no podemos ignorar los riesgos potenciales a los que se enfrenta:
Para controlar los riesgos, debemos prestar atención a lo siguiente:
Teniendo en cuenta que los principales riesgos a los que se enfrenta esta estrategia son los errores de valoración de la inversión y las pérdidas en mercados variados, podemos optimizar a partir de los siguientes aspectos:
En resumen, la doble estrategia de ruptura del RSI es una estrategia cuantitativa simple y práctica. Identifica las reversiones de precios a través del RSI para lograr un simple seguimiento de tendencia. Aunque existen ciertos riesgos de error de juicio, las optimizaciones como la sintonización de parámetros, el filtrado de señales pueden ayudar a mitigar esto y permitirle desempeñar un papel importante en la captura de tendencias a mediano y largo plazo. Su lógica es sencilla, lo que lo hace adecuado para que los principiantes puedan hacer referencia y aprender.
/*backtest start: 2023-12-19 00:00:00 end: 2023-12-26 00:00:00 period: 3m basePeriod: 1m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 strategy("RSI Algo", overlay=true) // Calculate start/end date and time condition DST = 1 //day light saving for usa //--- Europe London = iff(DST==0,"0000-0900","0100-1000") //--- America NewYork = iff(DST==0,"0400-1500","0500-1600") //--- Pacific Sydney = iff(DST==0,"1300-2200","1400-2300") //--- Asia Tokyo = iff(DST==0,"1500-2400","1600-0100") //-- Time In Range timeinrange(res, sess) => time(res, sess) != 0 london = timeinrange(timeframe.period, London) newyork = timeinrange(timeframe.period, NewYork) time_cond = true myPeriod = input(defval=14, type=input.integer, title="Period") myThresholdUp = input(defval=75, type=input.float, title="Upper Threshold") myThresholdDn = input(defval=25, type=input.float, title="Lower Threshold") myAlgoFlipToggle = input(defval=false, type=input.bool, title="Imverse Algorthim") myLineToggle = input(defval=true, type=input.bool, title="Show Lines") myLabelToggle = input(defval=true, type=input.bool, title="Show Labels") myRSI=rsi(close, myPeriod) buy = myAlgoFlipToggle ? falling(myRSI,1) and cross(myRSI, myThresholdDn) : rising(myRSI, 1) and cross(myRSI,myThresholdUp) //and time_cond sell = myAlgoFlipToggle ? rising(myRSI, 1) and cross(myRSI,myThresholdUp) : falling(myRSI,1) and cross(myRSI, myThresholdDn) //and time_cond myPosition = 0 myPosition := buy==1 ? 0 : sell==1 or myPosition[1]==1 ? 1 : 0 trendColor = buy ? color.red : sell ? color.green : na plot(myLineToggle ? buy and myPosition[1]==1 ? low - 0.004: sell and myPosition[1]==0 ? high + 0.004 : na : na, color=trendColor, style=plot.style_line, linewidth=4, editable=false) plotshape(myLabelToggle ? buy and myPosition[1]==1 ? low - 0.005 : na : na, style=shape.labelup, location=location.absolute, text="Buy", transp=0, textcolor = color.white, color=color.black, editable=false) plotshape(myLabelToggle ? sell and myPosition[1]==0 ? high + 0.005 : na : na, style=shape.labeldown, location=location.absolute, text="Sell", transp=0, textcolor = color.white, color=color.black, editable=false) strategy.initial_capital = 50000 //Calculate the size of the next trade balance = strategy.netprofit + strategy.initial_capital //current balance floating = strategy.openprofit //floating profit/loss risk = input(2,type=input.float,title="Risk %")/100 //risk % per trade isTwoDigit = input(false,"Is this a 2 digit pair? (JPY, XAU, XPD...") stop = input(250, title="stop loss pips") tp = input(2500, title="take profit pips") if(isTwoDigit) stop := stop/100 temp01 = balance * risk //Risk in USD temp02 = temp01/stop //Risk in lots temp03 = temp02*100000 //Convert to contracts size = 1 strategy.entry("long",1,size,when=buy and myPosition[1]==1 ) strategy.entry("short",0,size,when=sell and myPosition[1]==0) strategy.exit("exit_long","long",loss=stop, profit=tp) //Long exit (stop loss) strategy.exit("exit_short","short",loss=stop, profit=tp) //Short exit (stop loss) //strategy.close_all(when= not time_cond)