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.
Syarat kemasukan:
Mekanisme Peningkatan Kedudukan:
Mekanisme Keluar:
Kawalan Risiko:
Masuk Multi-Level: Dengan menetapkan pelbagai ambang RSI dan turun naik, strategi dapat menangkap tahap yang berbeza dari pasaran melampau, meningkatkan peluang perdagangan.
Pendapatan Dinamis: Nilai keuntungan yang dikira berdasarkan tahap sokongan / rintangan dapat menyesuaikan diri dengan struktur pasaran, melindungi keuntungan tanpa keluar terlalu awal.
Skalaan Kedudukan Gaya Piramid: Meningkatkan kedudukan apabila trend berterusan dapat meningkatkan potensi keuntungan dengan ketara.
Pengurusan Risiko: Risiko peratusan tetap dan had kedudukan maksimum mengawal risiko secara berkesan untuk setiap perdagangan dan secara keseluruhan.
Fleksibiliti: Banyak parameter yang boleh diselaraskan membolehkan strategi menyesuaikan diri dengan persekitaran pasaran dan instrumen perdagangan yang berbeza.
Pembalikan purata + trend berikut: Menggabungkan kelebihan pembalikan purata dan trend berikut, menangkap pembalikan jangka pendek tanpa kehilangan trend utama.
Overtrading: Boleh mencetuskan isyarat perdagangan yang kerap di pasaran yang sangat tidak menentu, yang membawa kepada bayaran yang berlebihan.
Penembusan palsu: Pasaran mungkin mengalami turun naik yang melampau yang singkat diikuti dengan pembalikan cepat, menyebabkan isyarat palsu.
Kerugian berturut-turut: Pergerakan pasaran searah terus boleh mengakibatkan kerugian yang ketara selepas beberapa kenaikan kedudukan.
Sensitiviti Parameter: Prestasi strategi mungkin sangat sensitif terhadap tetapan parameter, berisiko terlalu banyak.
Kesan Slippage: Boleh menghadapi slippage yang teruk semasa tempoh turun naik yang sengit, mempengaruhi prestasi strategi.
Kebergantungan persekitaran pasaran: Strategi mungkin kurang berprestasi dalam persekitaran pasaran tertentu, seperti turun naik yang rendah atau pasaran trend yang kuat.
Penyesuaian Parameter Dinamik: Memperkenalkan mekanisme penyesuaian untuk menyesuaikan ambang RSI dan turun naik secara dinamik berdasarkan keadaan pasaran.
Analisis pelbagai jangka masa: Sertakan penilaian trend pasaran jangka panjang untuk meningkatkan kualiti kemasukan.
Optimumkan Stop-Loss: Tambahkan Stop-Loss yang tertinggal atau Stop-Loss dinamik berasaskan ATR untuk kawalan risiko yang lebih lanjut.
Penapisan keadaan pasaran: Sertakan kekuatan trend, kitaran turun naik, dan keadaan penapisan lain untuk mengelakkan perdagangan dalam persekitaran pasaran yang tidak sesuai.
Pengoptimuman Pengurusan Modal: Melaksanakan pengurusan kedudukan yang lebih terperinci, seperti menyesuaikan saiz perdagangan berdasarkan tahap isyarat yang berbeza.
Integrasi Pembelajaran Mesin: Menggunakan algoritma pembelajaran mesin untuk mengoptimumkan pemilihan parameter dan proses penjanaan isyarat.
Analisis korelasi: Menggabungkan analisis korelasi dengan aset lain untuk meningkatkan kestabilan dan kepelbagaian strategi.
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)