Strategi perdagangan berjangka RSI yang cepat

Penulis:ChaoZhang, Tanggal: 2023-11-13 11:36:34
Tag:

img

Gambaran umum

Strategi ini dirancang untuk platform perdagangan spot BitMEX. Dengan menganalisis indikator RSI cepat dan menggabungkan beberapa indikator teknis untuk menyaring sinyal, strategi ini mewujudkan perdagangan pelacakan tren yang efisien. Strategi ini juga menetapkan manajemen risiko dan mekanisme stop loss untuk mengontrol risiko perdagangan secara efektif.

Logika Strategi

  1. Hitung RSI cepat dengan parameter 7 hari dan garis overbought 25, oversold line 75. Ketika RSI melintasi garis overbought, itu adalah sinyal overbought. Ketika RSI melintasi di bawah garis oversold, itu adalah sinyal oversold.

  2. Setel filter pada tubuh candlestick. Membutuhkan pembukaan sebagai lilin bearish dengan panjang tubuh tidak kurang dari 20% dari panjang tubuh rata-rata kemarin.

  3. Tentukan filter pada warna candlestick. Perlukan 4 lilin terakhir sebagai bearish ketika pergi short, dan 4 lilin terakhir sebagai bullish ketika pergi long.

  4. Tetapkan stop loss logika. tutup posisi ketika harga bergerak ke arah yang tidak menguntungkan.

  5. Tetapkan mekanisme anti-whipsaw. hanya mengambil sinyal ketika harga pulih untuk menghentikan tingkat kerugian setelah gerakan awal.

  6. Menggunakan persentase tetap dari modal untuk setiap perdagangan, dan ukuran posisi ganda setelah setiap kerugian.

Analisis Keuntungan

  1. Parameter RSI cepat yang ditetapkan secara wajar dapat dengan cepat menangkap tren.

  2. Filter multi-lapisan meningkatkan tingkat kemenangan dengan mengurangi jumlah perdagangan.

  3. Mekanisme stop loss terintegrasi membatasi kerugian per perdagangan.

  4. Dimensi posisi dinamis mewujudkan manajemen modal yang agresif.

  5. Kerangka waktu perdagangan yang dapat disesuaikan menghindari kebisingan dari peristiwa besar.

Risiko dan Optimasi

  1. Kecepatan tinggi mungkin kehilangan beberapa peluang perdagangan.

  2. Sulit untuk menentukan akhir tren. Pertimbangkan untuk menggabungkan dengan indikator lain untuk mendeteksi potensi pembalikan.

  3. Posisi ukuran metode terlalu agresif, dapat memperkenalkan kunci posisi cara.

  4. Dapat mengoptimalkan parameter untuk pasar yang berbeda untuk menemukan kombinasi parameter yang lebih baik.

Kesimpulan

Secara keseluruhan strategi ini cukup kuat. Dengan menilai arah tren dengan RSI cepat dan menyaring sinyal dengan beberapa indikator, ia dapat mendapatkan pengembalian yang baik selama tren. Juga strategi memiliki ruang untuk optimasi. Dengan menyesuaikan kombinasi parameter dapat beradaptasi dengan lingkungan pasar yang berbeda, sehingga memiliki kepraktisan yang baik.


