Strategi perdagangan pembalikan RSI

Penulis:ChaoZhang, Tanggal: 2023-09-28 16:09:39
Tag:

Gambaran umum

Strategi ini menggunakan indikator RSI untuk menilai tren pasar dan menghasilkan sinyal perdagangan ketika terjadi kondisi overbought atau oversold. Ini bertujuan untuk menangkap pergerakan pembalikan jangka pendek di pasar.

Logika Strategi

  1. Hitung RSI 14 periode dan atur garis overbought pada 67 dan garis oversold pada 44.

  2. Ketika RSI melintasi di atas garis overbought, sinyal jual dihasilkan.

  3. Tambahkan filter rata-rata bergerak. Sinyal jual hanya terjadi ketika close berada di bawah MA hari sebelumnya; sinyal beli hanya terjadi ketika close berada di atas MA hari sebelumnya.

  4. Mengintegrasikan profit-taking dan stop-loss logika. baik titik tetap atau RSI berbasis keluar dapat digunakan.

Analisis Keuntungan

  1. Menangkap peluang pembalikan jangka pendek menggunakan tingkat RSI overbought/oversold.

  2. Filter rata-rata bergerak menghindari perdagangan melawan tren.

  3. Mengambil keuntungan dan stop loss mengendalikan kerugian perdagangan tunggal.

  4. Dapat menangkap peluang pembalikan tren lebih awal.

Risiko dan Solusi

  1. RSI lag dapat menyebabkan sinyal palsu.

  2. Stop loss tetap mungkin terlalu lebar atau terlalu sempit.

  3. Mengambil keuntungan tetap dapat keluar terlalu awal atau target terlalu kecil.

  4. Gagal untuk menyaring pasar yang berbeda, menyebabkan over-trading dan kerugian.

Arahan Optimasi

  1. Uji parameter RSI pada kerangka waktu yang berbeda.

  2. Sesuaikan tingkat RSI overbought/oversold.

  3. Coba rata-rata bergerak yang berbeda atau filter lainnya.

  4. Uji target keuntungan tetap versus target/hentian yang dinamis.

  5. Mengoptimalkan nilai profit/stop agar sesuai dengan volatilitas pasar.

  6. Tambahkan filter untuk menghindari whipsaws di berbagai pasar.

  7. Pertimbangkan pertemuan beberapa kerangka waktu untuk meningkatkan kualitas sinyal.

Ringkasan

Strategi ini memperdagangkan pembalikan dengan menggunakan RSI dikombinasikan dengan moving average dan logika profit-taking/stop-loss. Ini bertujuan untuk menangkap pergeseran jangka pendek di pasar. Optimasi parameter lebih lanjut dan filter tambahan dapat meningkatkan profitabilitas sambil mengurangi risiko. Ini cocok untuk investor yang sensitif terhadap pergerakan jangka pendek dan mencari perdagangan yang sering.


