Estrategia de trading bidireccional de entrada y salida del RSI


Fecha de creación: 2023-09-28 16:09:39 Última modificación: 2023-09-28 16:09:39
Copiar: 2 Número de Visitas: 697
1
Seguir
1617
Seguidores

Descripción general

Esta estrategia utiliza el indicador RSI para determinar la tendencia del mercado y emitir señales de negociación en áreas de sobreventa y sobreventa con el objetivo de capturar el movimiento de ajuste de la línea corta del mercado. Al mismo tiempo, combina el indicador de la línea de paridad y la lógica de stop loss para filtrar las señales de negociación y controlar el riesgo.

Principio de estrategia

  1. Calcula el valor del indicador RSI ((14)), con una línea de sobreventa de 67 y una línea de sobreventa de 44.

  2. Cuando el RSI supera la línea de compra, emite una señal de venta; cuando el RSI supera la línea de venta, emite una señal de compra.

  3. El filtro de línea media superpuesta solo envía una señal de compra y venta en el RSI cuando el precio de cierre está por debajo del precio promedio de ayer; y solo en el RSI cuando el precio de cierre está por encima del precio promedio de ayer.

  4. Configuración de la lógica de stop-loss. Se puede elegir el número de puntos fijos para detener el stop-loss, o el stop-loss según el valor del RSI.

Análisis de las ventajas

  1. El indicador RSI se utiliza para determinar sobrecompra y sobreventa y capturar las oportunidades de ajuste de la línea corta.

  2. El filtro se utiliza en conjunción con la línea de equilibrio para evitar la operación inversa en una tendencia.

  3. Establezca un stop loss para controlar las pérdidas individuales.

  4. La tendencia a la baja es una de las razones por las que los inversores están más dispuestos a invertir sus inversiones.

Riesgos y soluciones

  1. El RSI es retrogrado y puede desviarse y dar lugar a falsas señales. La solución es ajustar los parámetros adecuadamente o usarlos en combinación con otros indicadores.

  2. Los puntos de parada fijos pueden ser demasiado grandes o demasiado pequeños. Se puede elegir un trailing stop más flexible.

  3. El parón fijo puede pararse prematuramente o tener un número de puntos de parón demasiado pequeño. Se puede considerar un parón basado en el valor RSI o ATR.

  4. La imposibilidad de filtrar eficazmente las tendencias de movimiento, que pueden conducir a la apertura y pérdida de posiciones frecuentes. Se pueden ajustar los parámetros del RSI o agregar otras condiciones de filtrado.

Dirección de optimización

  1. Prueba de la eficacia del indicador RSI en diferentes parámetros de ciclo.

  2. Ajustar los parámetros del RSI para probar diferentes líneas de sobrecompra y sobreventa.

  3. Prueba diferentes tipos de medias móviles u otros indicadores de filtración.

  4. Prueba el efecto de la pérdida de frenado fijo y la pérdida de frenado dinámico.

  5. Optimizar el valor de los stop-loss para que se ajusten mejor a las leyes de la volatilidad del mercado.

  6. Las nuevas condiciones de filtración de la entrada evitan que se produzca una caída de la bolsa.

  7. Considere la posibilidad de combinar la verificación con varios períodos de tiempo para mejorar la calidad de la señal.

Resumir

Esta estrategia utiliza el indicador RSI para determinar el estado de sobreventa y sobreventa, y combina la línea de paridad y el stop loss para realizar operaciones bidireccionales. Puede capturar oportunidades de reversión del mercado en el corto plazo.

