Estrategia de trading con divergencia RSI


Fecha de creación: 2023-10-25 16:47:14 Última modificación: 2023-10-25 16:47:14
Copiar: 0 Número de Visitas: 846
1
Seguir
1617
Seguidores

Estrategia de trading con divergencia RSI

Descripción general

La estrategia de negociación de desviación del indicador RSI identifica la desviación entre el indicador RSI y el movimiento de los precios para dar señales de compra y venta. La estrategia también tiene funciones como parar, detener y rastrear el stop, lo que permite controlar el riesgo de manera efectiva.

El principio

La estrategia se basa principalmente en la desviación del indicador RSI para identificar la oportunidad de negociación. En concreto, la estrategia primero calcula el valor del RSI en un período determinado, y luego dibuja una línea de tendencia del indicador RSI. Al mismo tiempo, la estrategia también dibuja una línea de tendencia del precio.

Si se identifica que el RSI sube a la baja y el precio baja a la alta, se da una señal de compra. Si se identifica que el RSI baja a la alta y el precio sube a la baja, se da una señal de venta. Una vez que se forma una señal de negociación, la estrategia puede realizar una negociación adecuada de acuerdo con el tamaño del valor del RSI.

Además, la estrategia también establece las funciones de stop loss, stop loss y tracking stop loss. El stop loss controla el riesgo de pérdida, el stop loss puede bloquear las ganancias y el tracking stop loss puede mantener las ganancias en funcionamiento. Estas configuraciones pueden administrar eficazmente el riesgo de cada operación.

Las ventajas

La estrategia de desviación del RSI tiene las siguientes ventajas:

  1. La captura de la desviación del indicador RSI permite detectar el cambio de precio con anticipación.

  2. El indicador RSI es ampliamente utilizado, y la mayoría de los softwares de negociación tienen el indicador RSI incorporado.

  3. Los parámetros del RSI son flexibles y se pueden ajustar según el ciclo de observación del mercado para adaptarse a diferentes situaciones.

  4. La combinación de las opciones Stop Loss, Stop Stop y Stop Loss Track permite un control efectivo del riesgo de cada operación.

  5. La estrategia es negociar con una frecuencia de señales moderada y evitar operaciones demasiado intensas.

  6. Las ideas estratégicas son claras y fáciles de entender, fáciles de implementar en un programa de computadora.

El riesgo

La estrategia también tiene sus riesgos:

  1. La desviación del RSI no es 100% fiable y puede generar falsas señales. Se requiere una combinación de señales de filtración de otros indicadores.

  2. El RSI puede desactivarse en situaciones de tendencia y debe evitarse.

  3. La configuración incorrecta de los parámetros del RSI también afecta la eficacia de la estrategia. La configuración de un ciclo demasiado corto aumenta la frecuencia de las operaciones y el riesgo.

  4. Si el punto de parada es demasiado pequeño, puede detenerse prematuramente; si el punto de parada es demasiado grande, no se puede controlar el riesgo de manera efectiva.

  5. El tracking stop puede ser prematuro cuando los precios fluctúan fuertemente. Es necesario establecer un tracking stop razonable en combinación con la volatilidad del mercado.

El riesgo puede mitigarse con las siguientes medidas:

  1. Añadir otros indicadores, como MACD, línea de Brin, etc. para filtrar la señal y reducir la falsa señal.

  2. La estrategia se utiliza sólo en la composición de las ciudades convulsivas, evitando las situaciones de tendencias evidentes.

  3. Optimizar la configuración de los parámetros del RSI, seleccionar la mejor longitud de ciclo y probar las preferencias de parámetros de diferentes mercados.

  4. Establecer una posición de parada y parada razonable de acuerdo con los datos de retroalimentación histórica.

  5. La magnitud de los trazados de pérdidas se ajusta según la volatilidad del mercado y las preferencias de riesgo.

Dirección de optimización

