Sumber dimuat naik... memuat...

Strategi pembalikan rata-rata RSI pelbagai peringkat dengan penyesuaian turun naik dinamik

Penulis:ChaoZhang, Tarikh: 2024-06-21 14:16:31
Tag:RSI, PIVOT

img

Ringkasan

Strategi ini adalah sistem perdagangan pembalikan purata pelbagai peringkat berdasarkan penunjuk RSI dan turun naik harga. Ia menggunakan nilai RSI yang melampau dan turun naik harga yang luar biasa besar sebagai isyarat kemasukan, sambil menggunakan skala kedudukan gaya piramid dan tahap mengambil keuntungan dinamik untuk menguruskan risiko dan mengoptimumkan pulangan. Idea teras strategi ini adalah untuk memasuki pasaran semasa turun naik yang melampau dan keuntungan apabila harga kembali ke tahap normal.

Prinsip Strategi

  1. Syarat kemasukan:

    • Menggunakan RSI 20 tempoh (RSI20) sebagai penunjuk utama
    • Tentukan ambang RSI berganda (35/65, 30/70, 25/75, 20/80) dengan ambang volatiliti yang sepadan
    • Mencetus isyarat masuk apabila RSI mencapai ambang dan saiz badan lilin semasa melebihi ambang turun naik yang sepadan
    • Syarat tambahan: harga mesti memecahkan tahap sokongan tinggi / rendah baru-baru ini dengan peratusan tertentu
  2. Mekanisme Peningkatan Kedudukan:

    • Membolehkan sehingga 5 entri (entri awal + 4 entri tambahan)
    • Setiap entri tambahan memerlukan memenuhi syarat RSI dan turun naik yang lebih ketat
  3. Mekanisme Keluar:

    • Menetapkan 5 tahap mata keuntungan yang berbeza
    • Mata keuntungan diambil secara dinamik berdasarkan tahap sokongan/tahan pada permulaan
    • Sasaran mengambil keuntungan secara beransur-ansur berkurangan apabila bilangan kedudukan terbuka meningkat
  4. Kawalan Risiko:

    • Menggunakan model risiko peratusan, dengan setiap perdagangan berisiko tetap 20% daripada nilai akaun
    • Menetapkan kedudukan terbuka serentak maksimum yang dibenarkan kepada 5, mengehadkan pendedahan risiko keseluruhan

Kelebihan Strategi

  1. Masuk Multi-Level: Dengan menetapkan pelbagai ambang RSI dan turun naik, strategi dapat menangkap tahap yang berbeza dari pasaran melampau, meningkatkan peluang perdagangan.

  2. Pendapatan Dinamis: Nilai keuntungan yang dikira berdasarkan tahap sokongan / rintangan dapat menyesuaikan diri dengan struktur pasaran, melindungi keuntungan tanpa keluar terlalu awal.

  3. Skalaan Kedudukan Gaya Piramid: Meningkatkan kedudukan apabila trend berterusan dapat meningkatkan potensi keuntungan dengan ketara.

  4. Pengurusan Risiko: Risiko peratusan tetap dan had kedudukan maksimum mengawal risiko secara berkesan untuk setiap perdagangan dan secara keseluruhan.

  5. Fleksibiliti: Banyak parameter yang boleh diselaraskan membolehkan strategi menyesuaikan diri dengan persekitaran pasaran dan instrumen perdagangan yang berbeza.

  6. Pembalikan purata + trend berikut: Menggabungkan kelebihan pembalikan purata dan trend berikut, menangkap pembalikan jangka pendek tanpa kehilangan trend utama.

Risiko Strategi

  1. Overtrading: Boleh mencetuskan isyarat perdagangan yang kerap di pasaran yang sangat tidak menentu, yang membawa kepada bayaran yang berlebihan.

  2. Penembusan palsu: Pasaran mungkin mengalami turun naik yang melampau yang singkat diikuti dengan pembalikan cepat, menyebabkan isyarat palsu.

  3. Kerugian berturut-turut: Pergerakan pasaran searah terus boleh mengakibatkan kerugian yang ketara selepas beberapa kenaikan kedudukan.

  4. Sensitiviti Parameter: Prestasi strategi mungkin sangat sensitif terhadap tetapan parameter, berisiko terlalu banyak.

  5. Kesan Slippage: Boleh menghadapi slippage yang teruk semasa tempoh turun naik yang sengit, mempengaruhi prestasi strategi.

  6. Kebergantungan persekitaran pasaran: Strategi mungkin kurang berprestasi dalam persekitaran pasaran tertentu, seperti turun naik yang rendah atau pasaran trend yang kuat.

