Estrategia dinámica de stop loss y take profit del RSI


Fecha de creación: 2024-03-19 15:54:01 Última modificación: 2024-03-19 15:54:01
Copiar: 1 Número de Visitas: 623
1
Seguir
1617
Seguidores

Estrategia dinámica de stop loss y take profit del RSI

Resumen de la estrategia: La estrategia se basa en la relación entre el indicador RSI y el precio para optimizar el rendimiento de las operaciones mediante el ajuste dinámico de los puntos de parada y pérdida. La idea principal de la estrategia es aprovechar las características de sobrecompra y sobreventa del indicador RSI, combinar los cambios en el precio y la cantidad de transacciones, detenerse a tiempo en caso de desviación del RSI y controlar el riesgo mediante el stop loss dinámico.

Principio de la estrategia:

  1. Calcula el valor del indicador RSI y determina los límites de sobrecompra y sobreventa de acuerdo con los parámetros de entrada.
  2. Compara el RSI actual con el RSI de las líneas K anteriores para determinar si se produce una forma superior (isPeak) o una forma inferior (isBottom).
  3. En la aparición de la forma de la cima, si el precio actual es más alto que el punto más alto de la cima anterior y el volumen de transacciones es menor que el volumen de transacciones de la cima anterior, se genera una señal de venta.
  4. En la aparición de una forma de fondo, se genera una señal de compra si el precio actual está por debajo de los mínimos del fondo anterior y el volumen de transacciones es menor que el volumen de transacciones del fondo anterior.
  5. Una vez activada la señal de compra, se detiene cuando el precio retrocede a un mínimo anterior o el volumen de transacción es menor que el volumen de transacción anterior.
  6. Una vez activada la señal de venta, se detiene cuando el precio rebota hasta el máximo anterior o el volumen de transacciones es menor que el volumen de transacciones anterior.
  7. Después de abrir una posición, el precio de parada se establece en una cierta proporción del precio de apertura (%) para controlar el riesgo.

Las ventajas estratégicas:

  1. El bloqueo dinámico permite el bloqueo de ganancias en el inicio de una reversión de la tendencia y mejora los beneficios de la estrategia.
  2. El uso de los cambios en el volumen de tráfico como criterios auxiliares puede filtrar eficazmente las señales falsas y mejorar la precisión de las señales.
  3. La configuración de stop loss permite controlar eficazmente el umbral de riesgo de una sola operación y reducir la retirada de la estrategia.
  4. Los parámetros son ajustables para diferentes entornos de mercado y variedades de comercio.

El riesgo estratégico:

  1. En un mercado convulso, el RSI puede presentar frecuentes señales de sobrecompra y sobreventa, lo que hace que la estrategia genere más señales falsas.
  2. La configuración de stop loss puede causar una mayor retirada de la estrategia en el corto plazo.
  3. Las estrategias de seguimiento de tendencias pueden no funcionar tan bien en mercados de tendencia.

La dirección de la optimización:

  1. Se puede considerar la introducción de otros indicadores técnicos, como MACD, banda de Brin, etc., para mejorar la fiabilidad de la señal.
  2. Optimización de los umbrales de pérdidas de paradas, ajustados según las características de las diferentes variedades y la dinámica del entorno del mercado.
  3. Admite un módulo de gestión de posiciones para ajustar el tamaño de las posiciones en función de la volatilidad del mercado y el riesgo de la cuenta.
  4. Optimización de los parámetros de la estrategia para encontrar la combinación óptima de parámetros.

En resumen: La estrategia de parada de pérdidas dinámicas de RSI se basa en la desviación de la relación entre el indicador RSI y el precio, combina los cambios en el volumen de negocios, establece una parada dinámica a tiempo al inicio de la tendencia y, al mismo tiempo, establece una parada dinámica para controlar el riesgo. La ventaja de esta estrategia es que puede bloquear las ganancias al comienzo de la reversión de la tendencia, reducir la retirada de la estrategia y tener cierta adaptabilidad.

