Estrategia de scalping basada en el indicador RSI con stop loss de seguimiento

El autor:¿ Qué pasa?, Fecha: 2023-12-12 15:46:49
Las etiquetas:

img

Resumen general

Esta estrategia se llama Scalping Strategy basada en el Indicador RSI con Trailing Stop Loss. Utiliza el indicador RSI para determinar las condiciones de sobrecompra y sobreventa, se combina con promedios móviles (MA) rápidos y lentos para determinar la dirección de la tendencia y establece las condiciones de entrada. También utiliza el mecanismo de stop loss porcentual para salir de las posiciones.

Estrategia lógica

Las señales de entrada de esta estrategia se determinan principalmente por el indicador RSI y los cruces MA. El parámetro RSI se establece en 2 períodos para capturar rápidamente situaciones de sobrecompra y sobreventa para oportunidades de reversión. El MA rápido y el MA lento se establecen en 50 y 200 períodos respectivamente para identificar la dirección de la tendencia.

En el caso de las operaciones de mercado abierto, el valor de las operaciones de mercado abierto es el valor de las operaciones de mercado abierto (por ejemplo, las operaciones de mercado abierto) y el valor de las operaciones de mercado abierto (por ejemplo, las operaciones de mercado abierto). Entrada corta: el MA rápido cruza por debajo del MA lento, el precio está por debajo del MA lento y el RSI está por encima del nivel de sobrecompra (default 90%).

Además, hay un filtro de volatilidad opcional en la estrategia. Cálcula la diferencia entre las pendientes de los MAs rápidos y lentos. Las posiciones solo se abrirán cuando la diferencia exceda un umbral. El propósito es evitar abrir posiciones cuando no hay una dirección clara durante la fluctuación del mercado.

En el lado de la salida, la estrategia utiliza el porcentaje de pérdida de parada de seguimiento. Basado en el porcentaje de entrada, calcula el precio de la pérdida de parada combinado con el tamaño del tick, para ajustar dinámicamente la pérdida de parada.

Análisis de ventajas

Las principales ventajas de esta estrategia son las siguientes:

  1. El RSI establecido en 2 períodos puede capturar rápidamente situaciones de sobrecompra y sobreventa para oportunidades de reversión.
  2. Los MAs rápidos y lentos pueden identificar eficazmente la dirección de la tendencia y los puntos de inflexión.
  3. La combinación de indicadores duales RSI y MA evita las fallas.
  4. El filtro de volatilidad evita abrir posiciones cuando no hay una dirección clara durante la fluctuación.
  5. El porcentaje de pérdidas de detención de seguimiento puede ajustar el nivel de pérdidas de detención en función de la volatilidad del mercado para controlar eficazmente los riesgos.

Análisis de riesgos

Esta estrategia también presenta algunos riesgos:

  1. Los indicadores RSI y MA tienen cierto efecto de retraso, pueden perder algunas oportunidades de reversión.
  2. Es probable que el porcentaje de pérdidas de detención se desencadene en las bajas de volumen.
  3. Las importantes fluctuaciones de los precios a la vista y antes del mercado no se manejan de manera eficaz.

Las direcciones de optimización para los riesgos son:

  1. Ajustar el parámetro RSI a 1 período para reducir el efecto de retraso.
  2. Optimizar los períodos de admisión en función de las características del símbolo.
  3. Ajustar el porcentaje de nivel de pérdida de detención para equilibrar entre la pérdida de detención y la tolerancia a las fluctuaciones.

Direcciones de optimización

Las direcciones de optimización para esta estrategia son:

  1. Añadir otros juicios de indicadores, como el volumen, para evitar señales falsas de ruptura.
  2. Añadir predicciones de modelos de aprendizaje automático para ayudar en la toma de decisiones.
  3. Optimizar los tiempos de pirámide y el tamaño de la posición para mejorar aún más el rendimiento.
  4. Establezca filtros para las fluctuaciones de precios de la noche a la mañana y antes del mercado. Determine si participará en el próximo día de negociación en función de la fluctuación.

Conclusión

En general, esta es una tendencia relativamente estable después de la estrategia. Al combinar indicadores duales RSI y MA, asegura cierta estabilidad mientras captura oportunidades de reversión de tendencia más claras. El filtro de volatilidad evita algunos riesgos, y el porcentaje de stop loss también controla eficazmente la pérdida de una sola operación. Esta estrategia se puede utilizar como una estrategia genérica de símbolos múltiples, y también se puede optimizar en parámetros y modelos para símbolos específicos para lograr mejores resultados.


