Estrategia de trading cuantitativo con cruce de medias móviles múltiples y trailing stop loss dinámico RSI

MA RSI SMA SL TS
Fecha de creación: 2024-11-29 16:10:35 Última modificación: 2024-11-29 16:10:35
Copiar: 1 Número de Visitas: 461
1
Seguir
1617
Seguidores

Estrategia de trading cuantitativo con cruce de medias móviles múltiples y trailing stop loss dinámico RSI

Descripción general

Esta estrategia es un sistema de comercio cuantitativo que combina el cruce de promedios móviles y un índice relativamente fuerte (RSI) y integra la función de seguimiento de las paradas. La estrategia utiliza dos promedios móviles de 9 y 21 períodos como indicadores principales para juzgar la tendencia, junto con el indicador RSI para la confirmación de la señal de negociación y para proteger los beneficios y controlar el riesgo mediante el seguimiento dinámico de las paradas.

Principio de estrategia

La lógica central de la estrategia se basa en los siguientes elementos clave:

  1. Identificación de tendencias: Identificar los cambios en la tendencia del mercado a través de la cruz de las medias móviles rápidas (de 9 ciclos) y lentas (de 21 ciclos). Cuando la línea rápida atraviesa la línea lenta y el RSI es mayor que 55, produce una señal de más; Cuando la línea rápida atraviesa la línea lenta y el RSI es menor que 45, produce una señal de vacío.
  2. Confirmación de señales: utiliza el RSI como filtro de señales para mejorar la fiabilidad de las señales de negociación al establecer el umbral RSI.
  3. Control de riesgo: Se utiliza un 1% de seguimiento de la pérdida, y se ajusta dinámicamente la posición de la pérdida para proteger la ganancia. Al mismo tiempo, se establecen condiciones de cierre de ganancias basadas en el RSI, con posiciones excedentes y vacantes cuando el RSI es superior a 80 o inferior a 22, respectivamente.
  4. Mecanismo de detención de pérdidas: Combinado con un stop fijo y un stop de seguimiento, se elimina automáticamente la posición cuando el precio supera el porcentaje predeterminado del punto de entrada o toca la línea de detención de seguimiento.

Ventajas estratégicas

  1. Validación de señales multidimensionales: mejora la precisión de las señales de negociación mediante la doble confirmación de cruce de línea media y RSI.
  2. Una buena gestión de riesgos: el uso de un seguimiento dinámico de pérdidas para proteger los beneficios y controlar los riesgos.
  3. Flexible mecanismo de entrada: combina tendencias con indicadores de dinámica para capturar con eficacia los puntos de inflexión del mercado.
  4. Alto grado de automatización: La lógica de la estrategia es clara y fácil de automatizar.
  5. Adaptabilidad: adaptabilidad a diferentes entornos de mercado mediante ajustes de parámetros.

Riesgo estratégico

  1. Riesgo de mercado en movimiento: Falsa señal de ruptura puede ocurrir con frecuencia en mercados en movimiento horizontal.
  2. Riesgo de deslizamiento: Se puede enfrentar pérdida de puntos de deslizamiento en el proceso de ejecución de seguimiento de los paros.
  3. Sensibilidad de los parámetros: los ajustes de los períodos de la línea media y los mínimos del RSI tienen un gran impacto en el rendimiento de la estrategia.
  4. Riesgo sistémico: en casos extremos, el stop loss puede no ser ejecutado a tiempo.

Dirección de optimización de la estrategia

  1. Optimización de la señal: Se puede introducir un indicador de volumen de tránsito como condición complementaria para la confirmación de la señal.
  2. Optimización de la pérdida: Considere el mecanismo de ajuste dinámico de la proporción de pérdida basada en la volatilidad.
  3. Gestión de posiciones: añadido un sistema de gestión de posiciones dinámico basado en la evaluación de riesgos.
  4. Adaptabilidad al mercado: añade mecanismos de identificación del entorno del mercado, usando diferentes configuraciones de parámetros en diferentes estados del mercado.
  5. Filtración de señales: Se puede agregar un filtro de tiempo para evitar el comercio en los momentos de fluctuación antes de la apertura y el cierre del mercado.