/*backtest
start: 2022-09-21 00:00:00
end: 2023-09-27 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//© профешинил хомячело
//@version = 4

strategy("RSI Strategy Professional Хомячело", overlay=false)
length = input( 14 )
overSold = input( 44 )
overBought = input( 67 )
price = open
rsi = rsi(price, length)
band1 = hline(overSold, "overSold12", color=#C0C0C0)
band0 = hline(overBought, "overBought12", color=#C0C0C0)
plot(rsi, "RSI", color=color.red)
fill(band1, band0, color=color.black, transp=90, title="Background")
src = close
a = sma(src, 1)
aaa = strategy.opentrades + 1

n = input(defval = 0.0576923077, title = "AvgPrice - n")
//n = 0.0576923077

buysignal = crossover(rsi, overSold) and (a < (strategy.position_avg_price - n) or strategy.opentrades == 0)
sellsignal = crossunder(rsi, overBought) and (a > (strategy.position_avg_price + n) or strategy.opentrades == 0)


// crossover(rsi, overSold)
// crossunder(rsi, overBought)
if (not na(rsi))
    if(buysignal)
        strategy.entry("LONG", strategy.long, comment = tostring(a) + "\n(" + tostring(aaa) + ")")
        n += 1000
    if(sellsignal)
        strategy.entry("SHORT", strategy.short, comment = tostring(a) + "\n(" + tostring(aaa) + ")")
        n += 1000

//лонги орні       
    if(rsi < 15 and strategy.opentrades != 5 and a < (strategy.position_avg_price - n))
        strategy.entry("LONG", strategy.long, comment = "ЙОБАНИЙ НАСРАВ ТА БЕРИ ЛОНГ НА ВСЬО ШО Є НАХУЙ\n" + tostring(a) + "\n(" + tostring(aaa) + "!!!)")
    if(rsi < 20 and strategy.opentrades != 5 and a < (strategy.position_avg_price - n))
        strategy.entry("LONG", strategy.long, comment = "ЛОНГ НА ВСЮ КОТЛЄТУ\n" + tostring(a) + "\n(" + tostring(aaa) + "!!!)")
//шорти орні
    if(rsi > 85 and strategy.opentrades != 5 and a < (strategy.position_avg_price - n))
        strategy.entry("SHORT", strategy.short, comment = "ЙОБАНИЙ НАСРАВ ТА БЕРИ ШОРТ НА ВСЬО ШО Є НАХУЙ\n" + tostring(a) + "\n(" + tostring(aaa) + "!!!)")
    if(rsi > 80 and strategy.opentrades != 5 and a < (strategy.position_avg_price - n))
        strategy.entry("SHORT", strategy.short, comment = "ШОРТ НА ВСЮ КОТЛЄТУ\n" + tostring(a) + "\n(" + tostring(aaa) + "!!!)")


//стоп-лосс і ціль

//rsi
rsion = input(defval = false, title = "Тейк-профіт по RSI")
rcl = input(defval = 73.0, title = "RSI тейк по лонгу")
rcs = input(defval = 44.0, title = "RSI тейк по шорту")
possize = input(defval = 250.0, title = "Маржа")
posp = input(defval = 3.0, title = "Плече")

//tick
ut = input(defval = false, title = "Тейк-профіт")
tar = input(defval = 4500.0, title = "Тейк-профіт у тіках")
us = input(defval = false, title = "Стоп-лосс")
stop = input(defval = 0.0, title = "Стоп-лосс у тіках")
tar:=tar/syminfo.mintick
stop:=stop/syminfo.mintick

if(ut==true and us==false)
    strategy.exit(id="LX", from_entry = "LONG", profit = tar, comment = "ТейкL")
    strategy.exit(id="SX", from_entry = "SHORT", profit = tar, comment = "ТейкS")
if(us==true and ut==false)
    strategy.exit(id="LX", from_entry = "LONG", loss = stop, comment = "СтопL")
    strategy.exit(id="SX", from_entry = "SHORT", loss = stop, comment = "СтопS")
    
if(ut==true and us==true)
    strategy.exit(id="LX", from_entry = "LONG", profit = tar, loss = stop, comment ="Тейк/СтопL")
    strategy.exit(id="SX", from_entry = "SHORT", profit = tar, loss = stop, comment ="Тейк/СтопS")
    
//закриття по rsi
if(rsion == 1 )
    pr = round(((a / strategy.position_avg_price - 1) * possize * posp), 2)
    ppr = round(((a / strategy.position_avg_price - 1) * 100 * posp), 2)
    spr = round((1 - (a / strategy.position_avg_price)) * possize * posp, 2)
    sppr = round((100 - (a / strategy.position_avg_price * 100)) * posp, 2)
    
    if(rsi > rcl)
        strategy.close(id="LONG", comment = "LT\n" + tostring(ppr) + "%\n" + tostring(pr) + "$\n" + tostring(a))
    if(rsi < rcs)
        strategy.close(id="SHORT", comment = "ST\n" + tostring(sppr) + "%\n" + tostring(spr) + "$\n" + tostring(a))

Lebih banyak