Strategi Dagangan Momentum yang diperibadikan

Penulis:ChaoZhang, Tarikh: 2023-11-23 15:18:27
Tag:

img

Ringkasan

Ini adalah strategi dagangan peribadi yang menggabungkan penunjuk momentum dan penapisan entiti candlestick. Ia secara komprehensif menggunakan tiga penunjuk teknikal - Indeks Momentum Stochastic, RSI pantas dan penapisan entiti candlestick untuk melaksanakan strategi berdasarkan kejayaan momentum sambil juga mempertimbangkan keadaan overbought dan oversold.

Logik Perdagangan

Strategi ini menggunakan tiga penunjuk berikut untuk penilaian isyarat perdagangan:

  1. Indeks Momentum Stochastic (SMI): Ia menggabungkan jarak antara entiti lilin dan kedudukan relatif harga penutupan untuk menilai kekuatan atau kelemahan momentum harga.

  2. RSI pantas (garis 7 hari): Ia menilai keadaan harga yang terlalu banyak dibeli dan terlalu banyak dijual. RSI di bawah 20 menghasilkan isyarat beli sebagai oversold sementara di atas 80 menghasilkan isyarat jual sebagai overbought.

  3. Penapis Entiti Candlestick: Mengira saiz entiti candlestick purata selama 10 hari yang lalu. Hanya mengaktifkan isyarat apabila entiti candlestick hari ini melebihi satu pertiga daripada purata itu untuk mengelakkan isyarat yang tidak sah.

Strategi ini pertama menilai isyarat dari SMI dan RSI. Jika mana-mana keperluan isyarat penunjuk dipenuhi, maka gabungkan penapis entiti lilin untuk menentukan sama ada isyarat itu sah dan menjana isyarat perdagangan jika sah.

Analisis Kelebihan

Strategi ini mempunyai kelebihan berikut:

  1. Penghakiman lebih tepat dan boleh dipercayai dengan gabungan beberapa penunjuk.

  2. Penambahan penapis entiti candlestick mengelakkan isyarat yang tidak sah.

  3. Dengan menggabungkan keadaan overbought / oversold, lebih mudah untuk menangkap isyarat pada titik pembalikan trend.

  4. Peningkatan peluang keuntungan dengan perdagangan panjang / pendek dua arah.

  5. Perdagangan kedudukan separa mengelakkan kerugian satu kali yang berlebihan.

Analisis Risiko

Strategi ini juga mempunyai beberapa risiko:

  1. Indikator boleh menghasilkan isyarat palsu yang membawa kepada kerugian. pengoptimuman parameter boleh mengurangkan isyarat palsu.

  2. Perdagangan kedudukan separa tidak dapat memanfaatkan sepenuhnya peluang trend dalam setiap arah. pulangan yang lebih tinggi boleh dicapai dengan memperkuat saiz kedudukan perdagangan.

  3. Sebagai penunjuk utama, SMI sensitif terhadap tetapan parameter. konfigurasi yang tidak betul boleh kehilangan peluang perdagangan atau meningkatkan isyarat palsu.

  4. Perdagangan yang kerap dengan strategi dua arah meningkatkan kos transaksi.

Arahan pengoptimuman

Strategi ini boleh dioptimumkan lagi dalam aspek berikut:

  1. Mengoptimumkan parameter untuk SMI dan RSI untuk mencari kombinasi parameter terbaik.

  2. Meningkatkan ukuran kedudukan dan mekanisme pengurusan kedudukan untuk mencapai pulangan yang lebih tinggi semasa trend.

  3. Tambah strategi stop loss untuk mengurangkan risiko kerugian satu kali.

  4. Gabungkan lebih banyak penunjuk untuk menilai kebolehpercayaan isyarat dan mengurangkan isyarat palsu.

  5. Mengambil kontrak yang cekap untuk mengurangkan kos transaksi.

Kesimpulan

Strategi ini secara komprehensif menggunakan SMI, RSI pantas dan penapis entiti lilin untuk melaksanakan strategi perdagangan peribadi berdasarkan momentum, overbought / oversold-aware. Ia mempunyai kelebihan seperti penilaian yang tepat, pengenalan isyarat yang sah, gabungan keadaan overbought / oversold dan perdagangan dua arah, tetapi juga risiko seperti sensitiviti parameter, ketidakupayaan untuk memanfaatkan sepenuhnya trend, dan operasi yang kerap. Dengan terus mengoptimumkan parameter, meningkatkan ukuran kedudukan dan pengurusan kerugian berhenti, mengurangkan isyarat palsu dan lain-lain, strategi ini dapat mencapai prestasi perdagangan yang lebih baik.


/*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()

Lebih lanjut