Strategi Terobosan Osilasi

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

img

Ringkasan

Strategi ini berdasarkan idea klasik Larry Connors, menggunakan sistem purata bergerak berganda untuk menangkap goyangan jangka menengah pasaran dan mengambil keuntungan apabila ia terlalu banyak dibeli atau terlalu banyak dijual.

Logika Strategi

  1. Gunakan RSI 2 tempoh untuk menentukan sama ada harga berada di kawasan oversold.

  2. Gunakan purata bergerak jangka panjang (200 tempoh) untuk menentukan arah trend utama.

  3. Apabila harga di atas MA panjang dan RSI di bawah garisan oversold, buka kedudukan panjang pada harga pasaran.

  4. Apabila harga memecahkan tempoh MA pendek (5 tempoh) ke atas, tutup kedudukan panjang pada harga pasaran untuk mengambil keuntungan.

Di samping itu, strategi menyediakan pilihan konfigurasi berikut:

  • Parameter RSI: panjang tempoh, tahap overbought/oversold.

  • Parameter MA: tempoh panjang dan pendek.

  • RSI MA penapis: tambah RSI MA untuk mengelakkan turun naik RSI.

  • Stop loss: boleh dikonfigurasi untuk menambah stop loss atau tidak.

Analisis Kelebihan

  1. Sistem MA berganda dapat menjejaki trend jangka sederhana dan panjang dengan berkesan.

  2. RSI mengelakkan kehilangan masa kemasukan terbaik semasa turun naik yang ganas.

  3. Konfigurasi fleksibel yang sesuai untuk pengoptimuman parameter.

  4. Strategi terobosan, tidak mungkin terlepas isyarat.

Analisis Risiko

  1. Strategi MA berganda sensitif kepada parameter, yang memerlukan pengoptimuman untuk mencapai prestasi terbaik.

  2. Tiada stop loss membawa risiko peningkatan kerugian.

  3. Pengepungan palsu berisiko kerugian dalam pasaran berayun.

  4. Backtest risiko overfit. memerlukan pengesahan di pasaran dan tempoh masa.

Arahan pengoptimuman

  1. Uji dan optimumkan gabungan parameter RSI dan MA untuk mencari optimum.

  2. Uji penapis kemasukan tambahan seperti lonjakan kelantangan untuk mengurangkan isyarat palsu.

  3. Tambah kerugian hentian untuk mengawal kerugian perdagangan tunggal.

  4. Menilai kesan tempoh penahan yang berbeza untuk mencari yang optimum.

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

Ringkasan

Strategi ini menggabungkan penjejakan trend MA berganda dan RSI overbought / oversold untuk membentuk sistem pecah biasa. Dengan pengoptimuman parameter, pengurusan risiko yang ketat dan pengesahan ketahanan, ia boleh menjadi alat perdagangan kuantitatif yang kuat. Tetapi peniaga harus berhati-hati terhadap overfit backtest dan terus meningkatkan strategi untuk menyesuaikan diri dengan keadaan pasaran yang berubah.


/*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 lanjut