Estrategia de trading inteligente con stop loss dinámico RSI

RSI SMA ATR
Fecha de creación: 2024-11-12 11:39:06 Última modificación: 2024-11-12 11:39:06
Copiar: 2 Número de Visitas: 503
1
Seguir
1617
Seguidores

Estrategia de trading inteligente con stop loss dinámico RSI

Descripción general

La estrategia es un sistema de negociación de stop loss dinámico basado en el indicador RSI, que combina el promedio SMA y el indicador de amplitud de onda ATR para optimizar las decisiones de negociación. La estrategia utiliza un sistema de paradas en varios niveles para maximizar los beneficios mediante una posición plana piramidal, mientras que la estrategia utiliza stop loss dinámico ATR para controlar el riesgo. La estrategia es altamente adaptable y puede ajustar automáticamente los parámetros de negociación según las fluctuaciones del mercado.

Principio de estrategia

La estrategia se basa principalmente en el RSI oversold range ((RSI<30) como señal de apertura de posición, y requiere que el precio esté por encima de la línea media de 200 días para asegurarse de estar en una tendencia alcista. El sistema utiliza un triple objetivo de parada ((5%, 10%, 15%) y combina un stop loss ATR dinámico). En concreto:

  1. Condiciones de entrada: RSI por debajo de 30 y el precio por encima de SMA200
  2. Administración de posiciones: 75% de los fondos utilizados en una sola apertura de posición
  3. Ajuste de stop loss: Stop loss dinámico basado en el 1.5x ATR
  4. Estrategia de paradas: establezca tres paradas en el 5%, 10% y 15% respectivamente, y elimine las posiciones por lotes en proporciones del 33%, 66% y 100%

Ventajas estratégicas

  1. Gestión de riesgos dinámica: adaptarse a las fluctuaciones del mercado a través de ATR
  2. La interrupción de la matanza por lotes: reducir la interferencia emocional y aumentar la probabilidad de ganancias
  3. Confirmación de la tendencia: filtración de señales falsas con línea uniforme
  4. Gestión de fondos: control de posiciones porcentual para adaptarse a diferentes tamaños de cuenta
  5. Optimización de comisiones: Costos de transacción más cercanos a las transacciones reales

Riesgo estratégico

  1. El retraso en la línea media puede causar retrasos en la entrada
  2. El RSI sobrevendido no necesariamente significa una inversión
  3. Las grandes posiciones podrían provocar un retiro mayor
  4. Los costos de las transacciones pueden aumentar con el aumento de las paradas de lotes. Se recomienda administrar estos riesgos ajustando los parámetros y agregando las condiciones de filtración.

Dirección de optimización de la estrategia

  1. Señal de confirmación de aumento de volumen
  2. Presentación del indicador de fuerza de tendencia
  3. Optimización de la distribución de la proporción de retención
  4. Añadir un filtro de ciclo de tiempo
  5. Considere la posibilidad de incorporar gestión de posiciones que se adapte a la volatilidad

Resumir

La estrategia, combinada con indicadores técnicos y gestión de riesgos dinámica, construye un sistema de negociación relativamente completo. Su ventaja es que es altamente adaptable y controla el riesgo, pero aún así necesita una optimización de los parámetros en función de las condiciones reales del mercado. La estrategia es adecuada para inversores a medio y largo plazo y puede ser un buen punto de partida para la negociación sistematizada.

Código Fuente de la Estrategia
/*backtest
start: 2019-12-23 08:00:00
end: 2024-11-11 00: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