
Ini adalah strategi perdagangan yang dipersonalisasi yang menggabungkan indikator momentum dan penyaringan entitas K-line. Ini menggunakan tiga indikator teknis secara komprehensif, yaitu indeks momentum acak, RSI cepat, dan penyaringan entitas K-line, untuk mencapai terobosan dinamis, dengan mempertimbangkan strategi overbought dan oversold.
Strategi ini menggunakan tiga indikator berikut untuk menilai sinyal perdagangan:
Indeks Dynamic Randomization (SMI): Ini menggabungkan jarak antara entitas K-line dan posisi relatif dari harga penutupan, untuk menentukan apakah dinamika harga kuat atau lemah. SMI menghasilkan sinyal beli ketika melintasi garis batas, dan sinyal jual ketika melintasi garis batas.
RSI cepat ((7th line): Ini menilai kondisi harga overbought dan oversold. RSI di bawah 20 menghasilkan sinyal beli untuk overbought, di atas 80 menghasilkan sinyal jual untuk overbought.
K-Line Entity Filter: Menghitung ukuran entitas K-Line rata-rata dalam 10 hari, dan berlaku saat entitas K-Line hari ini melebihi sepertiga dari nilai rata-rata tersebut, untuk menghindari sinyal tidak valid.
Strategi ini pertama-tama menilai sinyal dari SMI dan RSI, dan jika memenuhi persyaratan sinyal dari salah satu indikator, kemudian digabungkan dengan K-line entitas filter untuk menentukan apakah sinyal tersebut valid, dan jika valid menghasilkan sinyal perdagangan.
Strategi ini memiliki keuntungan sebagai berikut:
Ini adalah salah satu dari beberapa indikator yang dapat digunakan untuk menilai lebih akurat dan lebih dapat dipercaya.
Tambahkan filter entitas K-line untuk menghindari sinyal yang tidak valid.
Dengan adanya penilaian overbought dan oversold, lebih mudah untuk menangkap sinyal pada titik balik tren.
Lebih banyak perdagangan dua arah, lebih banyak peluang untuk mendapatkan keuntungan.
Menggunakan sebagian posisi perdagangan untuk menghindari kerugian berlebihan dalam satu transaksi.
Strategi ini juga memiliki beberapa risiko:
Indikator dapat menyebabkan kesalahan sinyal yang dapat menyebabkan kerugian.
Beberapa perdagangan posisi tidak dapat memanfaatkan sepenuhnya peluang tren di setiap arah. Dapat memperoleh keuntungan yang lebih tinggi dengan memperbesar posisi perdagangan.
SMI sebagai indikator utama, sensitif terhadap pengaturan parameter, pengaturan yang tidak tepat dapat melewatkan peluang perdagangan atau meningkatkan sinyal yang salah.
Transaksi dua arah multi ruang, operasi sering, biaya transaksi meningkat.
Strategi ini dapat dioptimalkan lebih lanjut dari beberapa arah:
Optimalkan parameter SMI dan RSI untuk menemukan kombinasi optimal.
Meningkatkan amplifikasi posisi dan mekanisme manajemen posisi untuk mendapatkan keuntungan yang lebih tinggi dalam tren.
Meningkatkan strategi stop loss dan mengurangi risiko kerugian tunggal.
Dengan lebih banyak indikator untuk menilai keandalan sinyal, sinyal palsu akan berkurang.
Menggunakan kontrak yang efisien untuk mengurangi biaya transaksi.
Strategi ini menggunakan tiga indikator teknis SMI, RSI cepat, dan K-line entitas filter, untuk mencapai strategi perdagangan yang dipersonalisasi yang berorientasi pada momentum, yang mempertimbangkan overbought dan oversold. Strategi ini memiliki keunggulan seperti penilaian yang akurat, identifikasi sinyal yang efektif, kombinasi overbought dan oversold dan perdagangan berlubang, tetapi ada juga beberapa risiko sensitivitas parameter, tidak dapat memanfaatkan tren secara penuh, dan sering beroperasi. Dengan terus-menerus mengoptimalkan pengaturan parameter, meningkatkan posisi dan manajemen stop loss, mengurangi sinyal palsu, dan lain-lain.
/*backtest
start: 2023-10-23 00:00:00
end: 2023-11-22 00:00:00
period: 6h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//Noro
//2018
//@version=2
strategy(title = "Noro's Stochastic Strategy v1.2", shorttitle = "Stochastic str 1.2", 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")
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()