Strategi Penembusan RSI Ganda Cepat

Penulis:ChaoZhang, Tanggal: 2023-11-07 16:56:39
Tag:

img

Gambaran umum

Strategi ini menggunakan beberapa indikator RSI untuk menerapkan terobosan harga untuk menghasilkan sinyal masuk dan keluar yang lebih akurat.

Logika Strategi

Strategi menetapkan dua kelompok parameter RSI, satu dengan periode 7 dan batas 25, yang lainnya dengan periode 14 dan batas 25.

Strategi ini pertama-tama menghitung nilai dari dua indikator RSI, kemudian menilai apakah harga melanggar batas atas atau bawah RSI. Jika melanggar batas atas, sinyal panjang dihasilkan. Jika melanggar batas bawah, sinyal pendek dihasilkan.

Jika sudah memiliki posisi, terus menilai apakah RSI saat ini berada dalam kisaran normal.

Strategi ini juga menggunakan sistem Martingale. Ukuran pesanan berlipat ganda setelah setiap kerugian.

Analisis Keuntungan

  • Menggunakan dua indikator RSI dapat lebih menilai sinyal terobosan dan menghindari sinyal palsu.

  • Juga memeriksa terobosan tubuh menghindari perdagangan yang salah selama konsolidasi.

  • Martingale membantu menghentikan kerugian dengan cepat setelah kerugian.

  • Parameter RSI yang dapat disesuaikan mengoptimalkan peluang masuk.

  • Sesi perdagangan dapat dibatasi untuk menghindari dampak dari peristiwa besar.

Analisis Risiko

  • RSI ganda tidak bisa sepenuhnya menghindari terobosan palsu.

  • Martingale meningkatkan posisi setelah kerugian, risiko meledak.

  • Biaya perdagangan tidak dipertimbangkan.

  • Terlalu banyak parameter yang dapat dioptimalkan membutuhkan banyak tes untuk menemukan kombinasi terbaik.

Dapat mengatur stop loss untuk membatasi kerugian; mengoptimalkan parameter RSI; menambahkan pertimbangan biaya; meredakan kriteria terobosan.

Arahan Optimasi

  • Tambahkan stop loss untuk membatasi kerugian maksimum.

  • Mengoptimalkan parameter RSI untuk mengurangi sinyal palsu.

  • Pertimbangkan dampak biaya perdagangan untuk mencegah overtrading.

  • Menyenangkan kriteria body breakthrough untuk lebih banyak kesempatan.

  • Tambahkan lebih banyak filter untuk menghindari terjebak.

Ringkasan

Strategi ini menggunakan RSI ganda untuk menentukan terobosan harga, menambahkan filter terobosan tubuh untuk menghindari whipsaws. Ini juga menggunakan Martingale untuk dengan cepat memotong kerugian. Strategi dapat ditingkatkan dengan mengoptimalkan parameter dan menambahkan filter untuk sinyal yang lebih akurat. Manajemen risiko penting untuk membatasi kerugian. Secara keseluruhan strategi ini menyediakan sistem terobosan yang relatif stabil yang cocok untuk perdagangan efisiensi tinggi.


