Strategi Perdagangan Momentum Pribadi

Penulis:ChaoZhang, Tanggal: 2023-11-23
Tag:

img

Gambaran umum

Ini adalah strategi perdagangan yang dipersonalisasi yang menggabungkan indikator momentum dan penyaringan entitas candlestick. Ini secara komprehensif menggunakan tiga indikator teknis - Indeks Momentum Stochastic, RSI cepat dan penyaringan entitas candlestick untuk menerapkan strategi berbasis momentum terobosan sambil juga mempertimbangkan kondisi overbought dan oversold.

Logika Perdagangan

Strategi ini menggunakan tiga indikator berikut untuk penilaian sinyal perdagangan:

  1. Stochastic Momentum Index (SMI): Ini menggabungkan jarak antara entitas lilin dan posisi relatif harga penutupan untuk menilai kekuatan atau kelemahan momentum harga.

  2. RSI cepat (garis 7 hari): Ini menilai kondisi harga yang terlalu banyak dibeli dan terlalu banyak dijual. RSI di bawah 20 menghasilkan sinyal beli sebagai oversold sementara di atas 80 menghasilkan sinyal jual sebagai overbought.

  3. Candlestick Entity Filter: Menghitung ukuran entitas candlestick rata-rata selama 10 hari terakhir. Hanya mengaktifkan sinyal ketika entitas candlestick hari ini melebihi sepertiga dari rata-rata itu untuk menghindari sinyal yang tidak valid.

Strategi ini pertama-tama menilai sinyal dari SMI dan RSI. Jika salah satu persyaratan sinyal indikator terpenuhi, maka gabungkan filter entitas candlestick untuk menentukan apakah sinyal itu valid dan menghasilkan sinyal perdagangan jika valid.

Analisis Keuntungan

Strategi ini memiliki keuntungan berikut:

  1. Penghakiman lebih tepat dan dapat diandalkan dengan kombinasi beberapa indikator.

  2. Penambahan filter entitas candlestick menghindari sinyal yang tidak valid.

  3. Dengan menggabungkan kondisi overbought/oversold, lebih mudah untuk menangkap sinyal pada titik pembalikan tren.

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

  5. Perdagangan posisi parsial menghindari kerugian satu kali yang berlebihan.

Analisis Risiko

Strategi ini juga memiliki beberapa risiko:

  1. Indikator dapat menghasilkan sinyal palsu yang menyebabkan kerugian. Optimasi parameter dapat mengurangi sinyal palsu.

  2. Perdagangan posisi parsial tidak dapat sepenuhnya memanfaatkan peluang tren di setiap arah. Pengembalian yang lebih tinggi dapat dicapai dengan memperkuat ukuran posisi perdagangan.

  3. Sebagai indikator utama, SMI sensitif terhadap pengaturan parameter. Konfigurasi yang tidak benar dapat kehilangan peluang perdagangan atau meningkatkan sinyal palsu.

  4. Perdagangan yang sering dengan strategi dua arah meningkatkan biaya transaksi.

Arahan Optimasi

Strategi ini dapat dioptimalkan lebih lanjut dalam aspek berikut:

  1. Mengoptimalkan parameter untuk SMI dan RSI untuk menemukan kombinasi parameter terbaik.

  2. Meningkatkan ukuran posisi dan mekanisme manajemen posisi untuk mencapai pengembalian yang lebih tinggi selama tren.

  3. Tambahkan strategi stop loss untuk mengurangi risiko kerugian satu kali.

  4. Gabungkan lebih banyak indikator untuk menilai keandalan sinyal dan mengurangi sinyal palsu.

  5. Mengadopsi kontrak yang efisien untuk mengurangi biaya transaksi.

Kesimpulan

Strategi ini secara komprehensif memanfaatkan SMI, RSI cepat dan indikator penyaringan entitas candlestick untuk menerapkan strategi perdagangan yang dipersonalisasi berdasarkan momentum, overbought/oversold-aware. Strategi ini memiliki keuntungan seperti penilaian yang tepat, identifikasi sinyal yang valid, kombinasi kondisi overbought/oversold dan perdagangan dua arah, tetapi juga risiko seperti sensitivitas parameter, ketidakmampuan untuk sepenuhnya memanfaatkan tren, dan operasi yang sering. Dengan terus mengoptimalkan parameter, meningkatkan ukuran posisi dan manajemen stop loss, mengurangi sinyal palsu, strategi dapat mencapai kinerja 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 banyak