Il s'agit d'une stratégie simple à long terme utilisant l'indicateur RSI pour déterminer les niveaux de surachat et de survente. Nous l'avons améliorée en ajoutant un stop loss et un take profit, et en intégrant un module de probabilité au trading de renforcement uniquement lorsque la probabilité récente d'une transaction rentable est supérieure ou égale à 51%.
La stratégie utilise l'indicateur RSI pour juger des conditions de surachat et de survente du marché. Plus précisément, elle est longue lorsque le RSI dépasse la limite inférieure de la zone de surachat; et ferme la position lorsque le RSI dépasse la limite supérieure de la zone de surachat.
La clé est que nous avons intégré un module de jugement de probabilité. Ce module calcule le pourcentage rentable des transactions longues au cours des dernières périodes (défini par le paramètre lookback). Il n'autorise l'entrée que si la probabilité de transaction rentable récente est supérieure ou égale à 51%.
En tant que stratégie RSI améliorée par la probabilité, elle présente les avantages suivants par rapport aux stratégies RSI simples:
Cette stratégie comporte encore certains risques:
Les solutions:
La stratégie pourrait être encore optimisée dans les domaines suivants:
Il s'agit d'une stratégie RSI simple améliorée par un module de probabilité intégré. Par rapport aux stratégies RSI vanille, elle filtre certaines transactions perdantes et améliore le ratio de tirage et de profit global.
/*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)