Estrategia de media móvil y RSI


Fecha de creación: 2023-11-28 14:07:46 Última modificación: 2023-11-28 14:07:46
Copiar: 0 Número de Visitas: 663
1
Seguir
1621
Seguidores

Estrategia de media móvil y RSI

Descripción general

La estrategia de índice de fuerza relativa de promedio móvil es una estrategia de negociación cuantitativa que utiliza tanto promedios móviles como indicadores de fuerza relativa como señales de negociación. La estrategia genera señales de negociación para capturar oportunidades en las tendencias del mercado mediante la comparación de precios de promedios móviles y valores de indicadores de fuerza relativa.

Principio de estrategia

La estrategia se basa principalmente en dos indicadores:

  1. Media móvil simple (SMA): refleja la tendencia promedio de los precios.
  2. Indicador relativamente fuerte (RSI): refleja la fortaleza de los precios.

La lógica central de la estrategia es la siguiente:

Cuando la línea del indicador RSI está por debajo de la media móvil, es una zona de sobreventa, se considera que las acciones están infravaloradas y generan una señal de compra; cuando la línea del indicador RSI está por encima de la media móvil, es una zona de sobreventa, se considera que las acciones están sobrevaloradas y generan una señal de venta.

Es decir, el promedio móvil refleja el valor justo de las acciones hasta cierto punto, y el RSI representa la fortaleza y la debilidad actuales de las acciones. Si el RSI está por encima o por debajo del promedio móvil, significa que existe la posibilidad de una reversión.

En concreto, la estrategia genera señales de negociación a través de los siguientes pasos:

  1. Calcula el RSI de las acciones y las medias móviles simples
  2. Comparación de la relación entre el RSI y el promedio móvil
  3. Cuando el RSI cruza la media móvil, genera una señal de venta
  4. Cuando el indicador RSI cruza la media móvil, se genera una señal de compra
  5. Establecer un punto de parada y mover la parada para controlar el riesgo

Ventajas estratégicas

Esta estrategia combina la tendencia de los promedios móviles con la tendencia de las compras y ventas excesivas del RSI, aprovechando las ventajas de los diferentes indicadores para determinar con eficacia el punto de inflexión del mercado.

Las principales ventajas son:

  1. Los promedios móviles son un indicador eficaz de la tendencia de los precios
  2. El RSI puede reflejar sobrecompra y sobreventa
  3. La combinación de dos indicadores permite una mayor precisión en la determinación de los puntos de inflexión del mercado
  4. Se puede establecer un punto de parada para controlar el riesgo

Riesgo estratégico

La estrategia también tiene sus riesgos:

  1. Existe la probabilidad de que el indicador produzca una señal errónea, lo que puede causar pérdidas innecesarias
  2. En caso de crisis, el stop loss puede ser rebasado y causar grandes pérdidas.
  3. La configuración incorrecta de los parámetros también puede afectar el rendimiento de la política

Para controlar el riesgo, se puede optimizar de la siguiente manera:

  1. Ajustar los parámetros de las medias móviles y el RSI para que la señal del indicador sea más confiable
  2. Relajar el punto de parada adecuadamente para evitar que el punto de parada se active con demasiada frecuencia
  3. El uso de paradas móviles como paradas DYNAMIC para hacer que las paradas sean más flexibles

Dirección de optimización de la estrategia

La estrategia también puede ser mejorada en otras áreas, como:

  1. Prueba combinaciones de parámetros de diferentes períodos para encontrar el mejor parámetro
  2. Aumentar la fiabilidad de la señal mediante la adición de filtros para otros indicadores, como el indicador de volumen de tráfico
  3. Optimizar las estrategias de detención de pérdidas para que sean más dinámicas y razonables
  4. Mecanismos de optimización de parámetros adaptativos combinados con tecnologías como el aprendizaje profundo
  5. Agrega un módulo de gestión de posiciones para ajustar las posiciones de forma dinámica según las condiciones del mercado

La estabilidad y la rentabilidad de la estrategia se pueden mejorar continuamente a través de optimización de parámetros, optimización de indicadores y optimización de la gestión de riesgos.

Resumir

Las estrategias de medias móviles y indicadores relativamente fuertes utilizan al mismo tiempo el juicio de tendencias de precios y el juicio de sobreventa y sobreventa para determinar con eficacia los puntos de inflexión del mercado y aprovechar las oportunidades de reversión. La estrategia es sencilla, práctica, controlada por el riesgo y es una estrategia de comercio cuantitativa práctica.

