
La estrategia de ruptura del RSI bidireccional es una estrategia de negociación algorítmica que utiliza el indicador RSI para identificar el punto de inflexión del precio. Compara el indicador RSI con el valor de los altibajos establecidos para determinar si el mercado está sobrecomprando y emite una señal de negociación.
La estrategia se basa principalmente en el RSI para determinar la situación. El RSI se calcula en función de los cambios en los precios de cierre y cierre durante un período determinado, lo que refleja la tendencia de compra y venta de las acciones. Cuando el RSI supera el valor establecido de subida (el 75 por defecto), indica que las acciones entran en la zona de sobrecompra.
Las reglas de juicio estratégico:
Su lógica de negociación es simple y clara, los parámetros de referencia se establecen de manera razonable, el espacio de configuración es grande y es adecuado para capturar las tendencias más grandes en el mercado.
La estrategia tiene las siguientes ventajas:
En general, la estrategia tiene parámetros de referencia razonables, es fácil de implementar, puede determinar la reversión de precios de manera efectiva a través del indicador RSI, es adecuada para capturar grandes tendencias en el mercado en líneas medianas y largas, y es una estrategia cuantitativa fácil de usar.
A pesar de que la estrategia es sencilla y fiable, no podemos ignorar los riesgos potenciales:
Para controlar los riesgos, debemos tener en cuenta lo siguiente:
Teniendo en cuenta que la estrategia se enfrenta principalmente al riesgo de errores de reversión y pérdidas en el escenario de la conmoción, podemos optimizar en los siguientes aspectos:
La estrategia de ruptura de RSI bidireccional en general es una estrategia de cuantificación simple y práctica. Se trata de una estrategia de seguimiento de tendencias sencilla que determina la reversión de precios a través del indicador RSI. Aunque existe un cierto riesgo de error, se puede optimizar mediante ajustes de parámetros y filtración de señales, que desempeñan un papel importante en la captura de tendencias de línea media y larga.
/*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)