Estrategia de negociación compuesta de control de riesgo basada en RSI rápido


Fecha de creación: 2023-11-13 11:36:34 Última modificación: 2023-11-13 11:36:34
Copiar: 3 Número de Visitas: 646
1
Seguir
1617
Seguidores

Estrategia de negociación compuesta de control de riesgo basada en RSI rápido

Descripción general

Esta estrategia está diseñada para la plataforma de comercio en tiempo real BitMEX, que analiza los indicadores RSI rápidos, en combinación con varios indicadores técnicos para filtrar señales y lograr un seguimiento de la tendencia de las transacciones de alta eficiencia. La estrategia también establece un mecanismo de gestión de fondos y de stop loss para controlar eficazmente el riesgo de las transacciones.

Principio de estrategia

  1. Calcula el RSI rápido, con los parámetros establecidos en la línea de 7 días, la línea de sobreventa de 25, la línea de sobreventa de 75. Cuando el RSI cruza la línea de sobreventa, es una señal de sobreventa; cuando el RSI cruza la línea de sobreventa, es una señal de sobreventa.

  2. La configuración de filtración para las entidades de línea K. Requiere que el disco abierto sea de línea negra y que la longitud de la entidad no sea menor que el 20% de la entidad promedio de ayer.

  3. La selección de la configuración de color de la línea K. Se requiere que los últimos 4 K sean blancos cuando son negativos, y que los últimos 4 K sean más cuando son positivos.

  4. Configuración de la lógica de stop loss. Cuando el precio se mueve en la dirección negativa, la parada de la posición de liquidación.

  5. Configurar un mecanismo de protección contra rebotes. Cuando el precio se mueve en la dirección favorable y alcanza la línea de parada, emita una nueva señal para establecer una posición.

  6. Establecer la gestión de fondos. Utilice el porcentaje de fondos fijos para construir la posición, duplicando la posición por cada pérdida.

Análisis de las ventajas

  1. La configuración de los parámetros RSI rápidos es razonable y permite capturar rápidamente la tendencia. La combinación de la entidad de la línea K y el juicio del color, puede filtrar eficazmente las brechas falsas.

  2. Las señales de filtración multicapa pueden reducir el número de transacciones y aumentar la tasa de éxito.

  3. La estrategia tiene un mecanismo de stop loss incorporado que permite controlar eficazmente las pérdidas individuales.

  4. La adopción de un ajuste dinámico de posiciones para lograr una gestión de fondos moderadamente radical.

  5. La plataforma permite a los traders personalizar el horario de transacción para evitar las conmociones de los eventos importantes.

Riesgo y optimización

  1. La velocidad excesiva puede perder oportunidades de negociación. Se pueden flexibilizar los parámetros adecuadamente y aumentar la flexibilidad.

  2. No se puede evaluar eficazmente el final de la tendencia. Se puede considerar en combinación con otros indicadores para evaluar una posible reversión.

  3. El método de ajuste de posición es demasiado radical para introducir el método de bloqueo de posición.

  4. Se pueden ajustar los parámetros de acuerdo a los diferentes mercados para lograr una combinación de parámetros más óptima.

Resumir

Esta estrategia es más robusta en general, puede determinar la dirección de la tendencia a través del RSI rápido, y luego combinar la señal de filtración de múltiples indicadores técnicos para obtener un mejor rendimiento en la tendencia. Al mismo tiempo, la estrategia tiene cierto espacio de optimización, puede adaptarse a diferentes entornos de mercado mediante el ajuste de la combinación de parámetros y tiene una gran utilidad.

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

//Noro
//2018

//@version=2
strategy(title = "Robot BitMEX Fast RSI v1.0", shorttitle = "Robot BitMEX Fast RSI v1.0", overlay = false, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 10)

