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.
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.
Tetapkan penapis pada badan candlestick. memerlukan pembukaan sebagai lilin bearish dengan panjang badan tidak kurang daripada 20% dari panjang badan purata semalam.
Tetapkan penapis pada warna candlestick. Perlukan 4 lilin terakhir sebagai bearish apabila pergi pendek, dan 4 lilin terakhir sebagai bullish apabila pergi panjang.
Tetapkan logik stop loss. Tutup kedudukan apabila harga bergerak ke arah yang tidak menguntungkan.
Tetapkan mekanisme anti-whipsaw. Hanya mengambil isyarat apabila harga pulih untuk menghentikan tahap kerugian selepas pergerakan awal.
Tetapkan saiz kedudukan. Gunakan peratusan modal tetap untuk setiap perdagangan, dan dua kali ganda saiz kedudukan selepas setiap kerugian.
Parameter RSI pantas yang ditetapkan dengan munasabah dapat menangkap trend dengan cepat.
Penapis pelbagai lapisan meningkatkan kadar kemenangan dengan mengurangkan bilangan perdagangan.
Pelancongan yang dilakukan oleh pihak ketiga.
Ukuran kedudukan dinamik mewujudkan pengurusan modal yang agresif.
Kerangka masa perdagangan yang boleh disesuaikan mengelakkan bunyi bising dari peristiwa utama.
Kelajuan tinggi boleh kehilangan beberapa peluang perdagangan. boleh melonggarkan parameter untuk lebih fleksibiliti.
Sukar untuk menentukan trend berakhir. Pertimbangkan untuk menggabungkan dengan penunjuk lain untuk mengesan kemungkinan pembalikan.
Kaedah saiz kedudukan terlalu agresif, boleh memperkenalkan kunci kedudukan cara.
Boleh mengoptimumkan parameter untuk pasaran yang berbeza untuk mencari kombinasi parameter yang lebih baik.
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()