Arahan Pengoptimuman Strategi

  1. Penyesuaian Parameter Dinamik: Memperkenalkan mekanisme penyesuaian untuk menyesuaikan ambang RSI dan turun naik secara dinamik berdasarkan keadaan pasaran.

  2. Analisis pelbagai jangka masa: Sertakan penilaian trend pasaran jangka panjang untuk meningkatkan kualiti kemasukan.

  3. Optimumkan Stop-Loss: Tambahkan Stop-Loss yang tertinggal atau Stop-Loss dinamik berasaskan ATR untuk kawalan risiko yang lebih lanjut.

  4. Penapisan keadaan pasaran: Sertakan kekuatan trend, kitaran turun naik, dan keadaan penapisan lain untuk mengelakkan perdagangan dalam persekitaran pasaran yang tidak sesuai.

  5. Pengoptimuman Pengurusan Modal: Melaksanakan pengurusan kedudukan yang lebih terperinci, seperti menyesuaikan saiz perdagangan berdasarkan tahap isyarat yang berbeza.

  6. Integrasi Pembelajaran Mesin: Menggunakan algoritma pembelajaran mesin untuk mengoptimumkan pemilihan parameter dan proses penjanaan isyarat.

  7. Analisis korelasi: Menggabungkan analisis korelasi dengan aset lain untuk meningkatkan kestabilan dan kepelbagaian strategi.

Kesimpulan

Strategi perdagangan pengembalian purata RSI bertingkat ini adalah sistem perdagangan kuantitatif yang dirancang dengan teliti yang menggabungkan analisis teknikal, pengurusan risiko dinamik, dan teknik skala kedudukan gaya piramid. Dengan menangkap turun naik pasaran yang melampau dan keuntungan apabila harga berbalik, strategi menunjukkan potensi keuntungan yang kuat. Walau bagaimanapun, ia juga menghadapi cabaran seperti overtrading dan pergantungan persekitaran pasaran. Pengoptimuman masa depan harus memberi tumpuan kepada meningkatkan kemampuan penyesuaian strategi dan kawalan risiko untuk memenuhi persekitaran pasaran yang berbeza. Secara keseluruhan, ini adalah rangka kerja strategi dengan asas yang kukuh yang, melalui pengoptimuman dan pengujian balik yang lebih lanjut, mempunyai potensi untuk berkembang menjadi sistem perdagangan yang kukuh.


