Strategi RSI yang dipertingkatkan kebarangkalian

Penulis:ChaoZhang, Tarikh: 2023-12-20 15:05:05
Tag:

img

Ringkasan

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.

Prinsip-prinsip

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.

Kelebihan

Sebagai strategi RSI yang dipertingkatkan kebarangkalian, ia mempunyai kelebihan berikut berbanding dengan strategi RSI mudah:

  1. Pengendalian Stop Loss dan Take Profit
  2. Modul kebarangkalian bersepadu mengelakkan pasaran kebarangkalian rendah
  3. Modul kebarangkalian boleh diselaraskan untuk persekitaran pasaran yang berbeza
  4. Mekanisme hanya panjang mudah difahami dan dilaksanakan

Analisis Risiko

Masih ada beberapa risiko dalam strategi ini:

  1. Hanya untuk jangka panjang, tidak dapat mendapat keuntungan daripada penurunan pasaran
  2. Penghakiman modul kebarangkalian yang tidak betul boleh kehilangan peluang
  3. Sukar untuk mencari kombinasi parameter terbaik, perbezaan prestasi yang signifikan di seluruh persekitaran pasaran
  4. Tetapan stop loss yang longgar, masih mungkin kerugian tunggal yang besar

Penyelesaian:

  1. Pertimbangkan untuk menambah mekanisme pendek
  2. Mengoptimumkan modul kebarangkalian untuk mengurangkan kadar salah penilaian
  3. Gunakan pembelajaran mesin untuk mengoptimumkan parameter secara dinamik
  4. Tetapkan tahap stop loss yang lebih konservatif untuk mengehadkan kerugian

Arahan Peningkatan

Strategi ini boleh dioptimumkan lagi dalam aspek berikut:

  1. Meningkatkan modul pendek untuk perdagangan dua arah
  2. Gunakan pembelajaran mesin untuk pengoptimuman parameter dinamik
  3. Cuba penunjuk lain untuk overbought / oversold
  4. Mengoptimumkan stop loss/take profit untuk meningkatkan nisbah keuntungan
  5. Tambah faktor lain untuk menapis isyarat dan meningkatkan kebarangkalian

Ringkasan

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)

Lebih lanjut