/*backtest
start: 2023-11-11 00:00:00
end: 2023-12-11 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// Scalping strategy
// © Lukescream and Ninorigo
// (original version by Lukescream - lastest versions by Ninorigo) - v1.3
//

//@version=4
strategy(title="Scalping using RSI 2 indicator", shorttitle="RSI 2 Strategy", overlay=true, pyramiding=0, process_orders_on_close=false)

var bool ConditionEntryL = false
var bool ConditionEntryS = false


//***********
// Costants
//***********
def_start_date = timestamp("01 Jan 2021 07:30 +0000")
def_end_date   = timestamp("01 Dec 2024 07:30 +0000")

def_rsi_length = 2
def_overbought_value = 90
def_oversold_value   = 10

def_slow_ma_length = 200
def_fast_ma_length = 50
def_ma_choice      = "EMA"

def_tick   = 0.5
def_filter = true

def_trailing_stop = 1


//***********
// Change the optional parameters
//***********
start_time  = input(title="Start date", defval=def_start_date, type=input.time)
end_time    = input(title="End date", defval=def_end_date, type=input.time)
// RSI
src         = input(title="Source", defval=close, type=input.source)
rsi_length  = input(title="RSI Length", defval=def_rsi_length, minval=1, type=input.integer)
overbought_threshold = input(title="Overbought threshold", defval=def_overbought_value, type=input.float)
oversold_threshold   = input(title="Oversold threshold", defval=def_oversold_value, type=input.float)
// Moving average
slow_ma_length = input(title="Slow MA length", defval=def_slow_ma_length, type=input.integer)
fast_ma_length = input(title="Fast MA length", defval=def_fast_ma_length, type=input.integer)
ma_choice = input(title="MA choice", defval="EMA", options=["SMA", "EMA"])
// Input ticker
tick   = input(title="Ticker size", defval=def_tick, type=input.float)
filter = input(title="Trend Filter", defval=def_filter, type=input.bool)
// Trailing stop (%)
ts_rate = input(title="Trailing Stop %", defval=def_trailing_stop, type=input.float)


//***********
// RSI
//***********
// Calculate RSI
up   = rma(max(change(src), 0), rsi_length)
down = rma(-min(change(src), 0), rsi_length)
rsi = (down == 0 ? 100 : (up == 0 ? 0 : 100-100/(1+up/down)))


//***********
// Moving averages
//***********
slow_ma = (ma_choice == "SMA" ? sma(close, slow_ma_length) : ema(close, slow_ma_length))
fast_ma = (ma_choice == "SMA" ? sma(close, fast_ma_length) : ema(close, fast_ma_length))
// Show the moving averages
plot(slow_ma, color=color.white,  title="Slow MA")
plot(fast_ma, color=color.yellow, title="Fast MA")


//***********
// Strategy
//***********
if true
    // Determine the entry conditions (only market entry and market exit conditions)
    // Long position
    ConditionEntryL := (filter == true ? (fast_ma > slow_ma and close > slow_ma and rsi < oversold_threshold) : (fast_ma > slow_ma and rsi < oversold_threshold))
    // Short position
    ConditionEntryS := (filter == true ? (fast_ma < slow_ma and close < slow_ma and rsi > overbought_threshold) : (fast_ma < slow_ma and rsi > overbought_threshold))
   
    // Calculate the trailing stop
    ts_calc = close * (1/tick) * ts_rate * 0.01

    // Submit the entry orders and the exit orders
    // Long position
    if ConditionEntryL
        strategy.entry("RSI Long", strategy.long)
    // Exit from a long position
    strategy.exit("Exit Long", "RSI Long", trail_points=0, trail_offset=ts_calc)

    // Short position 
    if ConditionEntryS
        strategy.entry("RSI Short", strategy.short)
    // Exit from a short position
    strategy.exit("Exit Short", "RSI Short", trail_points=0, trail_offset=ts_calc)

// Highlights long conditions
bgcolor (ConditionEntryL ? color.navy : na, transp=60, offset=1, editable=true, title="Long position band")
// Highlights short conditions
bgcolor (ConditionEntryS ? color.olive : na, transp=60, offset=1, editable=true, title="Short position band")


Más.