Strategi Dagangan Futures Kompaun Pengendalian Risiko RSI Cepat

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

img

Ringkasan

Strategi ini direka untuk platform dagangan spot BitMEX. Dengan menganalisis penunjuk RSI cepat dan menggabungkan beberapa penunjuk teknikal untuk isyarat skrin, ia merealisasikan perdagangan penjejakan trend yang cekap. Strategi ini juga menetapkan mekanisme pengurusan risiko dan menghentikan kerugian untuk mengawal risiko perdagangan dengan berkesan.

Logika Strategi

  1. Mengira RSI pantas dengan parameter 7 hari dan garisan overbought 25, garisan oversold 75. Apabila RSI melintasi garisan overbought, ia adalah isyarat overbought. Apabila RSI melintasi di bawah garisan oversold, ia adalah isyarat oversold.

  2. Tetapkan penapis pada badan candlestick. memerlukan pembukaan sebagai lilin bearish dengan panjang badan tidak kurang daripada 20% dari panjang badan purata semalam.

  3. Tetapkan penapis pada warna candlestick. Perlukan 4 lilin terakhir sebagai bearish apabila pergi pendek, dan 4 lilin terakhir sebagai bullish apabila pergi panjang.

  4. Tetapkan logik stop loss. Tutup kedudukan apabila harga bergerak ke arah yang tidak menguntungkan.

  5. Tetapkan mekanisme anti-whipsaw. Hanya mengambil isyarat apabila harga pulih untuk menghentikan tahap kerugian selepas pergerakan awal.

  6. Tetapkan saiz kedudukan. Gunakan peratusan modal tetap untuk setiap perdagangan, dan dua kali ganda saiz kedudukan selepas setiap kerugian.

Analisis Kelebihan

  1. Parameter RSI pantas yang ditetapkan dengan munasabah dapat menangkap trend dengan cepat.

  2. Penapis pelbagai lapisan meningkatkan kadar kemenangan dengan mengurangkan bilangan perdagangan.

  3. Pelancongan yang dilakukan oleh pihak ketiga.

  4. Ukuran kedudukan dinamik mewujudkan pengurusan modal yang agresif.

  5. Kerangka masa perdagangan yang boleh disesuaikan mengelakkan bunyi bising dari peristiwa utama.

Risiko dan Pengoptimuman

  1. Kelajuan tinggi boleh kehilangan beberapa peluang perdagangan. boleh melonggarkan parameter untuk lebih fleksibiliti.

  2. Sukar untuk menentukan trend berakhir. Pertimbangkan untuk menggabungkan dengan penunjuk lain untuk mengesan kemungkinan pembalikan.

  3. Kaedah saiz kedudukan terlalu agresif, boleh memperkenalkan kunci kedudukan cara.

  4. Boleh mengoptimumkan parameter untuk pasaran yang berbeza untuk mencari kombinasi parameter yang lebih baik.

Kesimpulan

Secara keseluruhan strategi ini agak kukuh. Dengan menilai arah trend dengan RSI yang cepat dan menapis isyarat dengan pelbagai penunjuk, ia boleh mendapatkan pulangan yang baik semasa trend. Juga strategi ini mempunyai ruang untuk pengoptimuman. Dengan menyesuaikan kombinasi parameter ia boleh menyesuaikan diri dengan persekitaran pasaran yang berbeza, dengan itu mempunyai 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 lanjut