Código Fuente de la Estrategia
/*backtest
start: 2023-11-20 00:00:00
end: 2023-11-24 06:00:00
period: 10m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2

strategy(title = "RSI versus SMA", shorttitle = "RSI vs SMA", overlay = false, pyramiding = 0, default_qty_type = strategy.percent_of_equity, default_qty_value = 10, currency = currency.GBP)

// Revision:        1
// Author:          @JayRogers
//
// *** USE AT YOUR OWN RISK ***
// - Nothing is perfect, and all decisions by you are on your own head. And stuff.
//
// Description:
//  - It's RSI versus a Simple Moving Average.. Not sure it really needs much more description.
//  - Should not repaint - Automatically offsets by 1 bar if anything other than "open" selected as RSI source.

// === INPUTS ===
// rsi
rsiSource   = input(defval = open, title = "RSI Source")
rsiLength   = input(defval = 8, title = "RSI Length", minval = 1)
// sma
maLength    = input(defval = 34, title = "MA Period", minval = 1)
// invert trade direction
tradeInvert = input(defval = false, title = "Invert Trade Direction?")
// risk management
useStop     = input(defval = false, title = "Use Initial Stop Loss?")
slPoints    = input(defval = 25, title = "Initial Stop Loss Points", minval = 1)
useTS       = input(defval = true, title = "Use Trailing Stop?")
tslPoints   = input(defval = 120, title = "Trail Points", minval = 1)
useTSO      = input(defval = false, title = "Use Offset For Trailing Stop?")
tslOffset   = input(defval = 20, title = "Trail Offset Points", minval = 1)
// === /INPUTS ===

// === BASE FUNCTIONS ===
// delay for direction change actions
switchDelay(exp, len) =>
    average = len >= 2 ? sum(exp, len) / len : exp[1]
    up      = exp > average
    down    = exp < average
    state   = up ? true : down ? false : up[1]
// === /BASE FUNCTIONS ===

// === SERIES and VAR ===
// rsi
shunt = rsiSource == open ? 0 : 1
rsiUp = rma(max(change(rsiSource[shunt]), 0), rsiLength)
rsiDown = rma(-min(change(rsiSource[shunt]), 0), rsiLength)
rsi = (rsiDown == 0 ? 100 : rsiUp == 0 ? 0 : 100 - (100 / (1 + rsiUp / rsiDown))) - 50 // shifted 50 points to make 0 median
// sma of rsi
rsiMa   = sma(rsi, maLength)
// self explanatory..
tradeDirection = tradeInvert ? 0 <= rsiMa ? true : false : 0 >= rsiMa ? true : false
// === /SERIES ===

// === PLOTTING ===
barcolor(color = tradeDirection ? green : red, title = "Bar Colours")
// hlines
medianLine  = hline(0, title = 'Median', color = #996600,  linewidth = 1)
limitUp     = hline(25, title = 'Limit Up', color = silver,  linewidth = 1)
limitDown   = hline(-25, title = 'Limit Down', color = silver,  linewidth = 1)
// rsi and ma
rsiLine     = plot(rsi, title = 'RSI', color = purple, linewidth = 2, style = line, transp = 50)
areaLine    = plot(rsiMa, title = 'Area MA', color = silver, linewidth = 1, style = area, transp = 70)
// === /PLOTTING ===

goLong() => not tradeDirection[1] and tradeDirection
killLong() => tradeDirection[1] and not tradeDirection
strategy.entry(id = "Buy", long = true, when = goLong())
strategy.close(id = "Buy", when = killLong())

goShort() => tradeDirection[1] and not tradeDirection
killShort() => not tradeDirection[1] and tradeDirection
strategy.entry(id = "Sell", long = false, when = goShort())
strategy.close(id = "Sell", when = killShort())

if (useStop)
    strategy.exit("XSL", from_entry = "Buy", loss = slPoints)
    strategy.exit("XSS", from_entry = "Sell", loss = slPoints)
// if we're using the trailing stop
if (useTS and useTSO) // with offset
    strategy.exit("XSL", from_entry = "Buy", trail_points = tslPoints, trail_offset = tslOffset)
    strategy.exit("XSS", from_entry = "Sell", trail_points = tslPoints, trail_offset = tslOffset)
if (useTS and not useTSO) // without offset
    strategy.exit("XSL", from_entry = "Buy", trail_points = tslPoints)
    strategy.exit("XSS", from_entry = "Sell", trail_points = tslPoints)