En la carga de los recursos... Cargando...

Tendencia tras el RSI y la estrategia de negociación cuantitativa combinada de media móvil

El autor:¿ Qué pasa?, Fecha: 2025-01-06 10:58:42
Las etiquetas:Indicador de riesgo- ¿Qué es?La SMATPSL

img

Resumen general

Esta estrategia es un sistema de negociación que combina el índice de fuerza relativa (RSI) y el promedio móvil simple (SMA). Identifica la dirección de la tendencia del mercado utilizando promedios móviles mientras confirma el impulso con el RSI, ejecutando operaciones cuando la tendencia y el impulso se alinean. La estrategia incluye mecanismos integrales de stop-loss y take-profit para un control eficaz del riesgo.

Principio de la estrategia

La lógica central se basa en la combinación de dos indicadores técnicos:

  1. Promedio móvil (MA): Se utiliza para determinar la tendencia general. Se identifica una tendencia alcista cuando el precio está por encima de MA, bajista cuando está por debajo.
  2. Indice de fuerza relativa (RSI): se utiliza para confirmar el impulso del precio. El impulso al alza se confirma cuando el RSI excede un umbral (por ejemplo, 55), el impulso a la baja cuando está por debajo del umbral (por ejemplo, 45).

Lógico de generación de señales de trading:

  • Condiciones largas: Precio por encima de la AM y RSI por encima del umbral de compra
  • Condiciones cortas: Precio por debajo de la AM y RSI por debajo del umbral de venta

El control del riesgo emplea niveles de stop-loss y take-profit basados en porcentajes, establecidos como porcentajes fijos del precio de entrada.

Ventajas estratégicas

  1. Estabilidad de la señal: reduce las señales falsas mediante la doble confirmación de la tendencia y el impulso
  2. Gestión integral del riesgo: control efectivo del riesgo por operación con porcentaje fijo de stop-loss y take-profit
  3. Flexibilidad de los parámetros: los parámetros clave como el período de MA y los umbrales del RSI se pueden optimizar para diferentes características del mercado
  4. Lógica estratégica clara: las reglas de negociación son simples e intuitivas para entender y ejecutar
  5. Alta adaptabilidad: aplicable a varios plazos de negociación

Riesgos estratégicos

  1. Riesgo de reversión de tendencia: pueden producirse paradas consecutivas en los puntos de inflexión de la tendencia
  2. El riesgo de mercado limitado por el rango: pérdidas comerciales frecuentes posibles en mercados laterales
  3. Dependencia de los parámetros: los parámetros óptimos pueden variar significativamente según el entorno del mercado.
  4. El riesgo de deslizamiento: es posible un deslizamiento significativo durante una alta volatilidad.
  5. El retraso del indicador técnico: el MA y el RSI presentan un retraso inherente, que puede retrasar el momento de entrada.

Direcciones para la optimización de la estrategia

  1. Optimización de los parámetros dinámicos: introducir mecanismos de parámetros adaptativos que ajusten el período de MA y los umbrales del RSI en función de la volatilidad del mercado
  2. Filtración del entorno de mercado: añadir un mecanismo de filtración de volatilidad para ajustar el tamaño de las posiciones o pausar la negociación en situaciones de alta volatilidad
  3. Análisis de marcos de tiempo múltiples: Incorporar la confirmación de tendencias de marcos de tiempo más largos para mejorar la precisión direccional
  4. Optimización del stop-loss: Implementar los trailing stops para una mejor protección de los beneficios
  5. Filtración de la señal: añadir volumen y otros indicadores auxiliares para mejorar la fiabilidad de la señal

Resumen de las actividades

Esta estrategia construye un sistema de negociación lógicamente claro y controlado por el riesgo mediante la combinación de indicadores de tendencia e impulso. Aunque existen riesgos inherentes, la estrategia demuestra una buena practicidad a través de ajustes de parámetros apropiados y control de riesgos.


