Ini adalah strategi sederhana yang hanya menggunakan indikator RSI untuk menentukan tahap overbought dan oversold. Kami meningkatkannya dengan menambah stop loss dan mengambil keuntungan, dan mengintegrasikan modul kebarangkalian ke perdagangan penguat hanya apabila kebarangkalian perdagangan yang menguntungkan baru-baru ini lebih besar daripada atau sama dengan 51%. Ini sangat meningkatkan prestasi strategi dengan mengelakkan potensi perdagangan yang rugi.
Strategi ini menggunakan penunjuk RSI untuk menilai keadaan pasaran yang terlalu banyak dibeli dan terlalu banyak dijual. Khususnya, ia pergi lama apabila RSI melintasi di bawah had bawah zon oversold; dan menutup kedudukan apabila RSI melintasi di atas had atas zon overbought. Di samping itu, kita menetapkan stop loss dan mengambil nisbah keuntungan.
Kuncinya adalah kita mengintegrasikan modul penilaian kebarangkalian. modul ini mengira peratusan keuntungan perdagangan panjang dalam tempoh baru-baru ini (ditakrifkan oleh parameter melihat kembali). Ia hanya membenarkan kemasukan jika kebarangkalian perdagangan yang menguntungkan baru-baru ini lebih besar daripada atau sama dengan 51%. Ini mengelakkan banyak potensi kehilangan perdagangan.
Sebagai strategi RSI yang dipertingkatkan kebarangkalian, ia mempunyai kelebihan berikut berbanding dengan strategi RSI mudah:
Masih ada beberapa risiko dalam strategi ini:
Penyelesaian:
Strategi ini boleh dioptimumkan lagi dalam aspek berikut:
Ini adalah strategi RSI yang mudah dipertingkatkan oleh modul kebarangkalian bersepadu. Berbanding dengan strategi RSI vanila, ia menapis beberapa perdagangan yang kehilangan dan meningkatkan nisbah pengeluaran dan keuntungan keseluruhan. Langkah seterusnya boleh meningkatkannya dengan menambahkan optimasi pendek, dinamik dan lain-lain untuk menjadikannya lebih mantap.
/*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)