Estrategia de divergencia del RSI basada en puntos de inflexión


Fecha de creación: 2023-11-28 13:43:05 Última modificación: 2023-11-28 13:43:05
Copiar: 1 Número de Visitas: 977
1
Seguir
1617
Seguidores

Estrategia de divergencia del RSI basada en puntos de inflexión

Descripción general

La estrategia se llama estrategia de divergencia del RSI basada en el pivote. Utiliza el desvío del RSI en diferentes períodos para determinar los puntos de compra y venta, y sobre esta base, agrega el RSI de la línea larga como condición de filtración para mejorar la estabilidad de la estrategia.

Principio de estrategia

La estrategia se basa en el análisis del RSI corto (por ejemplo, el RSI de 5 días) y las oportunidades de compra y venta cuando el precio aparece con el tiburón oculto de la parte superior del tiburón o con el tiburón regular de la parte superior del tiburón.

El tipo de cambio es el cambio de precio bajo y el RSI bajo. El tipo de cambio oculto es el cambio de cambio de precio bajo y el RSI bajo. El cambio de precio bajo y el cambio de precio alto se definen en relación con los máximos históricos de una determinada ventana de rodaje.

Además, la estrategia también introduce el RSI de línea larga (como el RSI de 50 días) como condición de filtración. Sólo se considera una señal de compra cuando el RSI de largo es mayor que 50; se considera un stop loss o un stop exit cuando el RSI de largo es menor que 30.

Ventajas estratégicas

La mayor ventaja de esta estrategia es que utiliza al mismo tiempo las señales de desviación de los RSI cortos y los filtros de los RSI largos, lo que permite evitar hasta cierto punto el ajuste y la omisión. En concreto, tiene principalmente las siguientes ventajas:

  1. La línea corta RSI que se aleja de la señal permite anticipar la oportunidad de una reversión de precios y capturar los puntos de inflexión a tiempo.
  2. Las condiciones de filtración del RSI de línea larga evitan hacer más a ciegas cuando la tendencia es incierta.
  3. La variedad de tipos de esterilización, con esterilizaciones por lotes, puede ayudar a reducir el riesgo.
  4. El mecanismo de piramidal permite la subida de posiciones y un mayor margen de ganancias.

Riesgo estratégico

La estrategia también tiene algunos riesgos a tener en cuenta:

  1. La desviación del RSI no siempre es efectiva y puede dar lugar a falsas señales.
  2. El riesgo aumenta después de la acumulación de la inversión. Si se hace un error de juicio, las pérdidas se acelerarán.
  3. La configuración incorrecta de las paradas también puede causar paradas prematuras o pérdidas de ganancias.

Las medidas de gestión de riesgos correspondientes incluyen: establecer razonablemente las condiciones de stop loss, controlar el tamaño de cada posición, reducir la posición en lotes para suavizar la curva de pérdidas y ganancias, etc.

Dirección de optimización

La estrategia tiene espacio para ser optimizada aún más:

  1. Los parámetros del RSI se pueden optimizar aún más para encontrar la combinación óptima de parámetros;
  2. Se puede probar la señal de desviación de otros indicadores, como MACD, KD, etc.
  3. Se pueden optimizar los parámetros específicamente para una variedad específica (como petróleo, metales preciosos, etc.) para mejorar la adaptabilidad.

Resumir

Esta estrategia utiliza una combinación de señales de desviación múltiple de la línea corta y la línea larga del RSI para controlar el riesgo y aumentar la rentabilidad. Representa varios principios del diseño de la estrategia de comercio cuantitativo, incluidos cuándo entrar y cuándo salir, la reducción de la posición por lotes, el establecimiento de paradas de pérdidas, etc. Este es un ejemplo de estrategia de desviación del RSI para referencia.

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

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © mohanee

//@version=4

//GOOGL setting  5 ,50 close, 3 , 1  profitLevel at 75 and No stop Loss shows win rate 99.03 % profit factor 5830.152

strategy(title="RSI5_50 with Divergence", overlay=false,pyramiding=2, default_qty_type=strategy.fixed, default_qty_value=3,    initial_capital=10000, currency=currency.USD)

len = input(title="RSI Period", minval=1, defval=5)
longRSILen = input(title="Long RSI Period", minval=10, defval=50)
src = input(title="RSI Source", defval=close)
lbR = input(title="Pivot Lookback Right", defval=3)
lbL = input(title="Pivot Lookback Left", defval=1)
takeProfitRSILevel = input(title="Take Profit at RSI Level", minval=50, defval=75)
stopLoss = input(title="Stop Loss%(if checked 8% rule applied)", defval=false)

shortTermRSI = rsi(close,len)
longTermRSI = rsi(close,longRSILen)

rangeUpper = input(title="Max of Lookback Range", defval=60)
rangeLower = input(title="Min of Lookback Range", defval=5)
plotBull = input(title="Plot Bullish", defval=true)
plotHiddenBull = input(title="Plot Hidden Bullish", defval=true)
plotBear = input(title="Plot Bearish", defval=true)
plotHiddenBear = input(title="Plot Hidden Bearish", defval=false)


bearColor = color.purple
bullColor = color.green
hiddenBullColor = color.new(color.green, 80)
hiddenBearColor = color.new(color.red, 80)
textColor = color.white
noneColor = color.new(color.white, 100)



