Estrategia de seguimiento de tendencias de RSI promedio móvil

El autor:¿ Qué pasa?, Fecha: 2023-11-23 17:13:06
Las etiquetas:

img

Resumen general

La estrategia de seguimiento de tendencias es una estrategia de comercio de acciones automatizada que utiliza tanto el análisis de tendencias como los indicadores de sobrecompra y sobreventa.

Estrategia lógica

La estrategia consta de tres partes principales:

  1. Juzgo de tendencia: Cálcula la tendencia a largo plazo con un promedio móvil simple de 200 días, y la tendencia a corto plazo con promedios móviles simples de 30 días y 50 días.

  2. Análisis de sobrecompra-sobreventa: Cálcula el indicador de RSI de 14 días. RSI por encima de 80 es la zona de sobrecompra y por debajo de 20 es la zona de sobreventa. Las señales comerciales se generan cuando el indicador de RSI cae desde la zona de sobrecompra o se eleva desde la zona de sobreventa.

  3. Cuando se identifican señales de sobrecompra o sobreventa, si la dirección es consistente con el análisis de tendencia, se abrirán posiciones largas / cortas.

Con esta estrategia, es posible entrar en el mercado a tiempo cuando los precios se invierten, al tiempo que se filtran algunas operaciones ruidosas mediante la incorporación de análisis de tendencias, con un control de extracción relativamente excelente.

Análisis de ventajas

La estrategia tiene las siguientes ventajas:

  1. Combinar el análisis de tendencias y los indicadores de sobrecompra y sobreventa para filtrar el ruido e identificar los cambios en el mercado.
  2. Considerando las tendencias tanto a largo plazo como a corto plazo para juicios más precisos.
  3. El uso de medias móviles como métodos de stop loss para que los puntos de stop loss puedan establecerse en función de la volatilidad del mercado.
  4. Las estrictas condiciones de entrada ayudan a evitar las falsas fugas de manera efectiva.

Riesgos y soluciones

También hay algunos riesgos con esta estrategia:

  1. Las operaciones con frecuencia insignificantes pueden ocurrir si el mercado se mantiene limitado al rango durante un tiempo prolongado.
  2. Existe cierto riesgo de retraso temporal, que puede mitigarse acortando los parámetros del ciclo promedio móvil.
  3. Las señales RSI pueden ser influenciadas por las acciones y los mercados.

Direcciones de optimización

La estrategia se puede optimizar aún más en los siguientes aspectos:

  1. Añadiendo más filtros como volumen, patrones de velas para mejorar aún más la calidad de la señal.
  2. Optimización de los parámetros del ciclo de la media móvil y del RSI para que coincidan con las diferentes características de las acciones.
  3. Construir promedios móviles dinámicos para ajustar automáticamente los parámetros basados en la volatilidad del mercado y el apetito por el riesgo.
  4. Usando técnicas más avanzadas como el aprendizaje automático para determinar las tendencias del mercado con mayor precisión.

Resumen de las actividades

En general, la estrategia de seguimiento de tendencias es una idea de estrategia muy práctica, que filtra el ruido del mercado hasta cierto punto mediante la combinación de análisis de tendencias e indicadores de sobrecompra y sobreventa, haciendo que las señales comerciales sean más precisas y válidas.


/*backtest
start: 2022-11-16 00:00:00
end: 2023-11-22 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © mattehalen

// INPUT per TIMEFRAME
// 5min     = Legnth = 9, Source = ohlc4,MaxLoss = 1000 TrendMA = 200, ShortMA = 4, LongMA = 10
// 30min    = Legnth = 7, Source = ohlc4,MaxLoss = 1000 TrendMA = 200, ShortMA = 10, LongMA = 20

strategy("Mathias & Christer Timeframe RSI", shorttitle="M&C_RSI",overlay=true, process_orders_on_close = true, default_qty_type =  strategy.percent_of_equity, default_qty_value = 100)
len = input(9, title="Length", type=input.integer)
src = input(ohlc4, title="Source", type=input.source)
//show4h = input(true, title="show 4h", type=input.bool)
maxLoss = input(3000)

rsiCurrent = rsi(src, len)
//rsi4h = security(syminfo.ticker, "240", rsi(src, len))
rsi4h   = rsi(src, len)

//--------------------------------------------------
//MA
trendMAInput = input(200, title="trendMA", type=input.integer)
shortMAInput = input(30, title="shortMA", type=input.integer)
longMAInput = input(50, title="longMA", type=input.integer)

trendMA = ema(close,trendMAInput)
shortMA = ema(close,shortMAInput)
longMA  = ema(close,longMAInput)
plot(trendMA, color=color.black, linewidth=5)
plot(shortMA, color=color.red, linewidth=2)
plot(longMA, color=color.green, linewidth=2)
bgcolor(crossunder(shortMA,longMA) ? color.black : na, transp=10)

//--------------------------------------------------
//RSI
BuySignalBarssince = barssince(rsi4h[1]<rsi4h[0] and rsi4h[1]<20)
BuySignal       = (rsi4h[1]<rsi4h[0] and rsi4h[1]<20 and BuySignalBarssince[1]>10)
BuySignalOut   = crossunder(longMA[1],shortMA[1])
bgcolor(BuySignal ? color.green : na, transp=70)
bgcolor(BuySignalOut ? color.green : na, transp=10)



SellSignalBarssince = barssince(rsi4h[1]>rsi4h[0] and rsi4h[1]>80)
SellSignal      = (rsi4h[1]>rsi4h[0] and rsi4h[1]>80 and SellSignalBarssince[1]>10)
SellSignalOut   = crossunder(shortMA[1],longMA[1])
bgcolor(SellSignal ? color.red : na, transp=70)
bgcolor(SellSignalOut ? color.red : na, transp=10)


if BuySignal
    strategy.close("short", comment = "Exit short")
    strategy.entry("long", true)
    strategy.exit("Max Loss", "long", loss = maxLoss)

if BuySignalOut
    strategy.close("long", comment = "Exit Long")
if SellSignal
    // Enter trade and issue exit order on max loss.
    strategy.close("long", comment = "Exit Long")
    strategy.entry("short", false)
    strategy.exit("Max Loss", "short", loss = maxLoss)
if SellSignalOut
    // Force trade exit.
    strategy.close("short", comment = "Exit short")
    
//--------------------------------------------------
//ATR
MyAtr = atr(10)
AtrFactor = 10
mySLBuy  = close[BuySignalBarssince]
mySLSell = close[SellSignalBarssince]

plotchar(BuySignal, "BuySignal", "⬆", location.belowbar, color.lime,size =size.huge )
plotchar(BuySignalOut, "BuySignalOut", "█", location.belowbar, color.lime,size =size.small)
plotchar(SellSignal, "SellSignal", "⬇", location.abovebar ,color.red,size =size.huge)
plotchar(SellSignalOut, "SellSignalOut", "█", location.abovebar, color.red,size =size.small)




Más.