Kaufman Adaptive Moving Average Trend Tracking Strategi

Penulis:ChaoZhang, Tanggal: 2023-12-13 17:25:33
Tag:

img

Gambaran umum

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.

Logika Strategi

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.

Analisis Keuntungan

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.

Analisis Risiko

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.

Arahan Optimasi

Masih banyak ruang untuk mengoptimalkan strategi ini, terutama dalam aspek berikut:

  1. Menggabungkan indikator lain untuk penyaringan sinyal, seperti MACD, osilator dll, untuk meningkatkan kualitas sinyal.

  2. Tambahkan strategi stop loss seperti stop loss bergerak atau stop berbasis kurva ekuitas untuk mengendalikan kerugian perdagangan tunggal.

  3. Mengoptimalkan parameter untuk membuat KAMA lebih efektif dalam menangkap tren.

  4. Tambahkan analisis multi-frame waktu untuk menentukan arah tren utama menggunakan jangka waktu yang lebih tinggi.

  5. Gunakan metode pembelajaran mesin untuk mengoptimalkan parameter secara otomatis untuk beradaptasi di seluruh instrumen.

Kesimpulan

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)))

Lebih banyak