Código Fuente de la Estrategia
/*backtest
start: 2024-03-11 00:00:00
end: 2024-03-15 09:00:00
period: 3m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("RMM_byMR", overlay=true)

// RSI uzunluğu girişi
rsiLength = input(14, title="RSI Uzunluğu")

// Tepe ve dip seviyeleri için girişler
overboughtLevel = input(70, title="Aşırı Alım Seviyesi")
oversoldLevel = input(30, title="Aşırı Satım Seviyesi")

// RSI hesaplama
rsiValue = rsi(close, rsiLength)

// Son tepe noktalarını tespit etme // Son dip noktalarını tespit etme
isPeak = rsiValue[2] > overboughtLevel and rsiValue[2] > rsiValue[1] and rsiValue[2] > rsiValue[3] and (rsiValue[1] > rsiValue or rsiValue[3] > rsiValue[4])
isBottom = rsiValue[2] < oversoldLevel and rsiValue[2] < rsiValue[1] and rsiValue[2] < rsiValue[3] and (rsiValue[1] < rsiValue or rsiValue[3] < rsiValue[4])

// Önceki tepe noktalarını tespit etme
prevPeak = valuewhen(isPeak, rsiValue[2], 1)
prevPeakHighPrice = valuewhen(isPeak, high[2], 1)
volumePeak = valuewhen(isPeak, volume[1]+volume[2]+volume[3], 1)
prevPeakBarIndex = valuewhen(isPeak, bar_index, 1)

// Önceki dip noktalarını tespit etme
prevBottom = valuewhen(isBottom, rsiValue[2], 1)
prevBottomLowPrice = valuewhen(isBottom, low[2], 1)
volumeBottom = valuewhen(isBottom, volume[1]+volume[2]+volume[3], 1)
prevBottomBarIndex = valuewhen(isBottom, bar_index, 1)

// Tepe noktasında satış sinyali
isSellSignal = prevPeakBarIndex > prevBottomBarIndex and isPeak and rsiValue[2] < prevPeak and high[2] > prevPeakHighPrice and (volume[1]+volume[2]+volume[3]) < volumePeak
isBuyTakeProfit = isPeak and ((rsiValue[2] < prevPeak and high[2] > prevPeakHighPrice) or (rsiValue[2] < prevPeak and (volume[1]+volume[2]+volume[3]) < volumePeak))

// Dip noktasında alış sinyali
isBuySignal = prevBottomBarIndex > prevPeakBarIndex and isBottom and rsiValue[2] > prevBottom and low[2] < prevBottomLowPrice and (volume[1]+volume[2]+volume[3]) < volumeBottom
isSellTakeProfit = isBottom and ((rsiValue[2] > prevBottom and low[2] < prevBottomLowPrice) or (rsiValue[2] > prevBottom and (volume[1]+volume[2]+volume[3]) < volumeBottom))

sellTakeProfit = valuewhen(isSellTakeProfit, low, 1)
buyTakeProfit = valuewhen(isBuyTakeProfit, high, 1)

// isSellTakeProfit koşulu için işaretlemeyi yap
plotshape(isSellTakeProfit, style=shape.triangleup, location=location.abovebar, color=color.green, size=size.small, title="Sell Take Profit", offset=-2) 

// isBuyTakeProfit koşulu için işaretlemeyi yap
plotshape(isBuyTakeProfit, style=shape.triangledown, location=location.belowbar, color=color.red, size=size.small, title="Buy Take Profit", offset=-2)

buyComment = "Buy \n Rsi:" + tostring(round(rsiValue[2], 2)) + " \n Low:" + tostring(round(low[2],2)) + " \n Hacim:" + tostring(round(volume[1]+volume[2]+volume[3],2))
sellComment = "Sell \n Rsi:" + tostring(round(rsiValue[2], 2)) + " \n High:" + tostring(round(high[2],2)) + " \n Hacim:" + tostring(round(volume[1]+volume[2]+volume[3],2)) 

// Alış sinyali durumunda uzun pozisyon aç
if (isBuySignal)
    strategy.entry("Buy", strategy.long, comment = buyComment )
    strategy.exit("SL", "Buy", stop=close * 0.98)

// Satış sinyali durumunda kısa pozisyon aç
if (isSellSignal)
    strategy.entry("Sell", strategy.short, comment = sellComment )
    strategy.exit("SL","Sell", stop=close * 1.02)
// Limit değerini sonradan belirleme


// Alış sinyali durumunda uzun pozisyon kapat
if (isBuyTakeProfit)
    strategy.close("Buy", comment="TP")

// Satış sinyali durumunda kısa pozisyon kapat
if (isSellTakeProfit)
    strategy.close("Sell", comment="TP")