La estrategia de inversión de tendencia RSI es una estrategia de trading cuantitativa basada en el índice de fuerza relativa (RSI) y el rango verdadero promedio (ATR). Ajusta dinámicamente los niveles de take profit y stop loss (TP/SL) para adaptarse a las rápidas fluctuaciones del mercado y capturar oportunidades de inversión de tendencia. La estrategia se centra en el RSI, combinado con ATR para medir la volatilidad, y construye dos bandas dinámicas adaptativas como base para la apertura y cierre de posiciones.
El núcleo de la estrategia de inversión de tendencia del RSI radica en la construcción de bandas dinámicas TP/SL. Primero, utiliza las funciones personalizadas highest_custom y lowest_custom para encontrar los precios más altos y más bajos desde el último cruce, formando la base de las bandas. Luego, calcula el RSI y ATR con una longitud especificada por el usuario y realiza los siguientes cálculos:
Aquí, el multiplicador es un factor de expansión de la banda definido por el usuario. Si el precio se rompe por encima de la banda superior, va largo; si se rompe por debajo de la banda inferior, va corto. Los colores de estas dos bandas también cambian de acuerdo con la posición del precio en relación con las bandas, por lo que es fácil de observar.
La estrategia de inversión de tendencia del RSI utiliza el RSI y el ATR para construir bandas adaptativas que pueden ajustar dinámicamente los puntos TP / SL y responder rápidamente a los cambios del mercado. La estrategia tiene una lógica clara, una amplia aplicabilidad y puede ser una poderosa herramienta para los operadores cuantitativos. Sin embargo, en el uso práctico, todavía se necesita prestar atención a la selección de parámetros y control de riesgos, y se recomienda usarla en combinación con otras señales de indicadores para mejorar el rendimiento general. La estrategia tiene más espacio para la optimización, como la adición de filtros de tendencia y la optimización de parámetros.
/*backtest start: 2023-04-22 00:00:00 end: 2024-04-27 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("RSI Trend Reversal", overlay=true, max_bars_back = 4999, calc_on_every_tick = false) //INPUTS rsi_length = input.int(title = "Lenght", defval = 8) rsi_mult = input.float(title = "Multiplier", defval = 1.5, step = .05) lookback = input.int(title = "Delay to prevent idealization", defval = 1) sltp = input.float(title = "Minimum Difference", defval = 10) src = input.source(title = "Source Input", defval = close) //PARAMETERS INITILIZATION hclose = request.security(ticker.heikinashi(syminfo.tickerid), timeframe.period, src) //FUNCTION INITILIZATION highest_custom(src, length) => x = src for i = 0 to length if src[i] > x x := src[i] x lowest_custom(src, length) => x = src for i = 0 to length if src[i] < x x := src[i] x rsilev(src, length, mult, sltp) => sl = (100 - sltp) / 100 tp = (100 + sltp) / 100 var bool crossup = na var bool crossdown = na var float dir = na dir_change = ta.change(dir) var float BearGuy = 0 BullGuy = ta.barssince(crossup or crossdown) if na(BullGuy) BearGuy += 1 else BearGuy := BullGuy var float upper = na var float lower = na rsilower = ta.rsi(src, length) rsiupper = math.abs(ta.rsi(src, length) - 100) atr = ta.atr(length) / src lower := highest_custom(math.max(highest_custom(highest_custom(src, BearGuy) * (1 - (atr + ((1 / (rsilower) * mult)))), BearGuy), src * sl), BearGuy) upper := lowest_custom(math.min(lowest_custom(lowest_custom(src, BearGuy) * (1 + (atr + ((1 / (rsiupper) * mult)))), BearGuy), src * tp), BearGuy) var float thresh = na if na(thresh) thresh := lower if na(dir) dir := 1 if crossdown dir := -1 if crossup dir := 1 if dir == 1 thresh := lower if dir == -1 thresh := upper crossup := ta.crossover(src, thresh) crossdown := ta.crossunder(src, thresh) thresh rsiclose = rsilev(hclose, rsi_length, rsi_mult, sltp) //PLOTTING var color col = color.lime if hclose > rsiclose col := color.lime if hclose < rsiclose col := color.red plot(rsiclose, linewidth = 2, color = col) //STRATEGY buy = ta.crossover(hclose, rsiclose) sell = ta.crossunder(hclose, rsiclose) if buy[lookback] strategy.entry("long", strategy.long) if sell[lookback] strategy.entry("Short", strategy.short)