Strategi ini menggunakan Kaufman's Adaptive Moving Average (KAMA) untuk menentukan arah tren untuk menangkap tren jangka menengah hingga panjang. Strategi ini menggabungkan kemampuan pelacakan tren rata-rata bergerak dan fitur penyesuaian dinamis KAMA untuk meningkatkan kualitas sinyal perdagangan.
Indikator inti dari strategi ini adalah Kaufman's Adaptive Moving Average (KAMA). KAMA secara dinamis menyesuaikan faktor bobotnya berdasarkan besarnya volatilitas pasar, sehingga meningkatkan sensitivitas kurva. Secara khusus, ketika volatilitas pasar meningkat, kurva KAMA menjadi lebih halus; ketika volatilitas pasar menurun, kurva KAMA menjadi lebih sensitif. Ini menyaring beberapa kebisingan sambil masih menangkap pembalikan tren baru secara tepat waktu.
Strategi ini pertama kali menghitung nilai KAMA. Kemudian menentukan kondisi panjang/pendek dari garis KAMA: sinyal beli dihasilkan ketika harga penutupan melintasi di atas garis KAMA, dan sinyal jual dihasilkan ketika harga penutupan melintasi di bawah garis KAMA. Posisi dibuka berdasarkan sinyal perdagangan ini.
Keuntungan terbesar dari strategi ini adalah penggunaan indikator KAMA untuk penentuan tren. Indikator KAMA itu sendiri memiliki kemampuan pelacakan tren yang sangat kuat. Ini dapat secara dinamis menyesuaikan parameter untuk beradaptasi dengan kondisi pasar, sehingga menghasilkan sinyal perdagangan yang lebih dapat diandalkan dibandingkan dengan rata-rata bergerak sederhana dan rata-rata bergerak eksponensial.
Selain itu, strategi hanya menggunakan kondisi panjang/pendek KAMA untuk menentukan arah tren. Tidak ada filter tambahan, yang menyederhanakan logika strategi dan mengurangi jumlah parameter, mengurangi risiko overfit dan meningkatkan stabilitas dan kemampuan beradaptasi di seluruh pasar.
Risiko utama dari strategi ini adalah bahwa KAMA adalah indikator yang tertinggal, sehingga tren pasar mungkin sudah terbalik pada saat sinyal perdagangan dihasilkan, yang mengarah pada risiko stop loss.
Untuk mengurangi risiko, indikator lain dapat dikombinasikan untuk mengkonfirmasi sinyal perdagangan, seperti indikator volatilitas, indikator volume, dll. Parameter juga dapat disesuaikan untuk membuat kurva KAMA lebih halus.
Masih banyak ruang untuk mengoptimalkan strategi ini, terutama dalam aspek berikut:
Menggabungkan indikator lain untuk penyaringan sinyal, seperti MACD, osilator dll, untuk meningkatkan kualitas sinyal.
Tambahkan strategi stop loss seperti stop loss bergerak atau stop berbasis kurva ekuitas untuk mengendalikan kerugian perdagangan tunggal.
Mengoptimalkan parameter untuk membuat KAMA lebih efektif dalam menangkap tren.
Tambahkan analisis multi-frame waktu untuk menentukan arah tren utama menggunakan jangka waktu yang lebih tinggi.
Gunakan metode pembelajaran mesin untuk mengoptimalkan parameter secara otomatis untuk beradaptasi di seluruh instrumen.
Logika keseluruhan strategi ini jelas, menggunakan indikator KAMA untuk menentukan arah tren. Ini memiliki keuntungan seperti kemampuan pelacakan tren yang kuat, logika sederhana dan lebih sedikit parameter. Tapi juga memiliki risiko tertinggal dalam mengidentifikasi pembalikan tren. Strategi dapat ditingkatkan dengan banyak cara untuk membuatnya lebih efektif dan dapat beradaptasi.
/*backtest start: 2022-12-06 00:00:00 end: 2023-12-12 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //Noro //2019 //@version=3 strategy(title = "Noro's KAMA Strategy", shorttitle="KAMA str", overlay=true, 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") capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Lot") length = input(3, minval = 1) fast = input(2, minval = 1) slow = input(30, minval = 1) src = input(title = "Source", defval = close) type = input(defval = "Trend", options = ["Trend", "Crossing"], title = "Type") fromyear = input(1900, defval = 1900, 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") //KAMA volatility = sum(abs(src-src[1]), length) change = abs(src[1]-src[length]) er = iff(volatility != 0, change/volatility, 0) fastSC = 2/(fast+1) slowSC = 2/(slow+1) sc = pow((er*(fastSC-slowSC))+slowSC, 2) bid = hl2 kama = 0.0 kama := nz(kama[1])+(sc*(bid-nz(kama[1]))) plot(kama, color = black, title = "KAMA", trackprice = false, style = line, linewidth = 3) //Signals up = false dn = false up := (type == "Crossing" and kama > kama[1]) or (type == "Trend" and close > kama) dn := (type == "Crossing" and kama < kama[1]) or (type == "Trend" and close < kama) //Trading size = strategy.position_size lot = 0.0 lot := size == 0 ? strategy.equity / close * capital / 100 : lot[1] if up strategy.entry("L", strategy.long, needlong ? lot : 0, when = (time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59))) if dn strategy.entry("S", strategy.short, needshort ? lot : 0, when = (time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))