Sistema de estrategia cuantitativa de tendencia de impulso con dos indicadores

RSI MA ATR TP/SL
Fecha de creación: 2025-01-17 16:40:55 Última modificación: 2025-01-17 16:41:17
Copiar: 0 Número de Visitas: 276
1
Seguir
1166
Seguidores

Sistema de estrategia cuantitativa de tendencia de impulso con dos indicadores

Descripción general

Esta estrategia es un sistema de trading cuantitativo que combina el índice de fuerza relativa (RSI) y la media móvil (MA) para identificar tendencias del mercado y oportunidades de trading a través de la sinergia de los dos indicadores. El sistema también incorpora filtros de volumen y volatilidad para aumentar la confiabilidad de las señales comerciales. La idea central de la estrategia es determinar la dirección de la tendencia a través del cruce de la media móvil rápida y la media móvil lenta, y utilizar el RSI para confirmar el impulso, formando finalmente un marco de decisión comercial completo.

Principio de estrategia

La estrategia adopta un mecanismo de confirmación de señal de dos capas:

  1. Capa de confirmación de tendencia: utilice el cruce de la media móvil rápida (FastMA) y la media móvil lenta (SlowMA) para determinar la tendencia del mercado. Cuando la línea rápida rompe la línea lenta desde abajo, se considera que se establece una tendencia ascendente; cuando la línea rápida cae por debajo de la línea lenta desde arriba, se considera que se establece una tendencia descendente.
  2. Capa de confirmación de impulso: utilice el indicador RSI como herramienta de confirmación de impulso. En una tendencia alcista, se requiere que el RSI esté por debajo de 50, lo que indica que el mercado aún tiene espacio para subir; en una tendencia bajista, se requiere que el RSI esté por encima de 50, lo que indica que el mercado aún tiene espacio para caer.
  3. Filtro de trading: filtra las señales de trading con liquidez o volatilidad insuficiente estableciendo umbrales mínimos para el volumen y la volatilidad del ATR.

Ventajas estratégicas

  1. Confirmación de señales multidimensionales: al combinar indicadores de tendencia y de impulso, se reduce la probabilidad de señales falsas.
  2. Gestión de riesgos perfecta: funciones integradas de stop loss y take profit, puede establecer puntos de control de riesgo según el porcentaje.
  3. Mecanismo de filtrado flexible: Los filtros de volumen y volatilidad se pueden activar o desactivar de forma flexible según las condiciones del mercado.
  4. Mecanismo de cierre automático: cierra posiciones automáticamente cuando aparece una señal de reversión para evitar tenencias excesivas.

Riesgo estratégico

  1. Riesgo de mercado volátil: En un mercado lateral y volátil, pueden aparecer con frecuencia señales de ruptura falsas.
  2. Riesgo de deslizamiento: cuando el mercado fluctúa violentamente, el precio de transacción real puede desviarse significativamente del precio de activación de la señal.
  3. Sensibilidad de los parámetros: la eficacia de la estrategia depende en gran medida de la configuración de los parámetros, y diferentes entornos de mercado pueden requerir diferentes combinaciones de parámetros.

Dirección de optimización de la estrategia

  1. Ajuste dinámico de parámetros: se puede introducir un mecanismo de parámetros adaptativos para ajustar dinámicamente el período del promedio móvil y el umbral RSI de acuerdo con las fluctuaciones del mercado.
  2. Sistema de ponderación de la señal: establecer un sistema de puntuación de la intensidad de la señal y asignar diferentes pesos según el rendimiento de diferentes indicadores.
  3. Clasificación del entorno de mercado: agregue un módulo de identificación del entorno de mercado y utilice diferentes estrategias comerciales en diferentes condiciones de mercado.
  4. Control de riesgo mejorado: introducir un mecanismo dinámico de stop-loss para ajustar automáticamente la posición de stop-loss según la volatilidad del mercado.

Resumir

