Esta es una estrategia sencilla de largo plazo que utiliza el indicador RSI para determinar los niveles de sobrecompra y sobreventa. La mejoramos agregando stop loss y take profit, e integrando un módulo de probabilidad a la negociación de refuerzo solo cuando la probabilidad de negociación rentable reciente es mayor o igual al 51%. Esto mejoró enormemente el rendimiento de la estrategia al evitar posibles operaciones perdedoras.
La estrategia utiliza el indicador RSI para juzgar las condiciones de sobrecompra y sobreventa del mercado. Específicamente, se va largo cuando el RSI cruza por debajo del límite inferior de la zona de sobreventa; y cierra la posición cuando el RSI cruza por encima del límite superior de la zona de sobrecompra. Además, establecemos los coeficientes de stop loss y take profit.
La clave es que hemos integrado un módulo de juicio de probabilidad. Este módulo calcula el porcentaje rentable de las operaciones largas en períodos recientes (definido por el parámetro de retroceso). Solo permite la entrada si la probabilidad de operaciones rentables recientes es mayor o igual a 51%. Esto evita muchas operaciones potenciales perdedoras.
Como estrategia de RSI mejorada de probabilidad, tiene las siguientes ventajas en comparación con las estrategias simples de RSI:
La estrategia sigue teniendo algunos riesgos:
Soluciones:
La estrategia podría optimizarse aún más en los siguientes aspectos:
Esta es una estrategia de RSI simple mejorada por un módulo de probabilidad integrado. En comparación con las estrategias de RSI de vainilla, filtra algunas operaciones perdedoras y mejora la relación de retirada y ganancia general. El siguiente paso podría ser mejorarla agregando optimización corta y dinámica, etc. para hacerla más robusta.
/*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)