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.
Strategi ini menggunakan tiga indikator berikut untuk penilaian sinyal perdagangan:
Stochastic Momentum Index (SMI): Ini menggabungkan jarak antara entitas lilin dan posisi relatif harga penutupan untuk menilai kekuatan atau kelemahan momentum harga.
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.
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.
Strategi ini memiliki keuntungan berikut:
Penghakiman lebih tepat dan dapat diandalkan dengan kombinasi beberapa indikator.
Penambahan filter entitas candlestick menghindari sinyal yang tidak valid.
Dengan menggabungkan kondisi overbought/oversold, lebih mudah untuk menangkap sinyal pada titik pembalikan tren.
Peningkatan peluang keuntungan dengan perdagangan panjang/pendek dua arah.
Perdagangan posisi parsial menghindari kerugian satu kali yang berlebihan.
Strategi ini juga memiliki beberapa risiko:
Indikator dapat menghasilkan sinyal palsu yang menyebabkan kerugian. Optimasi parameter dapat mengurangi sinyal palsu.
Perdagangan posisi parsial tidak dapat sepenuhnya memanfaatkan peluang tren di setiap arah. Pengembalian yang lebih tinggi dapat dicapai dengan memperkuat ukuran posisi perdagangan.
Sebagai indikator utama, SMI sensitif terhadap pengaturan parameter. Konfigurasi yang tidak benar dapat kehilangan peluang perdagangan atau meningkatkan sinyal palsu.
Perdagangan yang sering dengan strategi dua arah meningkatkan biaya transaksi.
Strategi ini dapat dioptimalkan lebih lanjut dalam aspek berikut:
Mengoptimalkan parameter untuk SMI dan RSI untuk menemukan kombinasi parameter terbaik.
Meningkatkan ukuran posisi dan mekanisme manajemen posisi untuk mencapai pengembalian yang lebih tinggi selama tren.
Tambahkan strategi stop loss untuk mengurangi risiko kerugian satu kali.
Gabungkan lebih banyak indikator untuk menilai keandalan sinyal dan mengurangi sinyal palsu.
Mengadopsi kontrak yang efisien untuk mengurangi biaya transaksi.
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()