Strategi Momentum Stochastic adalah strategi perdagangan kuantitatif yang menggabungkan Indeks Momentum Stochastic (SMI) dan Indeks Kekuatan Relatif (RSI).
Stochastic Momentum Index (SMI) adalah indikator teknis umum yang digunakan dalam perdagangan kuantitatif yang menggabungkan kekuatan indikator momentum dan osilasi.
Secara khusus, SMI dihitung sebagai:
SMI = (Dekat - (HH + LL) /2)/(0.5*(HH - LL)) * 100
dimana HH adalah harga tertinggi selama N hari terakhir, dan LL adalah harga terendah.
Jadi SMI menggabungkan kedua penilaian momentum tren-mengikuti dan penilaian pembalikan osilasi. Nilai di atas 80 dianggap overbought, sementara nilai di bawah 20 dianggap oversold. Strategi menghasilkan sinyal perdagangan ketika SMI mencapai tingkat overbought atau oversold ini.
Indeks Kekuatan Relatif (RSI) adalah indikator standar overbought/oversold. Strategi ini menggunakan RSI cepat dengan periode 7 untuk menilai kondisi overbought/oversold jangka pendek.
Pembacaan di bawah 20 dianggap oversold, sementara yang di atas 80 dianggap overbought menurut RSI cepat. Sinyal dihasilkan ketika ambang batas ini dilanggar.
Strategi ini juga menerapkan filter tubuh dengan memeriksa ukuran tubuh candlestick untuk menyaring sinyal tertentu.
Hal ini menyaring beberapa sinyal palsu dan meningkatkan keandalan.
Pendekatan ini menggabungkan SMI, RSI cepat, dan filter tubuh menjadi sistem 3 bagian yang kuat.
Kedua SMI dan RSI cepat sangat baik untuk mendeteksi tren habis. Dengan memperdagangkan pembalikan rata-rata dari area yang terlalu luas ini, strategi mematuhi membeli rendah dan menjual tinggi.
Kemampuan untuk membeli penurunan dan kenaikan pendek memaksimalkan peluang di semua kondisi pasar.
Filter tubuh menghindari whipsaws dengan menolak sinyal-konveksi rendah dalam kondisi bergoyang.
Sering beralih panjang / pendek membawa risiko whipsaw. mengoptimalkan logika bisa meminimalkan ini.
Sinyal dapat mengelompokkan peserta pasar dan mendorong pembalikan cepat setelah masuk.
Kejadian ekstrem dapat mengubah semua model. Stop loss cerdas diperlukan untuk mengendalikan risiko sistematis.
Pengujian periode SMI/RSI yang berbeda dan ambang batas filter tubuh dapat mengungkap nilai optimal untuk pengembalian yang lebih tinggi.
Memasukkan volatilitas berbasis atau ATR berhenti akan lebih baik mengandung risiko posisi dan portofolio.
Model yang memprediksi tingkat indikator masa depan dapat mengidentifikasi titik balik lebih awal.
Singkatnya, dengan mengintegrasikan SMI, RSI cepat, dan filter tubuh, strategi ini telah menciptakan sistem overbought / oversold yang cukup komprehensif. Pendekatan multi-sinyal meningkatkan akurasi, sementara kemampuan perdagangan dua arah dan pengendalian risiko berkontribusi pada keseimbangan.
/*backtest start: 2023-12-22 00:00:00 end: 2024-01-21 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //Noro //2018 //@version=2 strategy(title = "Noro's Stochastic Strategy v1.1", shorttitle = "Stochastic str 1.1", 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 = SMIsignal < -1 * limit and close < open and body and usesmi dn1 = SMIsignal > 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()