
Ini adalah strategi dagangan peribadi yang menggabungkan penyaringan entiti dinamik dan entiti K-line. Ia menggunakan tiga petunjuk teknikal: Indeks dinamik rawak, RSI cepat, dan penyaringan entiti K-line, untuk mencapai penembusan dinamik utama, sambil mempertimbangkan strategi overbought dan oversold.
Strategi ini menilai isyarat dagangan menggunakan tiga indikator berikut:
Indeks dinamik rawak ((SMI): ia menggabungkan jarak entiti K dan kedudukan relatif harga penutupan, untuk menentukan kekuatan dinamik harga. Ia menghasilkan isyarat beli apabila melintasi garis sempadan di atas SMI dan menghasilkan isyarat jual apabila melintasi garis sempadan di bawahnya.
RSI pantas ((7 hari): Ia menilai keadaan harga yang lebih tinggi daripada harga. RSI di bawah 20 menghasilkan isyarat beli untuk oversell, dan di atas 80 menghasilkan isyarat jual untuk oversell.
Penapisan entiti K-Line: Mengira saiz entiti K-Line purata dalam tempoh 10 hari, dan berkesan apabila entiti K-Line hari ini melebihi satu pertiga daripada nilai purata, untuk mengelakkan isyarat tidak sah.
Strategi ini akan menilai isyarat SMI dan RSI, dan jika ia memenuhi keperluan isyarat salah satu indikator, ia akan digabungkan dengan penapisan entiti K-line untuk menentukan apakah isyarat itu berkesan, dan jika ia berkesan, ia akan menghasilkan isyarat perdagangan.
Strategi ini mempunyai kelebihan berikut:
Ia adalah lebih tepat dan lebih dipercayai jika dikombinasikan dengan pelbagai petunjuk.
Tambah penapis entiti K-line untuk mengelakkan isyarat tidak sah.
Di samping itu, ia juga boleh digunakan untuk mengesan pergerakan mata wang dalam pasaran.
Lebih banyak perdagangan dua arah, peluang keuntungan meningkat.
Menggunakan sebahagian daripada kedudukan dagangan untuk mengelakkan kerugian yang berlebihan dalam satu dagangan.
Strategi ini juga mempunyai risiko:
Indikator mudah menghasilkan isyarat salah yang menyebabkan kerugian. Anda boleh mengurangkan isyarat salah dengan mengoptimumkan parameter.
Sesetengah perdagangan kedudukan tidak dapat memanfaatkan sepenuhnya peluang trend di setiap arah. Anda boleh mendapatkan keuntungan yang lebih tinggi dengan meningkatkan kedudukan perdagangan.
SMI sebagai penunjuk utama, sensitif kepada tetapan parameter, tetapan yang tidak betul boleh kehilangan peluang perdagangan atau menambah isyarat salah.
Perdagangan dua hala yang banyak, operasi yang kerap, kos transaksi meningkat.
Strategi ini boleh dioptimumkan dengan cara berikut:
Mengoptimumkan parameter SMI dan RSI untuk mencari kombinasi parameter terbaik.
Menambah penguatan kedudukan dan mekanisme pengurusan kedudukan untuk mendapatkan keuntungan yang lebih tinggi dalam trend.
Meningkatkan strategi hentikan kerugian dan mengurangkan risiko kerugian tunggal.
Dengan lebih banyak penunjuk untuk menilai kebolehpercayaan isyarat, isyarat palsu dikurangkan.
Menggunakan kontrak yang cekap untuk mengurangkan kos transaksi.
Strategi ini menggunakan tiga indikator teknikal SMI, RSI cepat dan penapisan entiti K-line, untuk mewujudkan strategi perdagangan peribadi yang berorientasikan dinamik, yang mempertimbangkan overbuying dan overselling. Ia mempunyai kelebihan seperti penilaian yang tepat, mengenal pasti isyarat yang berkesan, menggabungkan perdagangan overbuying dan overselling dan perdagangan berlubang, tetapi terdapat juga beberapa risiko sensitif parameter, tidak dapat memanfaatkan trend dengan sepenuhnya, dan sering beroperasi.
/*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()