Strategi ini didasarkan pada indikator RSI (Relative Strength Index) untuk menentukan kondisi overbought dan oversold. Strategi ini mengambil posisi kontra tren ketika RSI mencapai tingkat overbought atau oversold untuk membeli rendah dan menjual tinggi. Strategi ini sederhana dan efektif, mengambil keuntungan dari skenario overbought dan oversold jangka pendek di pasar.
Strategi ini menggunakan indikator RSI semata-mata sebagai sinyal masuk. Ini akan panjang ketika RSI melintasi di bawah titik rendah (default 20), dan pergi pendek ketika RSI melintasi di atas titik tinggi (default 80). Ini memperdagangkan jumlah tetap setiap kali (default $ 100) dan bertujuan untuk keuntungan 1% terlepas dari kondisi pasar. Jika kerugian mencapai 3%, itu berhenti. Untuk mengontrol frekuensi perdagangan, strategi berhenti berdagang selama 24 bar setelah perdagangan yang kalah.
Logika inti adalah:
Seperti yang dapat kita lihat, strategi ini sangat sederhana dan mekanis. Hampir tidak ada ruang untuk optimasi parameter. Ini murni mengeksploitasi sifat matematis RSI untuk mengambil posisi kontra tren di sekitar wilayah overbought / oversold.
Keuntungan terbesar dari strategi ini adalah kesederhanaan dan efisiensi.
Ini juga menerapkan stop loss / take profit ratio untuk mengunci keuntungan dan mengendalikan risiko, serta penangguhan perdagangan untuk mengurangi frekuensi.
Risiko utama dari strategi ini berasal dari:
RSI dapat tetap berada di zona overbought/oversold untuk jangka waktu yang lama ketika tren terus berlanjut.
Stop loss yang terlalu luas dapat menyebabkan kerugian yang berlebihan. Stop loss 3% saat ini mungkin perlu dikurangi menjadi 1-2%.
Frekuensi perdagangan yang tinggi dapat menyebabkan over-trading setelah kemenangan.
Konsentrasi risiko $ 100 harus dioptimalkan menjadi % modal.
Berdasarkan analisis, strategi dapat ditingkatkan dengan cara berikut:
Tambahkan filter tren seperti MA untuk menghentikan perdagangan ketika tren tidak jelas.
Mengoptimalkan rasio stop loss/take profit. Mengurangi stop loss menjadi 1-2% dan menggunakan take profit dinamis.
Batasi frekuensi perdagangan, seperti maksimal 2 perdagangan per periode waktu.
Ukuran perdagangan berdasarkan persentase modal daripada $ 100 tetap.
Optimalkan parameter RSI seperti periode, tingkat overbought/sold.
Tambahkan ukuran posisi untuk tidak meningkatkan ukuran ketika modal meningkat.
Dengan optimasi ini, risiko dapat dikurangi dan stabilitas dapat ditingkatkan secara signifikan.
Secara singkat, ini adalah strategi sederhana dan langsung menggunakan RSI untuk perdagangan kondisi overbought / oversold untuk reversi rata-rata jangka pendek. Pro adalah kesederhanaan, efisiensi, tidak perlu prediksi, logika yang jelas, mudah diuji. Kontra adalah ketidakmampuan untuk mendapatkan keuntungan dalam tren yang kuat dan potensi kerugian. Dengan tambahan seperti filter tren, parameter yang dioptimalkan, ukuran posisi dll, dapat ditingkatkan lebih lanjut untuk stabilitas dan profitabilitas. Logika ini inovatif dan berharga untuk perdagangan praktis jika diterapkan dengan benar.
/*backtest start: 2023-11-02 00:00:00 end: 2023-11-09 00:00:00 period: 3m basePeriod: 1m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("rsi超买超卖_回测用", overlay=false, initial_capital=50000, currency=currency.USD, default_qty_type=strategy.cash) open_pos = input.int(50000, title = "每次开单资金(usdt)") rsi_period = input.int(14, title = "rsi周期") rsi_line = input.float(20.0, title='RSI触发线', step=0.05) stop_rsi_top_line = input.float(70, title = "顶部rsi止损线") stop_rsi_bottom_line = input.float(30, title = "底部rsi止损线") stop_loss_perc = input.float(0.03, title = "止损线") stop_profit = input.float(0.01, title = "止盈") loss_stop_trade_k = input.int(24, title = "亏损后x根K线不做交易") rsiParam = ta.rsi(close, rsi_period) var int failedTimes = 0 var bool stopTrade = false // plot(rsiParam) if stopTrade failedTimes += 1 if failedTimes == loss_stop_trade_k failedTimes := 0 stopTrade := false // 获取当前持仓方向 checkCurrentPosition() => strategy.position_size > 0 ? 1 : strategy.position_size < 0 ? -1 : 0 curPosition = checkCurrentPosition() // 当前持仓成本价 position_avg_price = strategy.position_avg_price // 当前持单, 触达反向的rsi线,清仓 if curPosition > 0 and rsiParam >= stop_rsi_top_line strategy.close_all(comment = "closebuy") if curPosition < 0 and rsiParam <= stop_rsi_bottom_line strategy.close_all(comment = "closesell") // 止盈止损清仓 if curPosition > 0 // if (position_avg_price - close) / close >= stop_loss_perc // // 止损 // strategy.close_all(comment = "closebuy") // stopTrade := true if (close - position_avg_price) / position_avg_price >= stop_profit // 止盈 strategy.close_all(comment = "closebuy") if curPosition < 0 // if (close - position_avg_price) / position_avg_price >= stop_loss_perc // // 止损 // strategy.close_all(comment = "closesell") // stopTrade := true if (position_avg_price - close) / close >= stop_profit // 止盈 strategy.close_all(comment = "closesell") a = strategy.closedtrades.exit_bar_index(strategy.closedtrades - 1) if bar_index == a and strategy.closedtrades.profit(strategy.closedtrades - 1) < 0 stopTrade := true var float openPrice = 0.0 if rsiParam <= rsi_line and stopTrade == false strategy.entry("long", strategy.long, open_pos / close, comment = "long") if curPosition == 0 openPrice := close strategy.exit("long_stop", "long", limit = openPrice * (1+stop_profit), stop=openPrice * (1-stop_loss_perc), comment = "closebuy") if rsiParam >= 100 - rsi_line and stopTrade == false strategy.entry("short", strategy.short, open_pos / close, comment = "short") if curPosition == 0 openPrice := close strategy.exit("short_stop", "short", limit = openPrice * (1-stop_profit), stop=openPrice * (1+stop_loss_perc), comment = "closesell") plot(failedTimes)