Estrategia cuantitativa elástica de sobreventa RSI con stop loss dinámico ATR

RSI SMA ATR TP SL
Fecha de creación: 2024-11-29 16:18:55 Última modificación: 2024-11-29 16:18:55
Copiar: 0 Número de Visitas: 453
1
Seguir
1617
Seguidores

Estrategia cuantitativa elástica de sobreventa RSI con stop loss dinámico ATR

Descripción general

La estrategia es un sistema de trading cuantitativo basado en señales de sobreventa RSI y paradas ATR dinámicas. La estrategia utiliza datos a nivel de línea diaria, combina la señal de sobreventa del RSI con un filtro de tendencia de la línea media diaria de 200 para capturar oportunidades de rebote cuando el mercado está sobrevendido.

Principio de estrategia

La lógica central de la estrategia incluye los siguientes elementos clave:

  1. Señales de entrada: cuando el RSI ((5) está por debajo del nivel de sobreventa de 30 y el precio está por encima de la línea media de 200 días, el sistema emite una señal de más.
  2. Método de detención de pérdidas: doble mecanismo de detención de pérdidas dinámicas de 1,5 veces el ATR (20) y un 25% de detención fija.
  3. Objetivos de ganancias: se establecen tres objetivos de 5%, 10% y 15%, respectivamente, para reducir la posición en el 33%, 66% y 100% al alcanzar el objetivo.
  4. Administración de posiciones: Se recomienda el uso del 59.13% de las posiciones calculadas con el criterio de Kelly, o el uso conservador del 75% de las posiciones para operar.

Ventajas estratégicas

  1. Confirmación de tendencias dobles: mejora la probabilidad de éxito de las operaciones mediante la verificación doble de tendencias de sobreventa y de línea media en el RSI.
  2. Control de riesgo flexible: el stop ATR dinámico puede adaptarse a las fluctuaciones del mercado y el stop fijo ofrece la última línea de defensa.
  3. Gestión inteligente de ganancias: el triple objetivo de las posiciones se combina con la reducción por etapas, lo que permite bloquear parte de las ganancias y no perderse el mercado.
  4. Ciencias de la Gestión de Fondos: Optimización de posiciones con el criterio de Kelly, logrando un equilibrio entre riesgo y ganancias.

Riesgo estratégico

  1. Dependencia de la tendencia: la estrategia puede desencadenar pérdidas en mercados convulsivos. Recomendación: Se puede añadir un indicador de vibración para filtrar las señales falsas.

  2. El alto margen de pérdidas: un alto margen de pérdidas fijo del 25% puede causar una pérdida excesiva en una sola operación. Recomendación: Ajuste el porcentaje de pérdidas según la capacidad de asunción del riesgo de cada persona.

  3. Riesgo de retirada: las ganancias por etapas pueden ser reducidas prematuramente en un contexto de fuerte crecimiento. Recomendación: Puede ajustar dinámicamente los objetivos de ganancias o mantener algunas posiciones para seguir la tendencia.

Dirección de optimización de la estrategia

  1. Optimización de señal:
  • Acompañamiento de la confirmación de la entrega
  • Combinado con indicadores de tendencia como el MACD
  • Introducción de filtros de volatilidad
  1. Optimización de pérdidas:
  • Realización de la proporción de pérdidas dinámicas
  • Aumentar el tiempo de espera
  • Añadir un filtro de ganancias y pérdidas
  1. Optimización de las ganancias:
  • Punto de destino basado en ATR
  • Implementación de un bloqueo de seguimiento
  • Optimización de las tasas de amortización

Resumir

La estrategia construye un sistema de negociación completo mediante la combinación de las señales de sobreventa de RSI y la filtración de tendencias de línea media, junto con los objetivos dinámicos de ATR para detener y triplicar los beneficios. La estrategia tiene la ventaja de que el control de riesgos es flexible y la administración de ganancias es razonable, pero aún así requiere ajustes optimizados en función de las condiciones reales del mercado y las preferencias de riesgo personales.

Código Fuente de la Estrategia
/*backtest
start: 2019-12-23 08:00:00
end: 2024-11-27 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This work is licensed under a Attribution-NonCommercial-ShareAlike 4.0 International (CC BY-NC-SA/4.0) https://creativecommons.org/licenses/by-nc-sa/4.0/
// © wielkieef

//@version=5
strategy("Simple RSI stock Strategy [1D] ", overlay=true, pyramiding=1, initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=75, calc_on_order_fills=false, slippage=0, commission_type=strategy.commission.percent, commission_value=0.03)

// Rsi
oversoldLevel = input(30, title="Oversold Level")
overboughtLevel = input(70, title="Overbought Level")
rsi = ta.rsi(close, 5)
rsi_overbought = rsi > overboughtLevel  
rsi_oversold = rsi < oversoldLevel

// Sma 200
lenghtSMA = input(200, title = "SMA lenght")
sma200 = ta.sma(close, lenghtSMA)

// ATR stop-loss
atrLength = input.int(20, title="ATR Length")
atrMultiplier = input.float(1.5, title="ATR Multiplier")
atrValue = ta.atr(atrLength)
var float long_stop_level = na
var float short_stop_level = na
var float tp1_level = na
var float tp2_level = na
var float tp3_level = na

// Strategy entry
long = (rsi_oversold ) and close > sma200 

// Take Profit levels
tp_1 = input.float(5.0, "TP 1", minval=0.1, step=0.1)
tp_2 = input.float(10.0, "TP 2", minval=0.2, step=0.1)
tp_3 = input.float(15.0, "TP 3", minval=0.3, step=0.1)

if long
    strategy.entry('Long', strategy.long)
    long_stop_level := close - atrMultiplier * atrValue
    tp1_level := strategy.position_avg_price * (1 + tp_1 / 100)
    tp2_level := strategy.position_avg_price * (1 + tp_2 / 100)
    tp3_level := strategy.position_avg_price * (1 + tp_3 / 100)

// basic SL - this code is from author RafaelZioni, modified by wielkieef
sl = input.float(25.0, 'Basic Stop Loss %', step=0.1)
per(procent) =>
    strategy.position_size != 0 ? math.round(procent / 100 * strategy.position_avg_price / syminfo.mintick) : float(na)

// ATR SL
if (strategy.position_size > 0 and (close <= long_stop_level))
    strategy.close("Long")
    tp1_level := na
    tp2_level := na
    tp3_level := na
plot(long_stop_level, color=color.orange, linewidth=2, title="Long Stop Loss")

// TP levels
if (strategy.position_size > 0)
    if (not na(tp1_level) and close >= tp1_level)
        tp1_level := na
    if (not na(tp2_level) and close >= tp2_level)
        tp2_level := na
    if (not na(tp3_level) and close >= tp3_level)
        tp3_level := na

plot(strategy.position_size > 0 and not na(tp1_level) ? tp1_level : na, color=color.gray, style=plot.style_circles , linewidth=1, title="Take Profit 1")
plot(strategy.position_size > 0 and not na(tp2_level) ? tp2_level : na, color=color.gray, style=plot.style_circles , linewidth=1, title="Take Profit 2")
plot(strategy.position_size > 0 and not na(tp3_level) ? tp3_level : na, color=color.gray, style=plot.style_circles , linewidth=1, title="Take Profit 3")

// Strategy exit points for Take Profits
strategy.exit('TP 1', from_entry="Long", qty_percent=33, profit=per(tp_1), loss=per(sl))
strategy.exit('TP 2', from_entry="Long", qty_percent=66, profit=per(tp_2), loss=per(sl))
strategy.exit('TP 3', from_entry="Long", qty_percent=100, profit=per(tp_3), loss=per(sl))

// by wielkieef