Este artículo describe principalmente una estrategia de negociación que combina el índice de fuerza relativa (RSI) y los niveles de retroceso de Fibonacci.
Los principios principales de esta estrategia son los siguientes:
utilizar los datos de precios durante un determinado período (por ejemplo, 200 bares) para calcular la mediana del precio, la desviación estándar y los niveles clave de retroceso de Fibonacci (por ejemplo, 0,764) para ese período;
Cuando el precio se acerque a los niveles superiores o inferiores de retroceso, utilizar el indicador RSI para determinar si existe una condición de sobrecompra o sobreventa alrededor de esos niveles;
Si el indicador RSI muestra señales de sobrecompra o sobreventa, se generarán señales largas o cortas alrededor de los niveles de retroceso;
Establecer un stop loss y obtener ganancias para cerrar posiciones cuando el precio excede los niveles preestablecidos o se activa el stop loss.
Lo anterior es el flujo de trabajo básico para identificar oportunidades comerciales en esta estrategia.
En comparación con el uso de RSI o Fibonacci solo, esta estrategia combinada tiene las siguientes ventajas:
El doble filtrado de indicadores puede reducir las señales falsas y mejorar la calidad de la señal;
La negociación en los niveles de retroceso de Fibonacci es una técnica clásica de análisis técnico;
Con stop loss y take profit en el ritmo, la pérdida máxima por operación se puede controlar de manera efectiva;
Los parámetros se pueden optimizar para diferentes períodos y productos.
También hay algunos riesgos a tener en cuenta para esta estrategia:
La probabilidad de una reversión en los niveles clave no es del 100%, debe combinarse con la acción del precio;
RSI de período único puede generar señales falsas de rebotes de gato muerto, considerar la validación de marcos de tiempo múltiples;
La configuración de stop loss suelta puede aumentar las pérdidas;
Las paradas pueden ejecutarse durante las fluctuaciones de precios volátiles.
Estos riesgos se pueden gestionar mediante el ajuste de parámetros, la optimización de las combinaciones de indicadores, etc.
Las áreas para nuevas optimizaciones incluyen:
Añadir un indicador de volumen para evitar fallas con un volumen bajo;
Considere las bandas de Bollinger para señales de rupturas de bandas;
Construir modelos de aprendizaje automático para detectar automáticamente oportunidades comerciales de alta calidad;
Utilice algoritmos genéticos para ajustar los parámetros automáticos y ajustar los niveles de stop loss/profit.
Este artículo describe en detalle una estrategia de trading cuantitativa que combina el RSI y el análisis de retroceso de Fibonacci. Al mezclar el análisis de indicadores duales y las estrategias técnicas clásicas, la estrategia mejora la calidad de la señal bajo riesgos gestionados.
/*backtest start: 2023-11-26 00:00:00 end: 2023-12-26 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 strategy(title="Gab Fib + RSI", overlay=true, default_qty_type=strategy.cash, default_qty_value=100000, initial_capital=1000, currency=currency.USD, commission_type=strategy.commission.cash_per_order, commission_value=4) // Inputs timeFilter = year >= 2000 // Stop Loss stop_loss = input(title="SL in % of Instrum. i.e 1.5%=150pips", minval=0, step=0.1, defval=1.5) /100 // RSI Inputs len = input(title="[RSI] Length", minval=0, step=1, defval=14) overSold = input(title="[RSI] Over Sold %", defval=30) overBought = input(title="[RSI] Over Bought %", defval=70) // Fibonacci Levels length = input(title="[Fibonacci] Length", defval=200, minval=1) src = input(hlc3, title="[Fibonacci] Source") mult = input(title="[Fibonacci] Multiplier", defval=3.0, minval=0.001, maxval=50) level = input(title="[Fibonacci] Level", defval=764) // Calculate Fibonacci basis = vwma(src, length) dev = mult * stdev(src, length) fu764= basis + (0.001*level*dev) fu1= basis + (1*dev) fd764= basis - (0.001*level*dev) fd1= basis - (1*dev) // Calculate RSI vrsi = rsi(close, len) // Calculate the Targets targetUp = fd764 targetDown = fu764 // Actual Targets bought = strategy.position_size[0] > strategy.position_size[1] exit_long = valuewhen(bought, targetUp, 0) sold = strategy.position_size[0] < strategy.position_size[1] exit_short = valuewhen(sold, targetDown, 0) // Calculate Stop Losses sl_long = close * (1-stop_loss) sl_short = close * (1+stop_loss) // Conditions to Open Trades openLong = low < fd1 and crossover(vrsi[1], overSold) openShort = high > fu1 and crossunder(vrsi[1], overBought) // Conditions to Close Trades closeLong = high > exit_long or sl_long closeShort = low < exit_short or sl_short //Rounding to MinTick value roundtargetUp = round_to_mintick(targetUp) roundtargetDown = round_to_mintick(targetDown) roundsllong = round_to_mintick(sl_long) roundslshort = round_to_mintick(sl_short) // Plots plot(basis, color=color.blue, linewidth=2, title="[Fibonacci Level] Basis") plot(fu764, color=color.white, linewidth=1, title="[Fibonacci Level] Short Target") plot(fu1, color=color.red, linewidth=2, title="[Fibonacci Level] Top") plot(fd764, color=color.white, linewidth=1, title="[Fibonacci Level] Long Target") plot(fd1, color=color.green, linewidth=2, title="[Fibonacci Level] Bottom") // Strategy Orders if timeFilter // Entry Orders strategy.entry(id="buy", long=true, when=openLong and high < targetUp, limit=close, alert_message="buy,"+tostring(syminfo.ticker)+",tp="+tostring(roundtargetUp)+",sl="+tostring(roundsllong)) strategy.entry(id="sell", long=false, when=openShort and low > targetDown, limit=close, alert_message="sell,"+tostring(syminfo.ticker)+",tp="+tostring(roundtargetDown)+",sl="+tostring(roundslshort)) // Exit Orders strategy.exit(id="closelong", when=closeLong and strategy.position_size > 0, limit=exit_long, stop=sl_long, alert_message="closelong,"+tostring(syminfo.ticker)) strategy.exit(id="closeshort", when=closeShort and strategy.position_size < 0, limit=exit_short, stop=sl_short, alert_message="closeshort,"+tostring(syminfo.ticker))