Kaufman's Adaptive Moving Average Trend Tracking Strategi

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

img

Ringkasan

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.

Logika Strategi

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.

Analisis Kelebihan

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.

Analisis Risiko

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.

Arahan pengoptimuman

Masih ada ruang yang besar untuk mengoptimumkan strategi ini, terutamanya dalam aspek berikut:

  1. Gabungkan penunjuk lain untuk penapisan isyarat, seperti MACD, osilator dan lain-lain, untuk meningkatkan kualiti isyarat.

  2. Tambah strategi stop loss seperti stop loss bergerak atau stop berdasarkan kurva ekuiti untuk mengawal kerugian perdagangan tunggal.

  3. Mengoptimumkan parameter untuk menjadikan KAMA lebih berkesan dalam menangkap trend.

  4. Tambah analisis pelbagai jangka masa untuk menentukan arah trend utama menggunakan jangka masa yang lebih tinggi.

  5. Gunakan kaedah pembelajaran mesin untuk mengoptimumkan parameter secara automatik untuk menyesuaikan diri di seluruh instrumen.

Kesimpulan

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

Lebih lanjut