/*backtest
start: 2024-05-01 00:00:00
end: 2024-05-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy('Retorno_Pivots_5min_Novo_v3.3')

// Input variables
bars_left1 = input(1, title = "Entry - Pivot Left Bars")
bars_right1 = input(1, title = "Entry - Pivot Right Bars")
rsi20_longentry0 = input(35, title = "Entry 1 - RSI20 Long")
rsi20_shortentry0 = input(65, title = "Entry 1 - RSI20 Short")
bar_size_entry0 = input.float(1, title="Entry 1 - Bar Size")
rsi20_longentry1 = input(30, title = "Entry 2 - RSI20 Long")
rsi20_shortentry1 = input(70, title = "Entry 2 - RSI20 Short")
bar_size_entry1 = input.float(0.8, title="Entry 2 - Bar Size")
rsi20_longentry2 = input(25, title = "Entry 3 - RSI20 Long")
rsi20_shortentry2 = input(75, title = "Entry 3 - RSI20 Short")
bar_size_entry2 = input.float(0.7, title="Entry 3 - Bar Size")
rsi20_longentry3 = input(20, title = "Entry 4 - RSI20 Long")
rsi20_shortentry3 = input(80, title = "Entry 4 - RSI20 Short")
bar_size_entry3 = input.float(0.5, title="Entry 4 - Bar Size")
limit_perc1 = input.float(0.60, title="Profit Range 1")
limit_perc2 = input.float(0.40, title="Profit Range 2")
limit_perc3 = input.float(0.20, title="Profit Range 3")
limit_perc4 = input.float(0.00, title="Profit Range 4")
limit_perc5 = input.float(0.00, title="Profit Range 5")
minimum_pivot_distance = input.float(0, title="Minimum Pivot Distance %")
barsize_1h_input = input(288, title="Highest Bar Lookback")
rsi20 = ta.rsi(close, 20)
rsi200 = ta.rsi(close, 200)
Pivot_High_Last1 = ta.valuewhen(ta.pivothigh(high, bars_left1, bars_right1), ta.pivothigh(high, bars_left1, bars_right1), 0)
Pivot_Low_Last1 = ta.valuewhen(ta.pivotlow(low, bars_left1, bars_right1), ta.pivotlow(low, bars_left1, bars_right1), 0)

barsize = math.abs(close - open)
barsize_1h = ta.highest(barsize, barsize_1h_input)

Bar0Long = rsi20 < rsi20_longentry0 and barsize >= (barsize_1h * bar_size_entry0)
Bar1Long = rsi20 < rsi20_longentry1 and barsize >= (barsize_1h * bar_size_entry1)
Bar2Long = rsi20 < rsi20_longentry2 and barsize >= (barsize_1h * bar_size_entry2)
Bar3Long = rsi20 < rsi20_longentry3 and barsize >= (barsize_1h * bar_size_entry3)

// Long Entries
Long_Entry1 = strategy.opentrades == 0 and rsi20 < rsi20[1] and ((rsi20 < rsi20_longentry0 and barsize >= (barsize_1h * bar_size_entry0)) or (rsi20 < rsi20_longentry1 and barsize >= (barsize_1h * bar_size_entry1)) or (rsi20 < rsi20_longentry2 and barsize >= (barsize_1h * bar_size_entry2)) or (rsi20 < rsi20_longentry3 and barsize >= (barsize_1h * bar_size_entry3))) and close < (Pivot_Low_Last1 * (1 - (minimum_pivot_distance / 100)))
Long_Entry2 = strategy.opentrades == 1 and strategy.position_size > 0 and rsi20 < rsi20[1] and (Bar0Long or Bar1Long or Bar2Long or Bar3Long)
Long_Entry3 = strategy.opentrades == 2 and strategy.position_size > 0 and rsi20 < rsi20[1] and (Bar0Long or Bar1Long or Bar2Long or Bar3Long)
Long_Entry4 = strategy.opentrades == 3 and strategy.position_size > 0 and rsi20 < rsi20[1] and (Bar0Long or Bar1Long or Bar2Long or Bar3Long)
Long_Entry5 = strategy.opentrades == 4 and strategy.position_size > 0 and rsi20 < rsi20[1] and (Bar0Long or Bar1Long or Bar2Long or Bar3Long)
if Long_Entry1 or Long_Entry2 or Long_Entry3 or Long_Entry4 or Long_Entry5
    strategy.entry("Long", strategy.long, comment = "ENTER-LONG_BINANCE-FUTURES_BTCBUSD_Bot-BTC-1min_1M_970d2ee265390c27")
// Longs Exits
Long_Exit1 = strategy.opentrades == 1 and close > (strategy.position_avg_price + ((ta.valuewhen(strategy.opentrades == 0, Pivot_Low_Last1, 0) - (strategy.position_avg_price)) * limit_perc1))
Long_Exit2 = strategy.opentrades == 2 and close > (strategy.position_avg_price + ((ta.valuewhen(strategy.opentrades == 0, Pivot_Low_Last1, 0) - (strategy.position_avg_price)) * limit_perc2))
Long_Exit3 = strategy.opentrades == 3 and close > (strategy.position_avg_price + ((ta.valuewhen(strategy.opentrades == 0, Pivot_Low_Last1, 0) - (strategy.position_avg_price)) * limit_perc3))
Long_Exit4 = strategy.opentrades == 4 and close > (strategy.position_avg_price + ((ta.valuewhen(strategy.opentrades == 0, Pivot_Low_Last1, 0) - (strategy.position_avg_price)) * limit_perc4))
Long_Exit5 = strategy.opentrades == 5 and close > (strategy.position_avg_price + ((ta.valuewhen(strategy.opentrades == 0, Pivot_Low_Last1, 0) - (strategy.position_avg_price)) * limit_perc5))
if Long_Exit1 or Long_Exit2 or Long_Exit3 or Long_Exit4 or Long_Exit5
    strategy.close("Long", comment = "EXIT-LONG_BINANCE-FUTURES_BTCBUSD_Bot-BTC-1min_1M_970d2ee265390c27")

Bar0Short = rsi20 > rsi20_shortentry0 and barsize >= (barsize_1h * bar_size_entry0)
Bar1Short = rsi20 > rsi20_shortentry1 and barsize >= (barsize_1h * bar_size_entry1)
Bar2Short = rsi20 > rsi20_shortentry2 and barsize >= (barsize_1h * bar_size_entry2)
Bar3Short = rsi20 > rsi20_shortentry3 and barsize >= (barsize_1h * bar_size_entry3)

// Short Entries
Short_Entry1 = strategy.opentrades == 0 and rsi20 > rsi20[1] and ((rsi20 > rsi20_shortentry0 and barsize >= (barsize_1h * bar_size_entry0)) or (rsi20 > rsi20_shortentry1 and barsize >= (barsize_1h * bar_size_entry1)) or (rsi20 > rsi20_shortentry2 and barsize >= (barsize_1h * bar_size_entry2)) or (rsi20 > rsi20_shortentry2 and barsize >= (barsize_1h * bar_size_entry2))) and close > (Pivot_High_Last1 * (1 + (minimum_pivot_distance / 100)))
Short_Entry2 = strategy.opentrades == 1 and strategy.position_size < 0 and rsi20 > rsi20[1] and (Bar0Short or Bar1Short or Bar2Short or Bar3Short)
Short_Entry3 = strategy.opentrades == 2 and strategy.position_size < 0 and rsi20 > rsi20[1] and (Bar0Short or Bar1Short or Bar2Short or Bar3Short)
Short_Entry4 = strategy.opentrades == 3 and strategy.position_size < 0 and rsi20 > rsi20[1] and (Bar0Short or Bar1Short or Bar2Short or Bar3Short)
Short_Entry5 = strategy.opentrades == 4 and strategy.position_size < 0 and rsi20 > rsi20[1] and (Bar0Short or Bar1Short or Bar2Short or Bar3Short)
if Short_Entry1 or Short_Entry2 or Short_Entry3 or Short_Entry4 or Short_Entry5
    strategy.entry("Short", strategy.short, comment = "ENTER-SHORT_BINANCE-FUTURES_BTCBUSD_Bot-BTC-1min_1M_970d2ee265390c27")
// Short Exits
Short_Exit1 = strategy.opentrades == 1 and close < (strategy.position_avg_price - ((strategy.position_avg_price - ta.valuewhen(strategy.opentrades == 0, Pivot_High_Last1, 0)) * limit_perc1))
Short_Exit2 = strategy.opentrades == 2 and close < (strategy.position_avg_price - ((strategy.position_avg_price - ta.valuewhen(strategy.opentrades == 0, Pivot_High_Last1, 0)) * limit_perc2))
Short_Exit3 = strategy.opentrades == 3 and close < (strategy.position_avg_price - ((strategy.position_avg_price - ta.valuewhen(strategy.opentrades == 0, Pivot_High_Last1, 0)) * limit_perc3))
Short_Exit4 = strategy.opentrades == 4 and close < (strategy.position_avg_price - ((strategy.position_avg_price - ta.valuewhen(strategy.opentrades == 0, Pivot_High_Last1, 0)) * limit_perc4))
Short_Exit5 = strategy.opentrades == 5 and close < (strategy.position_avg_price - ((strategy.position_avg_price - ta.valuewhen(strategy.opentrades == 0, Pivot_High_Last1, 0)) * limit_perc5))
if Short_Exit1 or Short_Exit2 or Short_Exit3 or Short_Exit4 or Short_Exit5
    strategy.close("Short", comment = "EXIT-SHORT_BINANCE-FUTURES_BTCBUSD_Bot-BTC-1min_1M_970d2ee265390c27")

// Plots
plot(rsi20, color=color.new(#fbff00, 0), linewidth=2)
plot(((strategy.position_avg_price + ((ta.valuewhen(strategy.opentrades == 0, Pivot_Low_Last1, 0) - (strategy.position_avg_price)) * limit_perc1))), color=color.new(#00ff2a, 0), linewidth=2)
plot(((strategy.position_avg_price + ((ta.valuewhen(strategy.opentrades == 0, Pivot_Low_Last1, 0) - (strategy.position_avg_price)) * limit_perc2))), color=color.new(#00ff2a, 50), linewidth=2)
plot(((strategy.position_avg_price + ((ta.valuewhen(strategy.opentrades == 0, Pivot_Low_Last1, 0) - (strategy.position_avg_price)) * limit_perc3))), color=color.new(#00ff2a, 80), linewidth=2)
plot(((strategy.position_avg_price + ((ta.valuewhen(strategy.opentrades == 0, Pivot_Low_Last1, 0) - (strategy.position_avg_price)) * limit_perc4))), color=color.new(#00ff2a, 100), linewidth=2)
plot((strategy.position_avg_price - ((strategy.position_avg_price - ta.valuewhen(strategy.opentrades == 0, Pivot_High_Last1, 0)) * limit_perc1)), color=color.new(#ff0000, 0), linewidth=2)
plot((strategy.position_avg_price - ((strategy.position_avg_price - ta.valuewhen(strategy.opentrades == 0, Pivot_High_Last1, 0)) * limit_perc2)), color=color.new(#ff0000, 50), linewidth=2)
plot((strategy.position_avg_price - ((strategy.position_avg_price - ta.valuewhen(strategy.opentrades == 0, Pivot_High_Last1, 0)) * limit_perc3)), color=color.new(#ff0000, 80), linewidth=2)
plot((strategy.position_avg_price - ((strategy.position_avg_price - ta.valuewhen(strategy.opentrades == 0, Pivot_High_Last1, 0)) * limit_perc4)), color=color.new(#ff0000, 100), linewidth=2)
plot(strategy.position_avg_price, color=color.new(#ffc400, 0), linewidth=2)
plot(strategy.opentrades * (strategy.position_size / math.abs(strategy.position_size)), color=color.new(#ff00bb, 0), linewidth=2)
plot(((barsize / barsize_1h) * 100), color=color.new(#0000ff, 0), linewidth=2)

Berkaitan

Lebih lanjut