/*backtest
start: 2019-12-23 08:00:00
end: 2025-01-04 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © raiford87

//@version=6
strategy("RSI + MA Trend Strategy (v6)",
     shorttitle="RSI_MA_Trend_v6",
     overlay=true,
     initial_capital=50000,
     default_qty_type=strategy.fixed,
     default_qty_value=1)

// ─────────────────────────────────────────────────────────────────────────────────────
// 1. USER INPUTS
// ─────────────────────────────────────────────────────────────────────────────────────
maLength       = input.int(50,   "Moving Average Length")
rsiLength      = input.int(14,   "RSI Length")
rsiBuyLevel    = input.int(55,   "RSI > X for Buy",  minval=1, maxval=99)
rsiSellLevel   = input.int(45,   "RSI < X for Sell", minval=1, maxval=99)

stopLossPerc   = input.float(1.0,  "Stop Loss %",    minval=0.1)
takeProfitPerc = input.float(2.0,  "Take Profit %",  minval=0.1)

// ─────────────────────────────────────────────────────────────────────────────────────
// 2. INDICATOR CALCULATIONS
// ─────────────────────────────────────────────────────────────────────────────────────
maValue = ta.sma(close, maLength)
rsiVal  = ta.rsi(close, rsiLength)

// Trend conditions
bullTrend = close > maValue
bearTrend = close < maValue

// RSI conditions
rsiBull   = rsiVal > rsiBuyLevel
rsiBear   = rsiVal < rsiSellLevel

// ─────────────────────────────────────────────────────────────────────────────────────
// 3. ENTRY CONDITIONS
// ─────────────────────────────────────────────────────────────────────────────────────
longCondition  = bullTrend and rsiBull
shortCondition = bearTrend and rsiBear

if longCondition
    strategy.entry("RSI MA Long", strategy.long)
if shortCondition
    strategy.entry("RSI MA Short", strategy.short)

// ─────────────────────────────────────────────────────────────────────────────────────
// 4. STOP LOSS & TAKE PROFIT
// ─────────────────────────────────────────────────────────────────────────────────────
stopLossLevel   = stopLossPerc   * 0.01
takeProfitLevel = takeProfitPerc * 0.01

if strategy.position_size > 0
    stopPriceLong = strategy.position_avg_price * (1 - stopLossLevel)
    tpPriceLong   = strategy.position_avg_price * (1 + takeProfitLevel)
    strategy.exit("Exit Long", from_entry="RSI MA Long", stop=stopPriceLong, limit=tpPriceLong)

if strategy.position_size < 0
    stopPriceShort = strategy.position_avg_price * (1 + stopLossLevel)
    tpPriceShort   = strategy.position_avg_price * (1 - takeProfitLevel)
    strategy.exit("Exit Short", from_entry="RSI MA Short", stop=stopPriceShort, limit=tpPriceShort)

// ─────────────────────────────────────────────────────────────────────────────────────
// 5. PLOT SIGNALS & LEVELS
// ─────────────────────────────────────────────────────────────────────────────────────
plot(maValue, color=color.yellow, linewidth=2, title="Moving Average")

plotchar(longCondition,  title="Long Signal",  char='▲', location=location.belowbar, color=color.green, size=size.tiny)
plotchar(shortCondition, title="Short Signal", char='▼', location=location.abovebar, color=color.red,   size=size.tiny)

// Plot Stop & TP lines
posIsLong  = strategy.position_size > 0
posIsShort = strategy.position_size < 0

plotStopLong = posIsLong ? strategy.position_avg_price * (1 - stopLossLevel) : na
plotTpLong   = posIsLong ? strategy.position_avg_price * (1 + takeProfitLevel): na
plotStopShort= posIsShort? strategy.position_avg_price * (1 + stopLossLevel) : na
plotTpShort  = posIsShort? strategy.position_avg_price * (1 - takeProfitLevel): na

plot(plotStopLong,  color=color.red,   linewidth=2, style=plot.style_line, title="Stop Loss Long")
plot(plotTpLong,    color=color.green, linewidth=2, style=plot.style_line, title="Take Profit Long")
plot(plotStopShort, color=color.red,   linewidth=2, style=plot.style_line, title="Stop Loss Short")
plot(plotTpShort,   color=color.green, linewidth=2, style=plot.style_line, title="Take Profit Short")


Relacionados

Más.