Código Fuente de la Estrategia
/*backtest
start: 2022-09-21 00:00:00
end: 2023-09-27 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//© профешинил хомячело
//@version = 4

strategy("RSI Strategy Professional Хомячело", overlay=false)
length = input( 14 )
overSold = input( 44 )
overBought = input( 67 )
price = open
rsi = rsi(price, length)
band1 = hline(overSold, "overSold12", color=#C0C0C0)
band0 = hline(overBought, "overBought12", color=#C0C0C0)
plot(rsi, "RSI", color=color.red)
fill(band1, band0, color=color.black, transp=90, title="Background")
src = close
a = sma(src, 1)
aaa = strategy.opentrades + 1

n = input(defval = 0.0576923077, title = "AvgPrice - n")
//n = 0.0576923077

buysignal = crossover(rsi, overSold) and (a < (strategy.position_avg_price - n) or strategy.opentrades == 0)
sellsignal = crossunder(rsi, overBought) and (a > (strategy.position_avg_price + n) or strategy.opentrades == 0)


// crossover(rsi, overSold)
// crossunder(rsi, overBought)
if (not na(rsi))
    if(buysignal)
        strategy.entry("LONG", strategy.long, comment = tostring(a) + "\n(" + tostring(aaa) + ")")
        n += 1000
    if(sellsignal)
        strategy.entry("SHORT", strategy.short, comment = tostring(a) + "\n(" + tostring(aaa) + ")")
        n += 1000

//лонги орні       
    if(rsi < 15 and strategy.opentrades != 5 and a < (strategy.position_avg_price - n))
        strategy.entry("LONG", strategy.long, comment = "ЙОБАНИЙ НАСРАВ ТА БЕРИ ЛОНГ НА ВСЬО ШО Є НАХУЙ\n" + tostring(a) + "\n(" + tostring(aaa) + "!!!)")
    if(rsi < 20 and strategy.opentrades != 5 and a < (strategy.position_avg_price - n))
        strategy.entry("LONG", strategy.long, comment = "ЛОНГ НА ВСЮ КОТЛЄТУ\n" + tostring(a) + "\n(" + tostring(aaa) + "!!!)")
//шорти орні
    if(rsi > 85 and strategy.opentrades != 5 and a < (strategy.position_avg_price - n))
        strategy.entry("SHORT", strategy.short, comment = "ЙОБАНИЙ НАСРАВ ТА БЕРИ ШОРТ НА ВСЬО ШО Є НАХУЙ\n" + tostring(a) + "\n(" + tostring(aaa) + "!!!)")
    if(rsi > 80 and strategy.opentrades != 5 and a < (strategy.position_avg_price - n))
        strategy.entry("SHORT", strategy.short, comment = "ШОРТ НА ВСЮ КОТЛЄТУ\n" + tostring(a) + "\n(" + tostring(aaa) + "!!!)")


//стоп-лосс і ціль

//rsi
rsion = input(defval = false, title = "Тейк-профіт по RSI")
rcl = input(defval = 73.0, title = "RSI тейк по лонгу")
rcs = input(defval = 44.0, title = "RSI тейк по шорту")
possize = input(defval = 250.0, title = "Маржа")
posp = input(defval = 3.0, title = "Плече")

//tick
ut = input(defval = false, title = "Тейк-профіт")
tar = input(defval = 4500.0, title = "Тейк-профіт у тіках")
us = input(defval = false, title = "Стоп-лосс")
stop = input(defval = 0.0, title = "Стоп-лосс у тіках")
tar:=tar/syminfo.mintick
stop:=stop/syminfo.mintick

if(ut==true and us==false)
    strategy.exit(id="LX", from_entry = "LONG", profit = tar, comment = "ТейкL")
    strategy.exit(id="SX", from_entry = "SHORT", profit = tar, comment = "ТейкS")
if(us==true and ut==false)
    strategy.exit(id="LX", from_entry = "LONG", loss = stop, comment = "СтопL")
    strategy.exit(id="SX", from_entry = "SHORT", loss = stop, comment = "СтопS")
    
if(ut==true and us==true)
    strategy.exit(id="LX", from_entry = "LONG", profit = tar, loss = stop, comment ="Тейк/СтопL")
    strategy.exit(id="SX", from_entry = "SHORT", profit = tar, loss = stop, comment ="Тейк/СтопS")
    
//закриття по rsi
if(rsion == 1 )
    pr = round(((a / strategy.position_avg_price - 1) * possize * posp), 2)
    ppr = round(((a / strategy.position_avg_price - 1) * 100 * posp), 2)
    spr = round((1 - (a / strategy.position_avg_price)) * possize * posp, 2)
    sppr = round((100 - (a / strategy.position_avg_price * 100)) * posp, 2)
    
    if(rsi > rcl)
        strategy.close(id="LONG", comment = "LT\n" + tostring(ppr) + "%\n" + tostring(pr) + "$\n" + tostring(a))
    if(rsi < rcs)
        strategy.close(id="SHORT", comment = "ST\n" + tostring(sppr) + "%\n" + tostring(spr) + "$\n" + tostring(a))