//Settings
needlong = input(true, defval = true, title = "Long")
needshort = input(true, defval = true, title = "Short")
usemar = input(true, defval = true, title = "Use Martingale")
capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Capital, %")
rsiperiod = input(7, defval = 7, minval = 2, maxval = 100, title = "RSI Period")
rsilimit = input(25, defval = 25, minval = 1, maxval = 30, title = "RSI limit")
rsibars = input(1, defval = 1, minval = 1, maxval = 20, title = "RSI Bars")
useocf = input(true, defval = true, title = "Use Open Color Filter")
useccf = input(true, defval = true, title = "Use Close Color Filter")
openbars = input(4, defval = 4, minval = 1, maxval = 20, title = "Open Color Bars")
closebars = input(1, defval = 1, minval = 1, maxval = 20, title = "Close Color Bars")
useobf = input(true, defval = true, title = "Use Open Body Filter")
usecbf = input(true, defval = true, title = "Use Close Body Filter")
openbody = input(20, defval = 20, minval = 0, maxval = 1000, title = "Open Body Minimum, %")
closebody = input(50, defval = 50, minval = 0, maxval = 1000, title = "Close Body Minimum, %")
usecnf = input(true, defval = true, title = "Use Close Norma Filter")
fromyear = input(1900, defval = 1900, minval = 1900, maxval = 2100, title = "From Year")
toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year")
frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month")
tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month")
fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From Day")
today = input(31, defval = 31, minval = 01, maxval = 31, title = "To Day")

//RSI
uprsi = rma(max(change(close), 0), rsiperiod)
dnrsi = rma(-min(change(close), 0), rsiperiod)
rsi = dnrsi == 0 ? 100 : uprsi == 0 ? 0 : 100 - (100 / (1 + uprsi / dnrsi))
uplimit = 100 - rsilimit
dnlimit = rsilimit
rsidn = rsi < dnlimit ? 1 : 0
rsiup = rsi > uplimit ? 1 : 0
rsidnok = sma(rsidn, rsibars) == 1
rsiupok = sma(rsiup, rsibars) == 1

//Body Filter
body = abs(close - open)
abody = sma(body, 10)
openbodyok = body >= abody / 100 * openbody or useobf == false
closebodyok = body >= abody / 100 * closebody or usecbf == false

//Color Filter
bar = close > open ? 1 : close < open ? -1 : 0
gbar = bar == 1 ? 1 : 0
rbar = bar == -1 ? 1 : 0
opengbarok = sma(gbar, openbars) == 1 or useocf == false
openrbarok = sma(rbar, openbars) == 1 or useocf == false
closebarok = (strategy.position_size > 0 and bar == 1) or (strategy.position_size < 0 and bar == -1) or useccf == false

//Norma Filter
norma = (rsi > dnlimit and rsi < uplimit) or usecnf == false

//Signals
up = openrbarok and rsidnok and openbodyok and (strategy.position_size == 0 or close < strategy.position_avg_price)
dn = opengbarok and rsiupok and openbodyok and (strategy.position_size == 0 or close > strategy.position_avg_price)
exit = ((strategy.position_size > 0 and closebarok and norma) or (strategy.position_size < 0 and closebarok and norma)) and closebodyok

//Indicator
plot(rsi, color = blue, linewidth = 3, title = "Double RSI")
plot(uplimit, color = black, title = "Upper Line")
plot(dnlimit, color = black, title = "Lower Line")
colbg = rsi > uplimit ? red : rsi < dnlimit ? lime : na
bgcolor(colbg, transp = 20)

//Trading
profit = exit ? ((strategy.position_size > 0 and close > strategy.position_avg_price) or (strategy.position_size < 0 and close < strategy.position_avg_price)) ? 1 : -1 : profit[1]
mult = usemar ? exit ? profit == -1 ? mult[1] * 2 : 1 : mult[1] : 1
lot = strategy.position_size == 0 ? strategy.equity / close * capital / 100 * mult : lot[1]

if up
    if strategy.position_size < 0
        strategy.close_all()
        
    strategy.entry("Long", strategy.long, needlong == false ? 0 : lot, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))

if dn
    if strategy.position_size > 0
        strategy.close_all()
        
    strategy.entry("Short", strategy.short, needshort == false ? 0 : lot, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))
    
if time > timestamp(toyear, tomonth, today, 23, 59) or exit
    strategy.close_all()