
Strategi ini adalah strategi perdagangan menggunakan indikator indeks reversal reversal dua arah. Strategi ini membina indeks reversal dengan mengira harga tertinggi, terendah, dan harga penutupan dalam jangka masa tertentu, dan mengira purata bergeraknya untuk membentuk isyarat perdagangan.
Penunjuk teras strategi ini adalah Indeks Momentum Stokastik (SMI). Rumus SMI adalah seperti berikut:
\[SMI = \frac{Close-(HH+LL)/2}{AVGDIFF/2}*100\]
Di antaranya, HH adalah harga tertinggi dalam masa N hari yang lalu, LL adalah harga terendah dalam masa N hari yang lalu, N ditentukan oleh parameter a; AVGDIFF adalah purata bergerak M hari HH-LL, M ditentukan oleh parameter b.
Indeks SMI mencerminkan ciri-ciri harga yang berbalik. Apabila harga saham mendekati titik tertinggi dalam N hari terakhir, SMI mendekati 100, menunjukkan saham yang terlalu banyak dibeli; Apabila mendekati titik terendah dalam N hari terakhir, SMI mendekati 100, menunjukkan saham yang terlalu banyak dijual. Apabila SMI berbalik turun dari paras 100 atau naik dari paras 100, ia mengeluarkan isyarat beli / jual.
Strategi ini menggunakan SMI M-Day Moving Average SMA sebagai garis isyarat dagangan. Isyarat beli dihasilkan apabila SMI berbalik ke bawah dari kawasan overbought ke bawah dan menembusi SMA; isyarat jual dihasilkan apabila SMI berbalik ke atas dari kawasan oversold ke atas dan menembusi SMA.
Pada masa yang sama, strategi menilai entiti K-Line untuk menembusi dan menetapkan stop loss.
Strategi ini mempunyai kelebihan berikut:
Menggunakan prinsip pembalikan harga, dapat menghasilkan isyarat perdagangan di titik pembalikan trend, menangkap peluang pembalikan.
Indeks SMI menggabungkan harga tertinggi, harga terendah dan harga penutupan, untuk menilai secara komprehensif keadaan yang lebih banyak dibeli dan lebih banyak dijual, dan isyaratnya lebih dipercayai.
Exiting the position, untuk mengawal risiko secara berkesan.
Lebih sedikit parameter strategi, mudah dilaksanakan dan dioptimumkan.
Strategi ini juga mempunyai risiko:
Perdagangan berbalik sukar untuk menilai masa kejayaan berbalik, dan mungkin hanya menangkap trend berbalik setelah mengalami kerugian beberapa kali.
Kesilapan dalam menentukan masa berbalik boleh menyebabkan kerugian yang lebih besar.
Kemungkinan besar, penembusan terhad kepada entiti mungkin terlalu sensitif dan berkemungkinan besar untuk dikurung.
Penyelesaian:
Optimumkan parameter SMI, sesuaikan kekerapan perdagangan reverse.
Dalam kombinasi dengan penunjuk lain, ia adalah masa untuk menilai perubahan.
Sesuaikan parameter kemusnahan saiz entiti untuk mengelakkan terlalu sensitif.
Strategi ini boleh dioptimumkan dengan cara berikut:
Mengoptimumkan parameter a dan b SMI, menyesuaikan sensitiviti tangkapan terbalik.
Menambah penghakiman indikator lain untuk mengelakkan kehilangan arah trend utama. Sebagai contoh, gabungan garis rata-rata, indikator kadar turun naik dan sebagainya.
Menambah kaedah hentikan kerugian, untuk mengelakkan hentikan kerugian terlalu sensitif atau lambat. Anda boleh mempertimbangkan hentikan pengesanan, hentikan kurva dan sebagainya.
Menggabungkan model pembelajaran mesin untuk menilai kebarangkalian kejayaan pembalikan dan mengelakkan kegagalan pembalikan.
Strategi ini secara keseluruhannya adalah strategi perdagangan dua hala yang menggunakan indeks reversal SMI. Kelebihannya adalah memanfaatkan ciri reversal harga, menghasilkan isyarat perdagangan pada titik reversal, dan dapat menangkap lebih banyak peluang perdagangan garis pendek. Tetapi ada juga beberapa risiko perdagangan reversal yang tipikal, yang memerlukan pengoptimuman parameter dan hentian untuk mengelakkan kerugian. Secara keseluruhannya, strategi ini sesuai untuk pelabur yang berminat untuk melakukan perdagangan reversal, tetapi risiko harus dikendalikan dengan penilaian dan kawalan hentian yang ketat dengan penggabungan indikator lain.
/*backtest
start: 2023-11-01 00:00:00
end: 2023-11-30 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//Noro
//2018
//@version=2
strategy(title = "Noro's Stochastic Strategy v1.0", shorttitle = "Stochastic str 1.0", 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")
capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Capital, %")
a = input(5, "Percent K Length")
b = input(3, "Percent D Length")
limit = input(50, defval = 50, minval = 1, maxval = 100, title = "SMI Limit")
fromyear = input(2018, defval = 2018, 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")
//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
body = abs(close - open)
abody = sma(body, 10)
//Signals
up = SMIsignal < -1 * limit and close < open
dn = SMIsignal > limit and close > open
exit = ((strategy.position_size > 0 and close > open) or (strategy.position_size < 0 and close < open)) and body > abody / 2
//Trading
lot = strategy.position_size == 0 ? strategy.equity / close * capital / 100 : lot[1]
if up
if strategy.position_size < 0
strategy.close_all()
strategy.entry("Bottom", strategy.long, needlong == false ? 0 : lot)
if dn
if strategy.position_size > 0
strategy.close_all()
strategy.entry("Top", strategy.short, needshort == false ? 0 : lot)
if exit
strategy.close_all()