Strategi Terobosan osilasi

Penulis:ChaoZhang, Tanggal: 2023-10-27 16:32:19
Tag:

img

Gambaran umum

Strategi ini didasarkan pada ide klasik Larry Connors, menggunakan sistem rata-rata bergerak ganda untuk menangkap osilasi jangka menengah pasar dan mengambil keuntungan ketika terlalu banyak dibeli atau terlalu banyak dijual.

Logika Strategi

  1. Gunakan RSI 2 periode untuk menentukan apakah harga berada di wilayah oversold.

  2. Gunakan rata-rata bergerak jangka panjang (200 periode) untuk menentukan arah tren utama.

  3. Ketika harga berada di atas MA panjang dan RSI berada di bawah garis oversold, buka posisi panjang dengan harga pasar.

  4. Ketika harga melewati MA periode pendek (5 periode) ke atas, tutup posisi panjang dengan harga pasar untuk mengambil keuntungan.

Selain itu, strategi menyediakan pilihan konfigurasi berikut:

  • Parameter RSI: panjang periode, tingkat overbought/oversold.

  • Parameter MA: periode panjang dan pendek.

  • RSI MA filter: tambahkan RSI MA untuk menghindari fluktuasi RSI.

  • Stop loss: dapat dikonfigurasi untuk menambahkan stop loss atau tidak.

Analisis Keuntungan

  1. Sistem MA ganda dapat secara efektif melacak tren jangka menengah dan panjang.

  2. RSI menghindari kehilangan waktu masuk terbaik selama fluktuasi ganas.

  3. Konfigurasi fleksibel yang cocok untuk optimasi parameter.

  4. Strategi terobosan, tidak mungkin melewatkan sinyal.

Analisis Risiko

  1. Strategi Double MA sensitif terhadap parameter, membutuhkan optimasi untuk mencapai kinerja terbaik.

  2. Tidak ada stop loss membawa risiko ekspansi kerugian.

  3. Pertimbangkan untuk mengoptimalkan periode MA atau menambahkan filter lain.

  4. Backtest risiko overfit. membutuhkan validasi di pasar dan periode waktu.

Arahan Optimasi

  1. Uji dan optimalkan kombinasi parameter RSI dan MA untuk menemukan yang optimal.

  2. Uji filter masuk tambahan seperti lonjakan volume untuk mengurangi sinyal palsu.

  3. Tambahkan stop loss trailing untuk mengendalikan kerugian perdagangan tunggal.

  4. Evaluasi dampak dari periode penahanan yang berbeda untuk menemukan yang optimal.

  5. Uji ketahanan dalam jangka waktu yang lebih lama seperti setiap hari.

Ringkasan

Strategi ini menggabungkan pelacakan tren MA ganda dan RSI overbought/oversold untuk membentuk sistem breakout yang khas. Dengan optimasi parameter, manajemen risiko yang ketat dan validasi ketahanan, ini dapat menjadi alat perdagangan kuantitatif yang kuat.


/*backtest
start: 2023-09-26 00:00:00
end: 2023-10-26 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
strategy("RSI Strategy", overlay=true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100)

//Starter Parameters

length = input(title="RSI Lenght", defval=2)
overBoughtRSI = input(title="OverBought Level for RSI",  defval=10)
shortLength = input(title="Short MA Length",  defval=5)
longLength = input(title="Long MA Length",  defval=200)

RuleMRSI=input(title="RSI Moving Average Filter", defval= true)
lengthmrsi=input(title="RSI Moving Average Length",  defval=4)
overBoughtMRSI=input(title="OverBought Level for the Moving Average of the RSI",  defval=30)

Rulestop=input(title="Apply Stop Loss", defval=false)
stop_percentual=input(title="% Stop Loss",  defval=10)

//RSI

vrsi = rsi(close, length)

//Moving Averages

longma = sma(close,longLength)
shortma = sma(close,shortLength)
mrsi=sma(vrsi,lengthmrsi)

//Stop Loss

stop_level = strategy.position_avg_price*((100-stop_percentual)/100)

//Backtest Period
testStartYear = input(2009, "Backtest Start Year")
testStartMonth = input(1, "Backtest Start Month")
testStartDay = input(2, "Backtest Start Day")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,0,0)

testStopYear = input(2020, "Backtest Stop Year")
testStopMonth = input(12, "Backtest Stop Month")
testStopDay = input(30, "Backtest Stop Day")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay,0,0)

testPeriod() => true
    
//Strategy

if testPeriod() and (not na(vrsi))
    if  (RuleMRSI==false) and (Rulestop==false)
        if (vrsi<overBoughtRSI) and (close>longma)
            strategy.entry("RsiLE", strategy.long , comment="Open")
        if (close>shortma)
            strategy.close_all()

    if (RuleMRSI==true) and (Rulestop==false)
        if (vrsi<overBoughtRSI) and (close>longma) and (mrsi<overBoughtMRSI)
            strategy.entry("RsiLE", strategy.long , comment="Open")
        if (close>shortma)
            strategy.close_all()

    if (RuleMRSI==false) and (Rulestop==true)
        if (vrsi<overBoughtRSI) and (close>longma)
            strategy.entry("RsiLE", strategy.long , comment="Open")
            strategy.exit("RsiLE", stop = stop_level)
        if (close>shortma)
            strategy.close_all()

    if (RuleMRSI==true) and (Rulestop==true)
        if (vrsi<overBoughtRSI) and (close>longma) and (mrsi<overBoughtMRSI)
            strategy.entry("RsiLE", strategy.long , comment="Open")
            strategy.exit("RsiLE", stop = stop_level)
        if (close>shortma)
            strategy.close_all()

Lebih banyak