Chiến lược theo dõi xu hướng trung bình di chuyển thích nghi của Kaufman

Tác giả:ChaoZhang, Ngày: 2023-12-13 17:25:33
Tags:

img

Tổng quan

Chiến lược này sử dụng Đường trung bình chuyển động thích nghi (KAMA) của Kaufman để xác định hướng xu hướng để nắm bắt xu hướng trung hạn đến dài hạn. Nó đi dài khi đường KAMA di chuyển lên và đi ngắn khi đường KAMA di chuyển xuống. Chiến lược kết hợp khả năng theo dõi xu hướng của đường trung bình chuyển động và tính năng điều chỉnh năng động của KAMA để cải thiện chất lượng tín hiệu giao dịch.

Chiến lược logic

Chỉ số cốt lõi của chiến lược này là Đường trung bình chuyển động thích nghi (KAMA) của Kaufman. KAMA điều chỉnh động yếu tố cân nặng của nó dựa trên mức độ biến động của thị trường, do đó cải thiện độ nhạy của đường cong. Cụ thể, khi biến động của thị trường tăng, đường cong KAMA trở nên mượt mà hơn; khi biến động của thị trường giảm, đường cong KAMA trở nên nhạy cảm hơn. Điều này lọc ra một số tiếng ồn trong khi vẫn nắm bắt sự đảo ngược xu hướng mới một cách kịp thời.

Chiến lược đầu tiên tính toán giá trị của KAMA. Sau đó nó xác định trạng thái dài / ngắn của đường KAMA: tín hiệu mua được tạo ra khi giá đóng vượt trên đường KAMA và tín hiệu bán được tạo ra khi giá đóng vượt dưới đường KAMA. Các vị trí được mở dựa trên các tín hiệu giao dịch này.

Phân tích lợi thế

Lợi thế lớn nhất của chiến lược này là sử dụng chỉ số KAMA để xác định xu hướng. Chỉ số KAMA có khả năng theo dõi xu hướng rất mạnh. Nó có thể điều chỉnh các tham số một cách năng động để thích nghi với điều kiện thị trường, do đó tạo ra các tín hiệu giao dịch đáng tin cậy hơn so với các đường trung bình di chuyển đơn giản và đường trung bình di chuyển theo cấp số nhân.

Ngoài ra, chiến lược chỉ sử dụng trạng thái dài / ngắn của KAMA để xác định hướng xu hướng. Không có bộ lọc bổ sung, đơn giản hóa logic chiến lược và giảm số lượng tham số, giảm nguy cơ quá mức và cải thiện tính ổn định và khả năng thích nghi trên các thị trường.

Phân tích rủi ro

Rủi ro chính của chiến lược này là KAMA là một chỉ số chậm, vì vậy xu hướng thị trường có thể đã đảo ngược vào thời điểm các tín hiệu giao dịch được tạo ra, dẫn đến rủi ro dừng lỗ. Ngoài ra, có thể có sự dao động ngắn hạn trong đường cong KAMA, có thể tạo ra một số tín hiệu sai thường xuyên.

Để giảm thiểu rủi ro, các chỉ số khác có thể được kết hợp để xác nhận tín hiệu giao dịch, chẳng hạn như chỉ số biến động, chỉ số khối lượng, vv. Các thông số cũng có thể được điều chỉnh để làm cho đường cong KAMA mượt mà hơn.

Hướng dẫn tối ưu hóa

Vẫn còn nhiều chỗ để tối ưu hóa chiến lược này, chủ yếu là trong các khía cạnh sau:

  1. Kết hợp các chỉ số khác để lọc tín hiệu, chẳng hạn như MACD, dao động, vv, để cải thiện chất lượng tín hiệu.

  2. Thêm các chiến lược dừng lỗ như dừng lỗ di chuyển hoặc dừng dựa trên đường cong vốn để kiểm soát lỗ giao dịch duy nhất.

  3. Tối ưu hóa các thông số để làm cho KAMA hiệu quả hơn trong việc bắt được xu hướng.

  4. Thêm phân tích nhiều khung thời gian để xác định hướng xu hướng chính bằng cách sử dụng khung thời gian cao hơn.

  5. Sử dụng các phương pháp học máy để tự động tối ưu hóa các tham số để thích nghi giữa các thiết bị.

Kết luận

Khả năng theo dõi xu hướng mạnh mẽ, logic đơn giản và ít thông số hơn. Nhưng nó cũng có nguy cơ bị tụt hậu trong việc xác định sự đảo ngược xu hướng. Chiến lược có thể được cải thiện theo nhiều cách để làm cho nó hiệu quả và thích nghi hơn.


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

Thêm nữa