/*backtest
start: 2023-10-30 00:00:00
end: 2023-11-06 00:00:00
period: 15m
basePeriod: 5m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Noro
//2018

//@version=2
strategy(title = "Noro's Fast RSI Strategy v2.0", shorttitle = "Fast RSI str 2.0", overlay = true)

//Settings
needlong = input(true, defval = true, title = "Long")
needshort = input(true, defval = true, title = "Short")
usemar = input(false, defval = false, title = "Use Martingale")
capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Capital, %")
usersi1 = input(true, defval = true, title = "Use RSI #1")
rsiperiod1 = input(7, defval = 7, minval = 2, maxval = 50, title = "#1 RSI Period")
rsilimit1 = input(25, defval = 25, minval = 1, maxval = 100, title = "#1 RSI limit")
usersi2 = input(true, defval = true, title = "Use RSI #2")
rsiperiod2 = input(14, defval = 14, minval = 2, maxval = 50, title = "#2 RSI Period")
rsilimit2 = input(25, defval = 25, minval = 1, maxval = 100, title = "#2 RSI limit")
showarr = input(false, defval = false, title = "Show Arrows")
fromyear = input(2018, defval = 2018, minval = 1900, maxval = 2100, title = "From Year")
toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year")
frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month")
tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month")
fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From day")
today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day")

//RSI #1
uprsi1 = rma(max(change(close), 0), rsiperiod1)
dnrsi1 = rma(-min(change(close), 0), rsiperiod1)
rsi1 = dnrsi1 == 0 ? 100 : uprsi1 == 0 ? 0 : 100 - (100 / (1 + uprsi1 / dnrsi1))
uplimit1 = 100 - rsilimit1
dnlimit1 = rsilimit1

//RSI #2
uprsi2 = rma(max(change(close), 0), rsiperiod2)
dnrsi2 = rma(-min(change(close), 0), rsiperiod2)
rsi2 = dnrsi2 == 0 ? 100 : uprsi2 == 0 ? 0 : 100 - (100 / (1 + uprsi2 / dnrsi2))
uplimit2 = 100 - rsilimit2
dnlimit2 = rsilimit2

//Body
body = abs(close - open)
abody = sma(body, 10)

//Signals
bar = close > open ? 1 : close < open ? -1 : 0
up1 = bar == -1 and (strategy.position_size == 0 or close < strategy.position_avg_price) and rsi1 < dnlimit1 and body > abody / 5 and usersi1
dn1 = bar == 1 and (strategy.position_size == 0 or close > strategy.position_avg_price) and rsi1 > uplimit1 and body > abody / 5 and usersi1
up2 = bar == -1 and (strategy.position_size == 0 or close < strategy.position_avg_price) and rsi2 < dnlimit2 and body > abody / 5 and usersi2
dn2 = bar == 1 and (strategy.position_size == 0 or close > strategy.position_avg_price) and rsi2 > uplimit2 and body > abody / 5 and usersi2
norma = rsi1 > dnlimit1 and rsi1 < uplimit1 and rsi2 > dnlimit2 and rsi2 < uplimit2
exit = (((strategy.position_size > 0 and bar == 1 and norma) or (strategy.position_size < 0 and bar == -1 and norma)) and body > abody / 2)

//Arrows
col = exit ? black : up1 or dn1 ? blue : up2 or dn2 ? red : na
needup = up1 or up2
needdn = dn1 or dn2
needexitup = exit and strategy.position_size < 0
needexitdn = exit and strategy.position_size > 0
plotarrow(showarr and needup ? 1 : na, colorup = blue, colordown = blue, transp = 0)
plotarrow(showarr and needdn ? -1 : na, colorup = blue, colordown = blue, transp = 0)
plotarrow(showarr and needexitup ? 1 : na, colorup = black, colordown = black, transp = 0)
plotarrow(showarr and needexitdn ? -1 : na, colorup = black, colordown = black, transp = 0)

//Trading
profit = exit ? ((strategy.position_size > 0 and close > strategy.position_avg_price) or (strategy.position_size < 0 and close < strategy.position_avg_price)) ? 1 : -1 : profit[1]
mult = usemar ? exit ? profit == -1 ? mult[1] * 2 : 1 : mult[1] : 1
lot = strategy.position_size == 0 ? strategy.equity / close * capital / 100 * mult : lot[1]

if up1 or up2
    if strategy.position_size < 0
        strategy.close_all()
        
    strategy.entry("Long", strategy.long, needlong == false ? 0 : lot)

if dn1 or dn2
    if strategy.position_size > 0
        strategy.close_all()
        
    strategy.entry("Short", strategy.short, needshort == false ? 0 : lot)
    
if  exit
    strategy.close_all()

Lebih banyak