Ini adalah strategi sederhana yang hanya menggunakan indikator RSI untuk menentukan tingkat overbought dan oversold. Kami memperbaikinya dengan menambahkan stop loss dan take profit, dan mengintegrasikan modul probabilitas ke perdagangan penguatan hanya ketika probabilitas perdagangan yang menguntungkan baru-baru ini lebih besar dari atau sama dengan 51%. Ini sangat meningkatkan kinerja strategi dengan menghindari potensi perdagangan yang rugi.
Strategi ini menggunakan indikator RSI untuk menilai kondisi overbought dan oversold pasar. Secara khusus, itu pergi panjang ketika RSI melintasi di bawah batas bawah zona oversold; dan menutup posisi ketika RSI melintasi di atas batas atas zona overbought. Selain itu, kita mengatur stop loss dan mengambil rasio keuntungan.
Kuncinya adalah kita mengintegrasikan modul penilaian probabilitas. modul ini menghitung persentase menguntungkan dari perdagangan panjang dalam periode terakhir (ditentukan oleh parameter lookback). hanya memungkinkan masuk jika probabilitas perdagangan menguntungkan baru-baru ini lebih besar dari atau sama dengan 51%. ini menghindari banyak potensi kehilangan perdagangan.
Sebagai strategi RSI yang diperkuat probabilitas, memiliki keuntungan berikut dibandingkan dengan strategi RSI sederhana:
Masih ada beberapa risiko dalam strategi ini:
Solusi:
Strategi ini dapat dioptimalkan lebih lanjut dalam aspek berikut:
Ini adalah strategi RSI sederhana yang ditingkatkan oleh modul probabilitas terintegrasi. Dibandingkan dengan strategi RSI vanila, ini menyaring beberapa perdagangan yang kalah dan meningkatkan rasio penarikan dan keuntungan secara keseluruhan.
/*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)