Strategi ini menggunakan dua indikator dinamik rawak ((SMI dan RSI) untuk membuat penilaian kosong, ditambah dengan penyaringan Martingale dan badan untuk memfilter isyarat perdagangan, yang bertujuan untuk menangkap trend garis pendek dan mengesan pergerakan harga.
Strategi ini menggunakan kedua-dua penunjuk dinamik rawak SMI dan RSI untuk membuat penilaian overbought. SMI dikira melalui perbezaan harga entiti K-baris dan purata bergerak harga penutupan, yang dapat mengenal pasti titik balik dengan berkesan. RSI ditentukan oleh perbandingan overbought dan oversold melalui perbandingan kuantiti overbought.
Untuk menyaring penembusan palsu, strategi ini juga menggunakan 1⁄3 daripada garis rata-rata badan 10 kitaran sebagai syarat penyaringan penembusan. Apabila entiti menembusi garis rata-rata 1⁄3, penembusan dianggap berkesan.
Selain itu, strategi ini menggunakan pilihan strategi Martingale, iaitu meletakkan kedudukan yang berpatutan pada perdagangan yang rugi, dengan harapan untuk memulihkan kerugian awal.
Backtest berfungsi untuk mengkaji semula kesan strategi dengan memasukkan masa permulaan dan akhir.
Strategi ini menggunakan penunjuk dan penapis acak ganda yang berkesan untuk mengenal pasti titik-titik perubahan, menangkap trend garis pendek, dan mengesan pergerakan harga.
Dengan mengoptimumkan parameter SMI dan RSI, anda boleh mengurangkan kebarangkalian mengejar kenaikan dan penurunan. Menggunakan strategi Martingale yang munasabah, mengawal peratusan dan frekuensi kenaikan.
Strategi ini menggabungkan penggunaan indikator acak ganda untuk menangkap titik balik, membantu penapis dan Martingale untuk menyaring dan menjejaki isyarat perdagangan, dapat mengenal pasti trend garis pendek, menjejaki turun naik harga, sesuai untuk pelabur yang mengejar kemenangan tinggi. Apabila menggunakan indikator, perhatikan risiko pasaran yang terlewat dan bergolak, boleh mengawal risiko dengan mengoptimumkan parameter dan menghentikan kerugian.
/*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()