Strategi perdagangan kuantitatif yang didasarkan pada RSI Average Crossing

Penulis:ChaoZhang, Tanggal: 2023-12-01 16:59:26
Tag:

img

Gambaran umum

Strategi ini menentukan sinyal beli dan jual berdasarkan persilangan antara indikator RSI dan moving averagenya, yang termasuk dalam strategi perdagangan jangka pendek. Strategi ini akan membeli ketika RSI lebih rendah dari MA dan menjual ketika RSI lebih tinggi dari MA, yang merupakan strategi pembelian rendah-penjualan tinggi yang khas.

Prinsip Strategi

  1. Menghitung indikator RSI dengan periode 40 bar
  2. Menghitung MA dari indikator RSI, dengan periode 10 bar
  3. Menghasilkan sinyal beli ketika RSI lebih rendah dari MA yang dikalikan dengan koefisien (rentang perdagangan 1%)
  4. Menghasilkan sinyal jual ketika RSI lebih tinggi dari MA yang dikalikan dengan koefisien (1+range perdagangan%)
  5. Jarak trading default adalah 5, yang berarti 5% di atas atau di bawah MA untuk memicu sinyal
  6. Tentukan exit ketika RSI berada di atas level MA dan di atas level 50

Analisis Keuntungan

Ini adalah strategi reversi rata-rata yang khas, memanfaatkan sifat overbought / oversold dari indikator RSI untuk menentukan sinyal perdagangan.

  1. Mengadopsi indikator RSI untuk menilai struktur pasar yang cukup dapat diandalkan
  2. Filter MA menghindari perdagangan yang tidak perlu dan meningkatkan stabilitas
  3. Frekuensi kontrol rentang perdagangan yang dapat disesuaikan
  4. Logika sederhana dan mudah dimengerti

Singkatnya, ini adalah strategi perdagangan jangka pendek yang sederhana dan praktis.

Analisis Risiko

Ada beberapa risiko yang perlu diperhatikan:

  1. Kemungkinan RSI memberikan sinyal palsu, perlu menonton pola
  2. Pengaturan rentang perdagangan yang tidak tepat dapat menyebabkan overtrading atau kehilangan peluang
  3. Frekuensi perdagangan yang tinggi, perlu mempertimbangkan biaya transaksi
  4. Bergantung hanya pada satu indikator, rentan terhadap anomali pasar

Risiko ini dapat dikurangi melalui penyesuaian parameter, penambahan filter dll.

Arahan Optimasi

Strategi dapat dioptimalkan dalam aspek berikut:

  1. Tambahkan lebih banyak filter seperti volume untuk memastikan sinyal hanya pada titik balik
  2. Tambahkan stop loss untuk mengendalikan kerugian perdagangan tunggal
  3. Mengoptimalkan rentang perdagangan untuk menyeimbangkan frekuensi dan tingkat keuntungan
  4. Menggunakan pembelajaran mesin untuk menemukan set parameter yang optimal
  5. Tambahkan model ensemble untuk mengintegrasikan hasil dari sub-strategi

Peningkatan kinerja yang signifikan dapat dicapai melalui kombinasi multi-indikator, manajemen stop loss, optimasi parameter dll.

Ringkasan

Secara singkat, ini adalah strategi perdagangan jangka pendek yang sangat tipikal dan praktis. Ini memanfaatkan tingkat RSI yang terlalu banyak dibeli / terlalu banyak dijual untuk menentukan entri dan keluar, dengan filter MA tambahan. Logika sederhana dan jelas, parameter fleksibel, mudah diterapkan. Ada risiko pasar tertentu, tetapi dapat ditangani melalui mekanisme entri / keluar yang disempurnakan, penyesuaian parameter, dll. Ketika dikombinasikan dengan indikator teknis yang lebih banyak dan teknik manajemen risiko, strategi ini dapat menjadi strategi jangka pendek yang relatif stabil.


/*backtest
start: 2022-11-24 00:00:00
end: 2023-11-30 00:00:00
period: 1d
basePeriod: 1h
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/
// © I11L

//@version=5
strategy("I11L - Meanreverter 4h", overlay=false, pyramiding=3, default_qty_value=10000, initial_capital=10000, default_qty_type=strategy.cash,process_orders_on_close=false, calc_on_every_tick=false)
 
frequency = input.int(10)
rsiFrequency = input.int(40)
buyZoneDistance = input.int(5)
avgDownATRSum = input.int(3)
useAbsoluteRSIBarrier = input.bool(true)
barrierLevel = 50//input.int(50)

momentumRSI = ta.rsi(close,rsiFrequency)
momentumRSI_slow = ta.sma(momentumRSI,frequency)
 
isBuy = momentumRSI < momentumRSI_slow*(1-buyZoneDistance/100) and (strategy.position_avg_price - math.sum(ta.atr(20),avgDownATRSum)*strategy.opentrades > close or strategy.opentrades == 0 ) //and (momentumRSI < barrierLevel or not(useAbsoluteRSIBarrier))
isShort = momentumRSI > momentumRSI_slow*(1+buyZoneDistance/100) and (strategy.position_avg_price - math.sum(ta.atr(20),avgDownATRSum)*strategy.opentrades > close or strategy.opentrades == 0 ) and (momentumRSI > barrierLevel or not(useAbsoluteRSIBarrier))
momentumRSISoftClose = (momentumRSI > momentumRSI_slow) and (momentumRSI > barrierLevel or not(useAbsoluteRSIBarrier))

isClose = momentumRSISoftClose

plot(momentumRSI,color=isClose ? color.red :  momentumRSI < momentumRSI_slow*(1-buyZoneDistance/100) ? color.green : color.white)
plot(momentumRSI_slow,color=color.gray)
plot(barrierLevel,color=useAbsoluteRSIBarrier ? color.white : color.rgb(0,0,0,0))
plot(momentumRSI_slow*(1-buyZoneDistance/100),color=color.gray)
plot(momentumRSI_slow*(1+buyZoneDistance/100),color=color.gray)
plot(momentumRSI_slow*(1+(buyZoneDistance*2)/100),color=color.gray)

// plot(strategy.wintrades - strategy.losstrades)

 
 
if(isBuy)
    strategy.entry("Buy",strategy.long, comment="#"+str.tostring(strategy.opentrades+1))

// if(isShort)
//     strategy.entry("Sell",strategy.short, comment="#"+str.tostring(strategy.opentrades+1))

if(isClose)
    strategy.exit("Close",limit=close)





Lebih banyak