Estrategia RSI basada en la mejora de la probabilidad


Fecha de creación: 2023-12-20 15:05:05 Última modificación: 2023-12-20 15:05:05
Copiar: 0 Número de Visitas: 666
1
Seguir
1621
Seguidores

Estrategia RSI basada en la mejora de la probabilidad

Descripción general

Esta estrategia es una estrategia simple de simplemente hacer más, usando el indicador RSI para determinar sobrecompra y sobreventa. La hemos mejorado, añadiendo un stop loss y al mismo tiempo integrando un módulo de probabilidad para aumentar la probabilidad de abrir una posición solo cuando la probabilidad de una operación rentable en un período reciente es mayor o igual al 51%. Esto mejora considerablemente el rendimiento de la estrategia.

Principio de estrategia

La estrategia utiliza el indicador RSI para determinar si el mercado está sobrecomprando o sobrevendendo. Específicamente, cuando el RSI está por debajo del límite inferior de la zona de sobreventa establecida; cuando el RSI está por debajo del límite superior de la zona de sobreventa establecida. Además, establecemos un porcentaje de stop loss.

La clave es que hemos integrado un módulo de evaluación de probabilidad. Este módulo calcula la proporción de más operaciones que se han hecho o perdido en el último período de tiempo (con el parámetro de lookback). Se abre una posición adicional solo cuando la probabilidad de una operación ganadora reciente es mayor o igual al 51%. Esto reduce considerablemente la posibilidad de operaciones perdedoras.

Análisis de las ventajas

Se trata de una estrategia RSI de probabilidad aumentada que tiene las siguientes ventajas sobre la estrategia RSI normal:

  1. Aumentar la configuración de stop loss para limitar las pérdidas individuales y bloquear las ganancias
  2. Modulo de probabilidad integrado para evitar mercados de baja probabilidad de ganancias vrf
  3. Los parámetros del módulo de probabilidad son ajustables y se pueden optimizar para diferentes entornos de mercado
  4. Un mecanismo simple, comprensible y fácil de implementar

Análisis de riesgos

La estrategia también tiene ciertos riesgos:

  1. No se puede aprovechar la caída de los mercados haciendo más.
  2. Un error de cálculo en el módulo de probabilidad puede hacer que se pierda una oportunidad.
  3. Incapacidad para determinar la combinación óptima de parámetros y gran variación de rendimiento en diferentes entornos de mercado
  4. La suspensión de pérdidas es demasiado flexible y las pérdidas individuales pueden ser aún más elevadas.

Resolución de las mismas:

  1. Se puede considerar la inclusión de un mecanismo de descubierto
  2. Optimización de los parámetros del módulo de probabilidad para reducir la probabilidad de error
  3. Parámetros de optimización dinámica con métodos de aprendizaje automático
  4. Establecer un nivel de pérdidas más conservador para reducir el espacio de pérdidas individuales

Dirección de optimización

La estrategia puede ser optimizada en los siguientes aspectos:

  1. Añadir módulos de Forex para el comercio bidireccional
  2. Configuración de parámetros de optimización dinámica con métodos de aprendizaje automático
  3. Prueba con otros indicadores para determinar el exceso de compra y venta
  4. Optimización de las estrategias de stop loss y optimización de la relación ganancias/pérdidas
  5. Combinación de otros factores para mejorar la probabilidad de filtración de señales

Resumir

Esta estrategia es una estrategia simple de RSI, que se mejora con el módulo de determinación de la probabilidad de integración. En comparación con la estrategia RSI normal, se puede filtrar algunas operaciones perdedoras, se puede optimizar la retirada general y la pérdida de ganancias. Posteriormente, se pueden mejorar los aspectos de la medición, la optimización dinámica, etc., para que la estrategia sea más sólida.

Código Fuente de la Estrategia
/*backtest
start: 2023-11-19 00:00:00
end: 2023-12-19 00:00:00
period: 1h
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/
// © thequantscience

//@version=5
strategy("Reinforced RSI",
     overlay = true,
     default_qty_type = strategy.percent_of_equity, 
     default_qty_value = 100,
     pyramiding = 1,
     currency = currency.EUR, 
     initial_capital = 1000,
     commission_type = strategy.commission.percent, 
     commission_value = 0.07)

lenght_rsi = input.int(defval = 14, minval = 1, title = "RSI lenght: ")
rsi = ta.rsi(close, length = lenght_rsi)

rsi_value_check_entry = input.int(defval = 35, minval = 1, title = "Oversold: ")
rsi_value_check_exit = input.int(defval = 75, minval = 1, title = "Overbought: ")

trigger = ta.crossunder(rsi, rsi_value_check_entry)
exit = ta.crossover(rsi, rsi_value_check_exit)

entry_condition   = trigger 
TPcondition_exit  = exit

look = input.int(defval = 30, minval = 0, maxval = 500, title = "Lookback period: ")

Probabilities(lookback) =>

    isActiveLong = false
    isActiveLong := nz(isActiveLong[1], false)
    isSellLong = false
    isSellLong := nz(isSellLong[1], false)

    int positive_results = 0
    int negative_results = 0

    float positive_percentage_probabilities = 0 
    float negative_percentage_probabilities = 0 

    LONG = not isActiveLong and entry_condition == true 
    CLOSE_LONG_TP = not isSellLong and TPcondition_exit == true

    p = ta.valuewhen(LONG, close, 0)
    p2 = ta.valuewhen(CLOSE_LONG_TP, close, 0)

    for i = 1 to lookback

	    if (LONG[i])
            isActiveLong := true
		    isSellLong := false

        if (CLOSE_LONG_TP[i])
	        isActiveLong := false
	        isSellLong := true

        if p[i] > p2[i]
            positive_results += 1
        else 
            negative_results -= 1 

	    positive_relative_probabilities = positive_results / lookback
	    negative_relative_probabilities = negative_results / lookback
	    positive_percentage_probabilities := positive_relative_probabilities * 100
	    negative_percentage_probabilities := negative_relative_probabilities * 100

    positive_percentage_probabilities
	
probabilities = Probabilities(look) 

lots = strategy.equity/close

var float e = 0 
var float c = 0 

tp = input.float(defval = 1.00, minval = 0, title = "Take profit: ")
sl = input.float(defval = 1.00, minval = 0, title = "Stop loss: ")

if trigger==true and strategy.opentrades==0 and probabilities >= 51
    e := close
    strategy.entry(id = "e", direction = strategy.long, qty = lots, limit = e) 
takeprofit = e + ((e * tp)/100)
stoploss = e - ((e * sl)/100)
if exit==true
    c := close 
    strategy.exit(id = "c", from_entry = "e", limit = c)
if takeprofit and stoploss 
    strategy.exit(id = "c", from_entry = "e", stop = stoploss, limit = takeprofit)