RSI Strategi perdagangan saldo pendek panjang

Penulis:ChaoZhang, Tanggal: 2023-10-30 15:49:35
Tag:

img

Gambaran umum

Strategi ini menggunakan kombinasi indikator RSI di berbagai kerangka waktu untuk menentukan apakah pasar saat ini terlalu banyak dibeli atau terlalu banyak dijual, dan menggabungkan hubungan antara harga dan moving average untuk menghasilkan sinyal beli dan jual.

Logika Strategi

  1. Hitung nilai RSI dari kerangka waktu 5 menit, 15 menit, dan 1 jam. Ketika RSI 5 menit, 15 menit, dan 1 jam semuanya di bawah 25 pada saat yang sama, itu dinilai sebagai kondisi oversold dan menghasilkan sinyal beli. Ketika RSI 5 menit, 15 menit, dan 1 jam semuanya di atas 75 pada saat yang sama, itu dinilai sebagai kondisi overbought dan menghasilkan sinyal jual.

  2. Pelanggaran rata-rata bergerak 21 hari juga bertindak sebagai sinyal perdagangan. Jika harga di bawah rata-rata bergerak, sinyal beli dihasilkan. Jika harga di atas rata-rata bergerak, sinyal jual dihasilkan.

  3. Berdasarkan posisi saat ini, ukuran perdagangan awal dan aturan piramida ditetapkan: 2 kontrak untuk entri pertama, dan kemudian menambahkan 1 kontrak setiap kali sampai posisi mencapai 2 kontrak.

  4. Stop loss diaktifkan ketika kerugian mencapai 3%. ambil keuntungan ketika keuntungan mencapai 1%.

Keuntungan

  1. Menggunakan indikator RSI di beberapa kerangka waktu untuk menentukan kondisi overbought dan oversold meningkatkan keandalan sinyal.

  2. Menggabungkan rata-rata bergerak menghasilkan sinyal perdagangan tambahan dan memperluas peluang perdagangan.

  3. Menetapkan kontrol ukuran posisi dan rasio profit/loss untuk stop loss dan take profit mengelola risiko.

  4. Meningkatkan dengan jumlah tetap memperluas potensi keuntungan.

Risiko

  1. Risiko divergensi RSI. Harga dapat terus mengalami tren selama periode setelah RSI mencapai ambang overbought atau oversold sebelum terbalik.

  2. Sinyal perdagangan moving average mungkin menyesatkan. moving average gagal melacak perubahan harga tepat waktu selama perubahan harga yang besar.

  3. Ukuran posisi yang salah dan pengaturan rasio laba/rugi menyebabkan kontrol risiko yang tidak tepat.

  4. Kondisi piramida harus diatur secara wajar untuk menghindari kerugian yang membesar.

Arahan Optimasi

  1. Sesuaikan parameter RSI dan uji kombinasi periode yang berbeda untuk menemukan sinyal overbought/oversold yang lebih andal.

  2. Uji rata-rata bergerak yang berbeda sebagai sinyal perdagangan tambahan, atau indikator teknis lainnya.

  3. Mengoptimalkan ukuran posisi dan aturan stop loss/take profit untuk membangun mekanisme kontrol risiko yang lebih ilmiah.

  4. Mengoptimalkan kondisi piramida untuk mencegah pembesaran kerugian. Pertimbangkan skala eksponensial daripada skala kuantitas tetap.

Ringkasan

Strategi ini menggunakan RSI di beberapa kerangka waktu untuk menentukan potensi tren dan mencapai tingkat kemenangan yang lebih tinggi. Sinyal tambahan dihasilkan dengan moving average untuk memperluas peluang perdagangan. Risiko dikelola melalui ukuran posisi, stop loss / take profit, dan piramida kuantitas tetap. Secara keseluruhan, strategi ini menggabungkan indikator reversi tren dan rata-rata, menggabungkan logika mengikuti tren dan memilih bawah, dan efektif selama konsolidasi. Pengujian dan optimalisasi lebih lanjut diperlukan untuk membangun kontrol risiko yang lebih kuat untuk kinerja yang lebih konsisten.


/*backtest
start: 2023-09-29 00:00:00
end: 2023-10-29 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
strategy("5M_RSI_Strategy", overlay=true, pyramiding = 1)
len =14 
Initial_Trade_Size = 2
up = rma(max(change(close), 0), len)
down = rma(-min(change(close), 0), len)
rsi = down == 0 ? 100 : up == 0 ? 0 : 100 - (100 / (1 + up / down))
RSI_1h = request.security(syminfo.tickerid, "60", rsi)
RSI_3h = request.security(syminfo.tickerid, "180", rsi)
RSI_15m = request.security(syminfo.tickerid, "15", rsi)
RSI_5m = request.security(syminfo.tickerid, "5", rsi)
RSI_1m = request.security(syminfo.tickerid, "1", rsi)
ema21_5 = ema(request.security(syminfo.tickerid, "5", close), 21)
ema21_15 = ema(request.security(syminfo.tickerid, "15", close), 21)
//(RSI_3h<=25) and  (RSI_1h<=25) and (RSI_15m<=25) and
Positive = ((RSI_5m<=25) and (RSI_15m<=25) and (RSI_1h<=25))?true:false
//alertcondition(Positive, title='POS', message='POS')        
//plotshape(Positive, style=shape.triangleup,location=location.belowbar, color=green,size =size.tiny)
Negative = (( RSI_5m>=75) and ( RSI_15m>=75) and ( RSI_1h>=75))?true:false
//alertcondition(Negative, title='NEG', message='NEG')
//plotshape(Negative, style=shape.triangledown,location=location.abovebar, color=red,size=size.tiny)          Positive and   Negative and 

lastordersize = abs(strategy.position_size)>=Initial_Trade_Size?abs(strategy.position_size):Initial_Trade_Size
//lastordersize =1
// and ((ema21_15-low)/ema21_15) > 0.077
//Adding to position rules
if (abs(strategy.position_size) >= Initial_Trade_Size and (abs(close - strategy.position_avg_price)/abs(strategy.position_avg_price)>0.03))
    if(strategy.position_avg_price > close and strategy.position_size > 0)
        strategy.entry("Add", strategy.long , qty = lastordersize , when = true)
    if(strategy.position_avg_price < close and strategy.position_size < 0)
        strategy.entry("Add", strategy.short, qty = lastordersize , when = true)
if (strategy.position_size == 0)
    if (Positive or ((ema21_5-low)/ema21_5) > 0.07)
        strategy.entry("1St Entry", strategy.long , qty = lastordersize , when = true)
    // and ((high-ema21_15)/ema21_15) > 0.077
    if (Negative or ((high-ema21_5)/ema21_5) > 0.07)
        strategy.entry("1St Entry", strategy.short, qty = lastordersize , when = true)
//lastordersize := lastordersize * 2
//or (strategy.openprofit / abs(strategy.position_size * close))>=0.01
if(cross(ema21_5, high) or cross(ema21_5, low))
    strategy.close_all()

Lebih banyak