Strategi ini menggunakan penunjuk momentum stokastik berganda (SMI dan RSI) untuk isyarat panjang dan pendek, bersama dengan martingale dan penapis badan untuk pemilihan isyarat perdagangan, bertujuan untuk menangkap trend jangka menengah dan turun naik harga.
Strategi ini menilai panjang dan pendek menggunakan dua penunjuk stokastik SMI dan RSI. SMI dikira berdasarkan purata bergerak julat bar dan harga dekat, baik dalam mengenal pasti titik pembalikan. RSI membandingkan kekuatan bull dan bear untuk menentukan status overbought dan oversold. Strategi pergi panjang apabila SMI di bawah -50 dan RSI di bawah 20; pergi pendek apabila SMI di atas 50 dan RSI di atas 80.
Untuk menapis pecah palsu, strategi juga menggunakan 1/3 dari SMA badan 10 tempoh sebagai keadaan penapis terobosan.
Di samping itu, strategi ini menggunakan martingale pilihan, iaitu untuk meningkatkan banyak perdagangan yang rugi, cuba memulihkan kerugian sebelumnya.
Fungsi Backtest menguji semula strategi dengan memasukkan julat tarikh.
Strategi ini menggabungkan penunjuk dan penapis stokastik berganda, yang dapat mengenal pasti titik pembalikan dengan berkesan, menangkap trend jangka menengah, dan mengesan turun naik harga.
Risiko boleh dikurangkan dengan mengoptimumkan parameter SMI dan RSI untuk mengurangkan kebarangkalian mengejar / membunuh, menggunakan martingale secara strategik dengan mengawal nisbah skala dan masa, dan membolehkan penapis berdasarkan keadaan pasaran.
Strategi ini menggabungkan penunjuk stokastik berganda untuk menangkap titik pembalikan, dengan penapis dan martingale untuk pemilihan isyarat perdagangan dan mengejar. Ia dapat mengenal pasti dengan berkesan trend jangka menengah dan melacak turun naik harga, sesuai untuk pelabur yang mengejar kadar kemenangan yang tinggi. Perhatikan risiko pasaran penunjuk yang tertinggal dan berkisar, menguruskan risiko dengan pengoptimuman parameter dan stop loss.
/*backtest start: 2022-09-30 00:00:00 end: 2023-10-06 00:00:00 period: 2d basePeriod: 1d exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=2 // strategy(title = "CS Basic Scripts - Stochastic Special (Strategy)", shorttitle = "Stochastic Special", overlay = false, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 0) //Settings needlong = input(true, defval = true, title = "Long") needshort = input(true, defval = true, title = "Short") usemar = input(false, defval = false, title = "Use Martingale") capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Capital, %") usesmi = input(true, defval = true, title = "Use SMI Strategy") usersi = input(true, defval = true, title = "Use RSI Strategy") usebod = input(true, defval = true, title = "Use Body-Filter") a = input(5, "SMI Percent K Length") b = input(3, "SMI Percent D Length") limit = input(50, defval = 50, minval = 1, maxval = 100, title = "SMI Limit") //Backtesting Input Range fromyear = input(2017, defval = 2017, 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") //Fast RSI fastup = rma(max(change(close), 0), 7) fastdown = rma(-min(change(close), 0), 7) fastrsi = fastdown == 0 ? 100 : fastup == 0 ? 0 : 100 - (100 / (1 + fastup / fastdown)) //Stochastic Momentum Index ll = lowest (low, a) hh = highest (high, a) diff = hh - ll rdiff = close - (hh+ll)/2 avgrel = ema(ema(rdiff,b),b) avgdiff = ema(ema(diff,b),b) SMI = avgdiff != 0 ? (avgrel/(avgdiff/2)*100) : 0 SMIsignal = ema(SMI,b) //Lines plot(SMI, color = blue, linewidth = 3, title = "Stochastic Momentum Index") plot(SMIsignal, color = red, linewidth = 3, title = "SMI Signal Line") plot(limit, color = black, title = "Over Bought") plot(-1 * limit, color = black, title = "Over Sold") plot(0, color = blue, title = "Zero Line") //Body Filter nbody = abs(close - open) abody = sma(nbody, 10) body = nbody > abody / 3 or usebod == false //Signals up1 = SMI < -1 * limit and close < open and body and usesmi dn1 = SMI > limit and close > open and body and usesmi up2 = fastrsi < 20 and close < open and body and usersi dn2 = fastrsi > 80 and close > open and body and usersi exit = ((strategy.position_size > 0 and close > open) or (strategy.position_size < 0 and close < open)) and body //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 up1 or up2 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 dn1 or dn2 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()