Esta estrategia establece un sistema comercial relativamente completo mediante el uso exhaustivo de indicadores de tendencia y impulso. Las ventajas del sistema radican en su mecanismo de confirmación de señales multinivel y su perfecto sistema de gestión de riesgos, pero en la aplicación real, es necesario prestar atención al impacto del entorno del mercado en el rendimiento de la estrategia y optimizar los parámetros en función de las condiciones reales. A través de la mejora y optimización continuas, se espera que la estrategia mantenga un desempeño estable en diferentes entornos de mercado.

Código Fuente de la Estrategia
/*backtest
start: 2024-01-17 00:00:00
end: 2025-01-16 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT","balance":49999}]
*/

// © Boba2601
//@version=5
strategy("RSI-MA Synergy", overlay=true, margin_long=100, margin_short=100)

// === Налаштування індикаторів ===
length_rsi = input.int(14, title="RSI Period", group="Індикатори")
fastMALength = input.int(9, title="Fast MA Length", group="Індикатори")
slowMALength = input.int(21, title="Slow MA Length", group="Індикатори")

// === Налаштування стоп-лосу і тейк-профіту ===
useStopLossTakeProfit = input.bool(true, title="Використовувати стоп-лос і тейк-профіт", group="Стоп-лос і Тейк-профіт")
stopLossPercent = input.float(2.0, title="Стоп-лос (%)", minval=0.1, step=0.1, group="Стоп-лос і Тейк-профіт")
takeProfitPercent = input.float(4.0, title="Тейк-профіт (%)", minval=0.1, step=0.1, group="Стоп-лос і Тейк-профіт")

// === Налаштування об'єму та волатильності ===
useVolumeFilter = input.bool(false, title="Використовувати фільтр об'єму", group="Об'єм та Волатильність")
volumeThreshold = input.int(50000, title="Мінімальний об'єм", group="Об'єм та Волатильність")
useVolatilityFilter = input.bool(false, title="Використовувати фільтр волатильності", group="Об'єм та Волатильність")
atrLength = input.int(14, title="Період ATR для волатильності", group="Об'єм та Волатильність")
volatilityThreshold = input.float(1.5, title="Мінімальна волатильність (ATR)", step=0.1, group="Об'єм та Волатильність")


// === Розрахунок індикаторів ===
rsiValue = ta.rsi(close, length_rsi)
fastMA = ta.sma(close, fastMALength)
slowMA = ta.sma(close, slowMALength)

// === Розрахунок об'єму та волатильності ===
averageVolume = ta.sma(volume, 20)
atrValue = ta.atr(atrLength)

// === Умови входу в позицію ===
longCondition = ta.crossover(fastMA, slowMA) and rsiValue < 50
if useVolumeFilter
    longCondition := longCondition and volume > volumeThreshold
if useVolatilityFilter
    longCondition := longCondition and atrValue > volatilityThreshold

shortCondition = ta.crossunder(fastMA, slowMA) and rsiValue > 50
if useVolumeFilter
    shortCondition := shortCondition and volume > volumeThreshold
if useVolatilityFilter
    shortCondition := shortCondition and atrValue > volatilityThreshold

// === Логіка входу та виходу з позиції ===
if (longCondition)
    strategy.entry("Long", strategy.long)
    if (useStopLossTakeProfit)
        stopLossPrice = close * (1 - stopLossPercent / 100)
        takeProfitPrice = close * (1 + takeProfitPercent / 100)
        strategy.exit("Exit Long", "Long", stop = stopLossPrice, limit = takeProfitPrice)

if (shortCondition)
    strategy.entry("Short", strategy.short)
    if (useStopLossTakeProfit)
        stopLossPrice = close * (1 + stopLossPercent / 100)
        takeProfitPrice = close * (1 - takeProfitPercent / 100)
        strategy.exit("Exit Short", "Short", stop = stopLossPrice, limit = takeProfitPrice)

// === Закриття позицій за зворотнім сигналом ===
if (strategy.position_size > 0 and (ta.crossunder(fastMA, slowMA) or rsiValue > 50))
    strategy.close("Long", comment="Закрито по сигналу")

if (strategy.position_size < 0 and (ta.crossover(fastMA, slowMA) or rsiValue < 50))
    strategy.close("Short", comment="Закрито по сигналу")