Strategi ini menggunakan Kaufman's Adaptive Moving Average (KAMA) untuk menentukan arah trend untuk menangkap trend jangka sederhana hingga panjang. Ia pergi lama apabila garis KAMA bergerak ke atas dan pergi pendek apabila garis KAMA bergerak ke bawah. Strategi ini menggabungkan keupayaan penjejakan trend purata bergerak dan ciri penyesuaian dinamik KAMA untuk meningkatkan kualiti isyarat perdagangan.
Indikator teras strategi ini adalah Kaufman's Adaptive Moving Average (KAMA). KAMA secara dinamik menyesuaikan faktor beratannya berdasarkan besarnya turun naik pasaran, dengan itu meningkatkan kepekaan kurva. Khususnya, apabila turun naik pasaran meningkat, kurva KAMA menjadi lebih lancar; apabila turun naik pasaran, kurva KAMA menjadi lebih sensitif. Ini menapis beberapa bunyi sambil masih menangkap pembalikan trend baru dengan tepat pada masanya.
Strategi ini mula-mula mengira nilai KAMA. Kemudian ia menentukan keadaan panjang / pendek garis KAMA: isyarat beli dihasilkan apabila harga penutupan melintasi di atas garis KAMA, dan isyarat jual dihasilkan apabila harga penutupan melintasi di bawah garis KAMA. Posisi dibuka berdasarkan isyarat perdagangan ini.
Kelebihan terbesar strategi ini adalah penggunaan penunjuk KAMA untuk penentuan trend. Penunjuk KAMA itu sendiri mempunyai keupayaan penjejakan trend yang sangat kuat. Ia boleh menyesuaikan parameter secara dinamik untuk menyesuaikan diri dengan keadaan pasaran, dengan itu menghasilkan isyarat perdagangan yang lebih boleh dipercayai berbanding dengan purata bergerak mudah dan purata bergerak eksponensial.
Di samping itu, strategi hanya menggunakan keadaan panjang/pendek KAMA untuk menentukan arah trend. Tidak ada penapis tambahan, yang mempermudah logik strategi dan mengurangkan bilangan parameter, mengurangkan risiko overfit dan meningkatkan kestabilan dan kesesuaian di seluruh pasaran.
Risiko utama strategi ini adalah bahawa KAMA adalah penunjuk yang tertinggal, jadi trend pasaran mungkin telah berbalik pada masa isyarat perdagangan dihasilkan, yang membawa kepada risiko kehilangan berhenti.
Untuk mengurangkan risiko, penunjuk lain boleh digabungkan untuk mengesahkan isyarat dagangan, seperti penunjuk turun naik, penunjuk jumlah, dll. Parameter juga boleh diselaraskan untuk menjadikan kurva KAMA lebih lancar.
Masih ada ruang yang besar untuk mengoptimumkan strategi ini, terutamanya dalam aspek berikut:
Gabungkan penunjuk lain untuk penapisan isyarat, seperti MACD, osilator dan lain-lain, untuk meningkatkan kualiti isyarat.
Tambah strategi stop loss seperti stop loss bergerak atau stop berdasarkan kurva ekuiti untuk mengawal kerugian perdagangan tunggal.
Mengoptimumkan parameter untuk menjadikan KAMA lebih berkesan dalam menangkap trend.
Tambah analisis pelbagai jangka masa untuk menentukan arah trend utama menggunakan jangka masa yang lebih tinggi.
Gunakan kaedah pembelajaran mesin untuk mengoptimumkan parameter secara automatik untuk menyesuaikan diri di seluruh instrumen.
Logik keseluruhan strategi ini jelas, menggunakan penunjuk KAMA untuk menentukan arah trend. Ia mempunyai kelebihan seperti keupayaan penjejakan trend yang kuat, logika mudah dan lebih sedikit parameter. Tetapi ia juga mempunyai risiko ketinggalan dalam mengenal pasti pembalikan trend. Strategi ini boleh dipertingkatkan dengan banyak cara untuk menjadikannya lebih berkesan dan mudah disesuaikan.
/*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)))