
Strategi momentum tembakan adalah strategi perdagangan kuantitatif yang menggabungkan indikator momentum acak dan indikator relatif kuat. Strategi ini menggunakan indikator momentum acak untuk menilai area overbought dan oversold di pasar, bekerja dengan indikator RSI cepat untuk memfilter sinyal, dan kemudian melakukan pilihan sinyal perdagangan yang lebih andal melalui pemfilteran fisik.
Indeks Momentum Acak (SMI) adalah indikator teknis yang umum digunakan dalam perdagangan kuantitatif, yang menggabungkan keunggulan indikator momentum dan indikator getaran.
Secara khusus, rumus perhitungan SMI adalah sebagai berikut:
SMI = (Close - (HH + LL)/2)/(0.5*(HH - LL)) * 100
Di antaranya, HH adalah harga tertinggi dalam N hari terakhir dan LL adalah harga terendah dalam N hari terakhir.
Dengan cara ini, SMI menggabungkan penilaian tren momentum dan penilaian reversal of oscillation. Ketika SMI lebih tinggi dari 80 berarti overbought, dan di bawah 20 berarti oversold. Strategi ini akan mengirimkan sinyal perdagangan di zona overbought dan oversold.
RSI adalah indikator overbought/oversold yang digunakan untuk menilai kondisi overbought/oversold dalam jangka pendek.
Ketika RSI cepat di bawah 20 berarti oversold dan di atas 80 berarti overbought. Strategi ini akan mengirimkan sinyal perdagangan di zona overbought dan oversold.
Strategi ini juga menambahkan filter entitas, yang memfilter sebagian sinyal dengan menghitung ukuran entitas K-line. Sinyal transaksi hanya akan dikirimkan ketika entitas K-line melebihi batas tertentu.
Ini akan menyaring beberapa sinyal palsu dan meningkatkan keandalan sinyal.
Strategi ini menggabungkan tiga bagian: indikator dinamis acak, indikator RSI cepat, dan filter entitas. Dengan menggabungkan beberapa indikator, Anda dapat meningkatkan akurasi sinyal dan meningkatkan stabilitas strategi.
Indikator momentum acak dan RSI cepat dapat secara akurat menilai kondisi overbought dan oversold di pasar. Strategi untuk membuka posisi di zona overbought dan oversold, mengikuti prinsip perdagangan untuk membeli posisi rendah dan menjual posisi tinggi.
Strategi ini memungkinkan untuk melakukan perdagangan dua arah dengan multihead dan headless, untuk menangkap peluang perdagangan maksimum di pasar.
Penambahan filter fisik, yang dapat menyaring sebagian besar suara, menghindari terkunci dalam situasi getaran.
Strategi untuk melakukan perdagangan dua arah, sering beralih dengan banyak kepala kosong adalah titik risiko potensial. Logika posisi yang dioptimalkan dengan tepat dapat mengurangi risiko ini.
Ketika indikator memberi sinyal, mungkin akan mengumpulkan sejumlah besar pedagang yang mengikuti dalam waktu singkat, yang menyebabkan risiko reversal pasar. Risiko ini dapat dikurangi dengan mengoptimalkan parameter indikator.
Dalam situasi yang ekstrim, semua model dapat gagal. Ini perlu untuk mengendalikan risiko tersebut dengan pengaturan stop loss yang masuk akal.
Anda dapat mencari parameter optimal untuk meningkatkan tingkat pengembalian strategi dengan menguji kombinasi parameter yang berbeda, seperti siklus SMI, siklus RSI, dan filter entitas.
Dengan adanya mekanisme stop loss dinamis berdasarkan ATR atau volatilitas, maka akan lebih baik untuk mengendalikan risiko individu dan keseluruhan.
Memperkenalkan algoritma pembelajaran mesin untuk memprediksi pergerakan masa depan dari nilai indikator melalui model. Hal ini dapat menentukan titik balik indikator lebih awal dan meningkatkan ke depan dari strategi.
Secara keseluruhan, strategi ini mengintegrasikan indikator dinamis acak, indikator RSI cepat, dan filter entitas, untuk mencapai sistem penilaian overbought dan oversold yang relatif lengkap. Kombinasi multi-indikator meningkatkan akurasi sinyal, dan mekanisme perdagangan dua arah dan kontrol risiko juga membuat strategi lebih seimbang. Dengan terus mengoptimalkan parameter dan model, strategi ini diharapkan untuk mendapatkan tingkat keuntungan yang lebih baik.
/*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()