RSI Reversal Breakout Strategy adalah strategi yang mengenal pasti situasi overbought dan oversold menggunakan penunjuk RSI dan mengambil perdagangan kontra-trend apabila harga memecahkan purata bergerak.
Strategi ini terutamanya berdasarkan logik berikut:
Menggunakan RSI ((2) untuk menilai sama ada harga terlalu banyak atau terlalu banyak dijual. RSI di bawah 25 dianggap terlalu banyak dijual; RSI di atas 80 dianggap terlalu banyak dibeli.
Gunakan EMA 200 hari untuk menentukan arah trend keseluruhan. Harga yang melanggar di atas EMA dianggap isyarat kenaikan, dan melanggar di bawah EMA isyarat penurunan.
Apabila RSI menunjukkan isyarat oversold dan harga pecah di atas EMA, pergi panjang untuk trend menaik. Ini adalah isyarat pembalikan biasa, yang menunjukkan harga bangkit kembali dari zon oversold.
Apabila RSI menunjukkan isyarat overbought dan harga pecah di bawah EMA, pergi pendek untuk downtrend.
Dengan berdagang pembalikan, kita berharap untuk menangkap permulaan trend baru sebelum ia bermula.
Khususnya, peraturan kemasukan adalah untuk pergi lama apabila RSI < 25 dan harga pecah di atas jalur atas; pergi pendek apabila RSI > 80 dan harga memecahkan jalur bawah. Keluar apabila harga tertinggi hari ini memecahkan di bawah harga tertinggi hari sebelumnya.
RSI Reversal Breakout Strategy mempunyai kelebihan berikut:
Menangkap peluang pembalikan: Mengenal pasti overbought / oversold dengan RSI membolehkan menangkap pembalikan harga, yang merupakan kunci untuk menjana alpha.
Perdagangan dengan trend: Mengintegrasikan EMA memastikan perdagangan sejajar dengan trend utama. Pembalikan hanya dipertimbangkan apabila konsisten dengan trend besar.
Kawalan risiko: Perdagangan pembalikan mengehadkan tempoh pegangan kedudukan, mengawal risiko.
Parameter yang fleksibel: Tempoh RSI dan tempoh EMA boleh diselaraskan dengan perubahan rejim pasaran, meningkatkan kesesuaian.
Frekuensi perdagangan yang sesuai: Isyarat pembalikan berlaku pada frekuensi yang sederhana, mengelakkan perdagangan berlebihan sambil kekal aktif.
Kesederhanaan: Peraturan adalah mudah dan mudah dilaksanakan dalam perdagangan langsung.
Strategi ini juga mempunyai risiko berikut:
Risiko pembalikan gagal: Harga boleh meneruskan trend asal selepas isyarat pembalikan, yang membawa kepada kerugian.
Risiko trend yang tidak jelas: EMA tidak berfungsi dengan baik apabila tidak ada trend yang jelas.
Risiko pengoptimuman: Parameter RSI dan EMA mempunyai kesan besar terhadap prestasi. Harus menguji pelbagai nilai secara meluas untuk mencari yang optimum.
Risiko overfitting: mengejar prestasi semasa pengoptimuman boleh menyebabkan overfitting. Pemeriksaan kestabilan diperlukan untuk mengelakkan pengoptimuman berlebihan.
Risiko overtrading: Isyarat pembalikan yang terlalu kerap membawa kepada perdagangan yang berlebihan.
Strategi ini boleh ditingkatkan lagi dalam aspek berikut:
Menilai kualiti stok: Gunakan strategi hanya untuk stok berkualiti tinggi berdasarkan asas.
Menggabungkan penunjuk lain: Tambah MACD, KD dan lain-lain untuk mengesahkan isyarat pembalikan dan meningkatkan kebolehpercayaan.
Penyesuaian parameter dinamik: Sesuaikan parameter RSI dan EMA secara dinamik berdasarkan keadaan pasaran yang berubah.
Mengoptimumkan masa kemasukan: atur peraturan kemasukan yang baik untuk menunggu pengesahan pembalikan.
Strategi mengambil keuntungan: Tetapkan tahap mengambil keuntungan yang betul untuk mengelakkan memberikan kembali keuntungan.
Pertimbangkan kos transaksi: Menilai kesan slippage dan komisen.
Pertimbangkan turun naik: Fokus hanya pada saham turun naik tinggi untuk menjadikan strategi lebih kukuh.
RSI Reversal Breakout Strategy menggabungkan isyarat trend dan pembalikan untuk menangkap pembalikan awal dan peluang utama. Frekuensi perdagangan yang sederhana membantu kawalan risiko. Pengoptimuman yang betul pada masa kemasukan, pengambilan keuntungan, dan pemilihan parameter dapat meningkatkan prestasi. Dengan pengoptimuman yang baik, strategi ini boleh menjadi pendekatan perdagangan kuantitatif yang berkesan.
/*backtest start: 2022-10-01 00:00:00 end: 2023-10-07 00:00:00 period: 2d basePeriod: 1d exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © jocker.soad //@version=4 // strategy("My Script", overlay=true, initial_capital=10000, default_qty_value=100) min = input(title="Valor minimo de entrada", defval=25) qtdAtivos = input(title="Quantidade de ações", defval=1) // overBuyLine = hline(80) // overSellLine = hline(min) var comprado = false var valorComprado = 0.0 var qtdDiasComprado = 0 var valorLucro = 0.0 valueRsi = rsi(close, 2) valueSma = sma(close, 200) valueEma = ema(close, 200) lastHighPrice = high[2] buyValidation = valueRsi <= min sellValidation = close >= lastHighPrice // plot(lastHighPrice, trackprice=true, offset=-99999, color=color.olive, linewidth=3, style=plot.style_area) // plot(valueRsi) // plot(valueSma) // plot(valueEma) // plotshape(sellValidation, style=shape.triangledown, color=color.blue) // plotshape(comprado, style=shape.triangledown, color=color.blue) startDate = input(title="Inicio Dia", type=input.integer, defval=1, minval=1, maxval=31) startMonth = input(title="Inicio Mes", type=input.integer, defval=1, minval=1, maxval=12) startYear = input(title="Inicio Ano", type=input.integer, defval=2018, minval=1800, maxval=2100) endDate = input(title="Final Dia", type=input.integer, defval=1, minval=1, maxval=31) endMonth = input(title="Final Mes", type=input.integer, defval=12, minval=1, maxval=12) endYear = input(title="Final Ano", type=input.integer, defval=2020, minval=1800, maxval=2100) inDateRange = true if inDateRange if close >= valueEma if comprado == false and buyValidation qtdDiasComprado := 0 comprado := true valorComprado := close strategy.order("buy", true, qtdAtivos, when=buyValidation) if sellValidation and comprado == true comprado := false valorLucro := valorLucro + (close - valorComprado) valorComprado := 0 strategy.order("sell", false, qtdAtivos, when=sellValidation) if comprado == true and sellValidation == false qtdDiasComprado := qtdDiasComprado + 1 // plot(valorLucro, color=color.lime)