Resumir

La estrategia combina los indicadores clásicos del análisis técnico para construir un sistema de negociación con características de seguimiento de tendencias y dinámicas. Su principal ventaja reside en el mecanismo de confirmación de señales multidimensional y el sistema de gestión de riesgos completo. A través de la optimización y mejora continuas, la estrategia espera mantener un rendimiento estable en diferentes entornos de mercado.

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"}]
*/

//@version=5
strategy("ojha's Intraday MA Crossover + RSI Strategy with Trailing Stop", overlay=true)

// Define Moving Averages
fastLength = 9
slowLength = 21
fastMA = ta.sma(close, fastLength)
slowMA = ta.sma(close, slowLength)

// Define RSI
rsiPeriod = 14
rsiValue = ta.rsi(close, rsiPeriod)

// Define Conditions for Long and Short
longCondition = ta.crossover(fastMA, slowMA) and rsiValue > 55
shortCondition = ta.crossunder(fastMA, slowMA) and rsiValue < 45

// Define the trailing stop distance (e.g., 1% trailing stop)
trailingStopPercent = 1.0

// Variables to store the entry candle high and low
var float longEntryLow = na
var float shortEntryHigh = na

// Variables for trailing stop levels
var float longTrailingStop = na
var float shortTrailingStop = na

// Exit conditions
exitLongCondition = rsiValue > 80
exitShortCondition = rsiValue < 22

// Stop-loss conditions (price drops below long entry candle low * 1% or exceeds short entry candle high * 1%)
longStopLoss = longEntryLow > 0 and close < longEntryLow * 0.99
shortStopLoss = shortEntryHigh > 0 and close > shortEntryHigh * 1.01

// Execute Buy Order and store the entry candle low for long stop-loss
if (longCondition)
    strategy.entry("Long", strategy.long)
    longEntryLow := low  // Store the low of the candle where long entry happened
    longTrailingStop := close * (1 - trailingStopPercent / 100)  // Initialize trailing stop at entry

// Execute Sell Order and store the entry candle high for short stop-loss
if (shortCondition)
    strategy.entry("Short", strategy.short)
    shortEntryHigh := high  // Store the high of the candle where short entry happened
    shortTrailingStop := close * (1 + trailingStopPercent / 100)  // Initialize trailing stop at entry

// Update trailing stop for long position
if (strategy.opentrades > 0 and strategy.position_size > 0)
    longTrailingStop := math.max(longTrailingStop, close * (1 - trailingStopPercent / 100))  // Update trailing stop as price moves up

// Update trailing stop for short position
if (strategy.opentrades > 0 and strategy.position_size < 0)
    shortTrailingStop := math.min(shortTrailingStop, close * (1 + trailingStopPercent / 100))  // Update trailing stop as price moves down

// Exit Buy Position when RSI is above 80, Stop-Loss triggers, or trailing stop is hit
if (exitLongCondition or longStopLoss or close < longTrailingStop)
    strategy.close("Long")
    longEntryLow := na  // Reset the entry low after the long position is closed
    longTrailingStop := na  // Reset the trailing stop

// Exit Sell Position when RSI is below 22, Stop-Loss triggers, or trailing stop is hit
if (exitShortCondition or shortStopLoss or close > shortTrailingStop)
    strategy.close("Short")
    shortEntryHigh := na  // Reset the entry high after the short position is closed
    shortTrailingStop := na  // Reset the trailing stop

// Plot Moving Averages on the Chart
plot(fastMA, color=color.green, title="9-period MA")
plot(slowMA, color=color.red, title="21-period MA")

// Plot RSI on a separate panel
rsiPlot = plot(rsiValue, color=color.blue, title="RSI")
hline(50, "RSI 50", color=color.gray)
hline(80, "RSI 80", color=color.red)
hline(22, "RSI 22", color=color.green)

// Plot Trailing Stop for Visualization
plot(longTrailingStop, title="Long Trailing Stop", color=color.red, linewidth=1, style=plot.style_line)
plot(shortTrailingStop, title="Short Trailing Stop", color=color.green, linewidth=1, style=plot.style_line)