La estrategia puede ser optimizada en los siguientes aspectos:

  1. Se añaden otros indicadores para filtrar las señales de negociación y mejorar la fiabilidad de las señales.

  2. Utiliza técnicas de aprendizaje automático para optimizar la configuración de los parámetros RSI.

  3. Diseñar un algoritmo de stop loss dinámico de acuerdo con los diferentes patrones de movimiento del mercado. Por ejemplo, ampliar el stop loss en el caso de movimientos de temblor y reducir el stop loss en el caso de movimientos de tendencia.

  4. Diseñar algoritmos de gestión de posiciones dinámicas que ajusten el tamaño de las posiciones de cada transacción en función de factores como la volatilidad del mercado.

  5. Introducir el concepto de fluctuación en el seguimiento de los estancamientos, y establecer la distancia de seguimiento de los estancamientos en función de la intensidad de las fluctuaciones de precios.

  6. El objetivo de esta estrategia es tratar de extenderla a otras variedades de mercados como el Forex y las criptomonedas.

  7. Construir un sistema de transacciones cuantitativas para la automatización de las transacciones estratégicas.

Resumir

La estrategia de comercio de desviación del RSI genera señales de comercio mediante la captura de la desviación entre el indicador RSI y el movimiento del precio. La estrategia tiene la ventaja de ser simple y clara, fácil de automatizar. Al mismo tiempo, los paros, paradas y paradas de seguimiento de paradas también pueden controlar el riesgo de manera efectiva.

