Estrategia de negociación de retroceso de RSI y Fibonacci

El autor:¿ Qué pasa?, Fecha: 2023-12-27 16:49:52
Las etiquetas:

img

Resumen general

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.

Principio de la estrategia

Los principios principales de esta estrategia son los siguientes:

  1. 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;

  2. 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;

  3. 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;

  4. 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.

Análisis de ventajas

En comparación con el uso de RSI o Fibonacci solo, esta estrategia combinada tiene las siguientes ventajas:

  1. El doble filtrado de indicadores puede reducir las señales falsas y mejorar la calidad de la señal;

  2. La negociación en los niveles de retroceso de Fibonacci es una técnica clásica de análisis técnico;

  3. Con stop loss y take profit en el ritmo, la pérdida máxima por operación se puede controlar de manera efectiva;

  4. Los parámetros se pueden optimizar para diferentes períodos y productos.

Análisis de riesgos

También hay algunos riesgos a tener en cuenta para esta estrategia:

  1. La probabilidad de una reversión en los niveles clave no es del 100%, debe combinarse con la acción del precio;

  2. 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;

  3. La configuración de stop loss suelta puede aumentar las pérdidas;

  4. 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.

Direcciones de optimización

Las áreas para nuevas optimizaciones incluyen:

  1. Añadir un indicador de volumen para evitar fallas con un volumen bajo;

  2. Considere las bandas de Bollinger para señales de rupturas de bandas;

  3. Construir modelos de aprendizaje automático para detectar automáticamente oportunidades comerciales de alta calidad;

  4. Utilice algoritmos genéticos para ajustar los parámetros automáticos y ajustar los niveles de stop loss/profit.

Resumen de las actividades

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))

Más.