
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.
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.
Se trata de una estrategia RSI de probabilidad aumentada que tiene las siguientes ventajas sobre la estrategia RSI normal:
La estrategia también tiene ciertos riesgos:
Resolución de las mismas:
La estrategia puede ser optimizada en los siguientes aspectos:
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.
/*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)