Código Fuente de la Estrategia
/*backtest
start: 2023-09-24 00:00:00
end: 2023-10-24 00:00:00
period: 4h
basePeriod: 15m
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/
// © faytterro

//@version=5
// strategy("RSI Divergence Strategy", overlay=true, scale = scale.none)
rsilen=input.int(14, title="rsi length")
rsisrc=input(close, title="source")
x=ta.rsi(rsisrc,rsilen)
len=input.int(14, title="RSI Divergence length", maxval=500)
tpb = input.float(25, title="take profit", group = "buy", step = 0.5)
sb = input.float(5, title="stop", group = "buy", step = 0.5)
tsb = input.float(0.25, title="trailing stop", group = "buy", step = 0.5)
tps = input.float(25, title="take profit", group = "sell", step = 0.5)
ss =input.float(5, title="stop", group = "sell", step = 0.5)
tss = input.float(0.25, title="trailing stop", group = "sell", step = 0.5)
src=close
extrapolation=0
zoom=input.int(0, title="zoom", maxval=27, minval=-27)
hline(300-zoom*10, color=color.rgb(54, 58, 69, 100))
hline(10, color=color.rgb(54, 58, 69, 100))
// for ax+b
xo=0.0
yo=0.0
xyo=0.0
xxo=0.0
for i=0 to len-1
    xo:= xo + i/(len)
    yo:= yo + x[len-1-i]/(len)
    xyo:= xyo + i*x[len-1-i]/(len)
    xxo:= xxo + i*i/(len)
dnm=ta.lowest(low,200)
dizi=array.new_float(len*2+1+extrapolation)
// linedizi=array.new_line()
a=(xo*yo-xyo)/(xo*xo-xxo)
b=yo-a*xo
for i=0 to len-1+extrapolation
    array.set(dizi,i,a*i+b)
//// for src
// for ax+b
xo2=0.0
yo2=0.0
xyo2=0.0
xxo2=0.0
for i=0 to len-1
    xo2:= xo2 + i/(len)
    yo2:= yo2 + src[len-1-i]/(len)
    xyo2:= xyo2 + i*src[len-1-i]/(len)
    xxo2:= xxo2 + i*i/(len)

dizi2=array.new_float(len*2+1+extrapolation)
// linedizi2=array.new_line()
a2=(xo2*yo2-xyo2)/(xo2*xo2-xxo2)
b2=yo2-a*xo2
for i=0 to len-1+extrapolation
    array.set(dizi2,i,a2*i+b2)
ttk=((array.get(dizi,0)<array.get(dizi,1)) and (array.get(dizi2,0)>array.get(dizi2,1)))? 1 : 
 ((array.get(dizi,0)>array.get(dizi,1)) and (array.get(dizi2,0)<array.get(dizi2,1)))? -1 : 0
cg=((array.get(dizi,0)<array.get(dizi,1)) and (array.get(dizi2,0)>array.get(dizi2,1)))// and ta.highest(ttk[1],len/2)<1)
cr=((array.get(dizi,0)>array.get(dizi,1)) and (array.get(dizi2,0)<array.get(dizi2,1)))// and ta.lowest(ttk[1],len/2)>-1)
bgcolor(color=(cg and ta.highest(ttk[1],len/2)<1)? color.rgb(76, 175, 79, 50) : 
 (cr and ta.lowest(ttk[1],len/2)>-1)? color.rgb(255, 82, 82, 50) : na, offset=0, display=display.none)
plot(x)

// for ax+b
xo3=0.0
yo3=0.0
xyo3=0.0
xxo3=0.0
for i=0 to len-1
    xo3:= xo3 + i/(len)
    yo3:= yo3 + x[len-1-i+(ta.barssince(cg))]/(len)
    xyo3:= xyo3 + i*x[len-1-i+(ta.barssince(cg))]/(len)
    xxo3:= xxo3 + i*i/(len)

dizi3=array.new_float(len*2+1+extrapolation)
// linedizi3=array.new_line()
a3=(xo3*yo3-xyo3)/(xo3*xo3-xxo3)
b3=yo3-a3*xo3
for i=0 to len-1+extrapolation
    array.set(dizi3,i,a3*i+b3)

// for ax+b
xo4=0.0
yo4=0.0
xyo4=0.0
xxo4=0.0
for i=0 to len-1
    xo4:= xo4 + i/(len)
    yo4:= yo4 + x[len-1-i+(ta.barssince(cr))]/(len)
    xyo4:= xyo4 + i*x[len-1-i+(ta.barssince(cr))]/(len)
    xxo4:= xxo4 + i*i/(len)

dizi4=array.new_float(len*2+1+extrapolation)
// linedizi4=array.new_line()
a4=(xo4*yo4-xyo4)/(xo4*xo4-xxo4)
b4=yo4-a4*xo4
for i=0 to len-1+extrapolation
    array.set(dizi4,i,a4*i+b4)

// line=line.new((last_bar_index-ta.barssince(cg)-len),
//  array.get(dizi3,0), 
//  last_bar_index-ta.barssince(cg),
//  array.get(dizi3,len-1), color=color.rgb(0,255,0), width=2)
// line2=line.new((last_bar_index-ta.barssince(cr)-len),
//  array.get(dizi4,0), 
//  last_bar_index-ta.barssince(cr),
//  array.get(dizi4,len-1), color=color.rgb(255, 0, 0, 0), width=2)
// line.delete(line[1])
// line.delete(line2[1])

alert=((array.get(dizi,0)<array.get(dizi,1)) and (array.get(dizi2,0)>array.get(dizi2,1)) and ta.highest(ttk[1],len/2)<1)
 or ((array.get(dizi,0)>array.get(dizi,1)) and (array.get(dizi2,0)<array.get(dizi2,1)) and ta.lowest(ttk[1],len/2)>-1)
alertcondition(alert)
hline(50)
rs=hline(30)
rss=hline(70)
fill(rs, rss, color=color.rgb(126, 87, 194, 90), title="RSI Background Fill")

longCondition = cg and ta.highest(ttk[1],len/2)<1 
if (longCondition)
    strategy.entry("Long", strategy.long)
    strategy.exit("exit long", "Long", limit = close*(100+tpb)/100 , stop =close*(100-sb)/100 , trail_price = close , trail_offset = close*tsb)

shortCondition = cr and ta.lowest(ttk[1],len/2)>-1 
if (shortCondition)
    strategy.entry("Short", strategy.short)
    strategy.exit("exit short", "Short", limit = close*(100-tps)/100, stop = close*(100+ss)/100, trail_price = close , trail_offset = close*tss)