Strategi ini menggunakan Kanfman Adaptive Moving Average (KAMA) untuk menentukan arah trend, untuk menangkap trend garis tengah dan panjang. Strategi ini menggabungkan fungsi trend pengesanan purata bergerak dan ciri-ciri penyesuaian dinamik Kanfman Adaptive Average untuk meningkatkan kualiti isyarat perdagangan.
Indikator utama strategi ini adalah Kafman Adaptive Moving Average (KAMA). KAMA secara dinamik menyesuaikan faktor beratnya sendiri mengikut saiz turun naik pasaran, sehingga meningkatkan kepekaan kurva. Secara khusus, apabila turun naik pasaran meningkat, kurva KAMA menjadi lebih rata; apabila turun naik pasaran menurun, kurva KAMA menjadi lebih sensitif.
Strategi pertama mengira nilai KAMA. Kemudian menilai keadaan KAMA yang kosong: apabila harga tutup melintasi garis KAMA, ia menghasilkan isyarat beli. Apabila harga tutup melintasi garis KAMA, ia menghasilkan isyarat jual.
Kelebihan terbesar strategi ini adalah menggunakan penunjuk KAMA untuk menilai trend. Penunjuk KAMA sendiri mempunyai keupayaan pengesanan trend yang kuat, ia boleh menyesuaikan parameter secara dinamik untuk menyesuaikan diri dengan keadaan pasaran, sehingga menghasilkan isyarat perdagangan yang lebih dipercayai.
Selain itu, strategi ini hanya menggunakan keadaan kosong KAMA untuk menilai arah trend. Tidak ada syarat penapisan tambahan yang ditetapkan, yang menyederhanakan logik strategi dan juga menjadikan lebih sedikit parameter, mengurangkan risiko pengoptimuman berlebihan, yang membantu kestabilan parameter dan kesesuaian merentas pasaran.
Risiko utama strategi ini adalah bahawa KAMA itu sendiri sebagai penunjuk ketinggalan, trend pasaran mungkin telah berbalik ketika isyarat perdagangan dibuat. Ini akan menyebabkan risiko kerugian. Selain itu, terdapat juga keadaan goyah jangka pendek di dalam kurva KAMA, yang mungkin menghasilkan beberapa isyarat salah yang kerap.
Untuk mengurangkan risiko, anda boleh mempertimbangkan untuk mengesahkan isyarat perdagangan dengan menggunakan indikator lain, seperti indikator kadar turun naik, indikator jumlah transaksi, dan lain-lain. Anda juga boleh menyesuaikan parameter dengan sewajarnya, Identification menjadikan kurva KAMA lebih halus.
Strategi ini masih mempunyai banyak ruang untuk dioptimumkan, terutamanya dari segi berikut:
Penapisan isyarat digabungkan dengan penunjuk lain, seperti MACD, penunjuk gegaran, dan lain-lain, untuk meningkatkan kualiti isyarat
Meningkatkan strategi hentikan kerugian, menggunakan hentikan bergerak atau hentikan kurva baki untuk mengawal kerugian tunggal
Optimumkan parameter untuk menangkap trend KAMA dengan lebih berkesan
Menambah analisis kitaran masa yang lebih tinggi untuk menentukan arah trend besar
Menggunakan kaedah pembelajaran mesin untuk mengoptimumkan parameter secara automatik untuk menyesuaikan parameter dengan varieti yang berbeza
Strategi ini mempunyai pemikiran yang jelas, menilai arah trend melalui indikator KAMA, mempunyai kelebihan seperti keupayaan untuk mengikuti trend yang kuat, logik yang mudah, parameter yang lebih sedikit. Tetapi ada juga risiko untuk mengesan perubahan trend yang ketinggalan zaman.
/*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)))