plot(shortTermRSI, title="RSI", linewidth=2, color=#8D1699)
plot(longTermRSI, title="longTermRSI", linewidth=2, color=color.orange)

hline(50, title="Middle Line", linestyle=hline.style_dotted)
obLevel = hline(70, title="Overbought", linestyle=hline.style_dotted)
osLevel = hline(30, title="Oversold", linestyle=hline.style_dotted)
fill(obLevel, osLevel, title="Background", color=longTermRSI >=50 ? color.green:color.purple, transp=65)  // longTermRSI >=50

plFound = na(pivotlow(shortTermRSI, lbL, lbR)) ? false : true
phFound = na(pivothigh(shortTermRSI, lbL, lbR)) ? false : true

_inRange(cond) =>
    bars = barssince(cond == true)
    rangeLower <= bars and bars <= rangeUpper

//------------------------------------------------------------------------------
// Regular Bullish

// shortTermRSI: Higher Low
oscHL = shortTermRSI[lbR] > valuewhen(plFound, shortTermRSI[lbR], 1) and _inRange(plFound[1])

// Price: Lower Low
priceLL = low[lbR] < valuewhen(plFound, low[lbR], 1)

bullCond = plotBull and priceLL and oscHL and plFound

plot(
	 plFound ? shortTermRSI[lbR] : na,
	 offset=-lbR,
	 title="Regular Bullish",
	 linewidth=2,
	 color=(bullCond ? bullColor : noneColor),
	 transp=0
	 )


plotshape(
	 bullCond ? shortTermRSI[lbR] : na,
	 offset=-lbR,
	 title="Regular Bullish Label",
	 text=" Bull ",
	 style=shape.labelup,
	 location=location.absolute,
	 color=bullColor,
	 textcolor=textColor,
	 transp=0
	 )

//------------------------------------------------------------------------------
// Hidden Bullish

// shortTermRSI: Lower Low
oscLL = shortTermRSI[lbR] < valuewhen(plFound, shortTermRSI[lbR], 1) and _inRange(plFound[1])

// Price: Higher Low
priceHL = low[lbR] > valuewhen(plFound, low[lbR], 1)

hiddenBullCond = plotHiddenBull and priceHL and oscLL and plFound

plot(
	 plFound ? shortTermRSI[lbR] : na,
	 offset=-lbR,
	 title="Hidden Bullish",
	 linewidth=2,
	 color=(hiddenBullCond ? hiddenBullColor : noneColor),
	 transp=0
	 )

plotshape(
	 hiddenBullCond ? shortTermRSI[lbR] : na,
	 offset=-lbR,
	 title="Hidden Bullish Label",
	 text=" H Bull ",
	 style=shape.labelup,
	 location=location.absolute,
	 color=bullColor,
	 textcolor=textColor,
	 transp=0
	 )

longCondition= longTermRSI >=50  and ( (bullCond or hiddenBullCond ) )  or  (strategy.position_size>0 and crossover(shortTermRSI,20) )
//last condition above is to leg in if you are already in the Long trade, 


strategy.entry(id="RSIDivLE", long=true,  when=longCondition)


//------------------------------------------------------------------------------
// Regular Bearish

// shortTermRSI: Lower High
oscLH = shortTermRSI[lbR] < valuewhen(phFound, shortTermRSI[lbR], 1) and _inRange(phFound[1])

// Price: Higher High
priceHH = high[lbR] > valuewhen(phFound, high[lbR], 1)

bearCond = plotBear and priceHH and oscLH and phFound

plot(
	 phFound ? shortTermRSI[lbR] : na,
	 offset=-lbR,
	 title="Regular Bearish",
	 linewidth=2,
	 color=(bearCond ? bearColor : noneColor),
	 transp=0
	 )

plotshape(
	 bearCond ? shortTermRSI[lbR] : na,
	 offset=-lbR,
	 title="Regular Bearish Label",
	 text=" Bear ",
	 style=shape.labeldown,
	 location=location.absolute,
	 color=bearColor,
	 textcolor=textColor,
	 transp=0
	 )

//------------------------------------------------------------------------------
// Hidden Bearish

// shortTermRSI: Higher High
oscHH = shortTermRSI[lbR] > valuewhen(phFound, shortTermRSI[lbR], 1) and _inRange(phFound[1])

// Price: Lower High
priceLH = high[lbR] < valuewhen(phFound, high[lbR], 1)

hiddenBearCond = plotHiddenBear and priceLH and oscHH and phFound

plot(
	 phFound ? shortTermRSI[lbR] : na,
	 offset=-lbR,
	 title="Hidden Bearish",
	 linewidth=2,
	 color=(hiddenBearCond ? hiddenBearColor : noneColor),
	 transp=0
	 )

plotshape(
	 hiddenBearCond ? shortTermRSI[lbR] : na,
	 offset=-lbR,
	 title="Hidden Bearish Label",
	 text=" H Bear ",
	 style=shape.labeldown,
	 location=location.absolute,
	 color=bearColor,
	 textcolor=textColor,
	 transp=0
	 )
	 
	 
//calculate stop Loss
stopLossVal = stopLoss==true ? ( strategy.position_avg_price -  (strategy.position_avg_price*0.08) ) : 0

//partial profit
strategy.close(id="RSIDivLE", comment="TP1", qty=strategy.position_size*3/4, when=strategy.position_size>0 and (longTermRSI>=takeProfitRSILevel or crossover(longTermRSI,90)))
strategy.close(id="RSIDivLE",comment="TP2",   qty=strategy.position_size*3/4 , when=crossover(longTermRSI,70))
strategy.close(id="RSIDivLE",comment="TP3",   qty=strategy.position_size/2, when=crossover(longTermRSI,65))
strategy.close(id="RSIDivLE",comment="TP4",   qty=strategy.position_size/2 , when=crossover(longTermRSI,60))

//close the whole position when stoploss hits or longTermRSI goes below 30
strategy.close(id="RSIDivLE",comment="Exit",    when=crossunder(longTermRSI,30) or close<stopLossVal)