/*backtest
start: 2023-11-05 00:00:00
end: 2023-11-12 00:00:00
period: 5m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Noro
//2018

//@version=2
strategy(title = "Robot BitMEX Fast RSI v1.0", shorttitle = "Robot BitMEX Fast RSI v1.0", overlay = false, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 10)

//Settings
needlong = input(true, defval = true, title = "Long")
needshort = input(true, defval = true, title = "Short")
usemar = input(true, defval = true, title = "Use Martingale")
capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Capital, %")
rsiperiod = input(7, defval = 7, minval = 2, maxval = 100, title = "RSI Period")
rsilimit = input(25, defval = 25, minval = 1, maxval = 30, title = "RSI limit")
rsibars = input(1, defval = 1, minval = 1, maxval = 20, title = "RSI Bars")
useocf = input(true, defval = true, title = "Use Open Color Filter")
useccf = input(true, defval = true, title = "Use Close Color Filter")
openbars = input(4, defval = 4, minval = 1, maxval = 20, title = "Open Color Bars")
closebars = input(1, defval = 1, minval = 1, maxval = 20, title = "Close Color Bars")
useobf = input(true, defval = true, title = "Use Open Body Filter")
usecbf = input(true, defval = true, title = "Use Close Body Filter")
openbody = input(20, defval = 20, minval = 0, maxval = 1000, title = "Open Body Minimum, %")
closebody = input(50, defval = 50, minval = 0, maxval = 1000, title = "Close Body Minimum, %")
usecnf = input(true, defval = true, title = "Use Close Norma Filter")
fromyear = input(1900, defval = 1900, minval = 1900, maxval = 2100, title = "From Year")
toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year")
frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month")
tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month")
fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From Day")
today = input(31, defval = 31, minval = 01, maxval = 31, title = "To Day")

//RSI
uprsi = rma(max(change(close), 0), rsiperiod)
dnrsi = rma(-min(change(close), 0), rsiperiod)
rsi = dnrsi == 0 ? 100 : uprsi == 0 ? 0 : 100 - (100 / (1 + uprsi / dnrsi))
uplimit = 100 - rsilimit
dnlimit = rsilimit
rsidn = rsi < dnlimit ? 1 : 0
rsiup = rsi > uplimit ? 1 : 0
rsidnok = sma(rsidn, rsibars) == 1
rsiupok = sma(rsiup, rsibars) == 1

//Body Filter
body = abs(close - open)
abody = sma(body, 10)
openbodyok = body >= abody / 100 * openbody or useobf == false
closebodyok = body >= abody / 100 * closebody or usecbf == false

//Color Filter
bar = close > open ? 1 : close < open ? -1 : 0
gbar = bar == 1 ? 1 : 0
rbar = bar == -1 ? 1 : 0
opengbarok = sma(gbar, openbars) == 1 or useocf == false
openrbarok = sma(rbar, openbars) == 1 or useocf == false
closebarok = (strategy.position_size > 0 and bar == 1) or (strategy.position_size < 0 and bar == -1) or useccf == false

//Norma Filter
norma = (rsi > dnlimit and rsi < uplimit) or usecnf == false

//Signals
up = openrbarok and rsidnok and openbodyok and (strategy.position_size == 0 or close < strategy.position_avg_price)
dn = opengbarok and rsiupok and openbodyok and (strategy.position_size == 0 or close > strategy.position_avg_price)
exit = ((strategy.position_size > 0 and closebarok and norma) or (strategy.position_size < 0 and closebarok and norma)) and closebodyok

//Indicator
plot(rsi, color = blue, linewidth = 3, title = "Double RSI")
plot(uplimit, color = black, title = "Upper Line")
plot(dnlimit, color = black, title = "Lower Line")
colbg = rsi > uplimit ? red : rsi < dnlimit ? lime : na
bgcolor(colbg, transp = 20)

//Trading
profit = exit ? ((strategy.position_size > 0 and close > strategy.position_avg_price) or (strategy.position_size < 0 and close < strategy.position_avg_price)) ? 1 : -1 : profit[1]
mult = usemar ? exit ? profit == -1 ? mult[1] * 2 : 1 : mult[1] : 1
lot = strategy.position_size == 0 ? strategy.equity / close * capital / 100 * mult : lot[1]

if up
    if strategy.position_size < 0
        strategy.close_all()
        
    strategy.entry("Long", strategy.long, needlong == false ? 0 : lot, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))

if dn
    if strategy.position_size > 0
        strategy.close_all()
        
    strategy.entry("Short", strategy.short, needshort == false ? 0 : lot, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))
    
if time > timestamp(toyear, tomonth, today, 23, 59) or exit
    strategy.close_all()

Lebih banyak