Chiến lược theo dõi xu hướng trung bình động thích ứng Kanfman


Ngày tạo: 2023-12-13 17:25:33 sửa đổi lần cuối: 2023-12-13 17:25:33
sao chép: 0 Số nhấp chuột: 735
1
tập trung vào
1213
Người theo dõi

Chiến lược theo dõi xu hướng trung bình động thích ứng Kanfman

Tổng quan

Chiến lược này sử dụng phương tiện chuyển động tự điều chỉnh của Kafman (KAMA) để đánh giá xu hướng, để nắm bắt xu hướng đường dài trung bình. Khi đường KAMA tăng lên, hãy làm nhiều và khi đường KAMA giảm, hãy làm trống. Chiến lược này kết hợp tính năng theo dõi xu hướng của đường trung bình di chuyển và tính năng điều chỉnh động của phương tiện tự điều chỉnh của Kafman để cải thiện chất lượng tín hiệu giao dịch.

Nguyên tắc chiến lược

Các chỉ số cốt lõi của chiến lược này là KAMA. KAMA động điều chỉnh các yếu tố trọng số của mình theo kích thước của biến động thị trường, do đó làm tăng độ nhạy của đường cong. Cụ thể, khi thị trường biến động lớn hơn, đường cong của KAMA trở nên mịn hơn; khi thị trường biến động nhỏ hơn, đường cong của KAMA trở nên nhạy cảm hơn.

Chiến lược đầu tiên tính giá trị của KAMA. Sau đó, đánh giá tình trạng trống rỗng của đường KAMA: tạo ra tín hiệu mua khi giá đóng cửa vượt qua đường KAMA; tạo ra tín hiệu bán khi giá đóng cửa vượt qua đường KAMA.

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 để đánh giá xu hướng. Chỉ số KAMA tự nó có khả năng theo dõi xu hướng mạnh mẽ, nó có thể điều chỉnh các tham số một cách động để thích ứng với tình trạng thị trường, do đó tạo ra tín hiệu giao dịch đáng tin cậy hơn.

Ngoài ra, chiến lược này chỉ sử dụng trạng thái trống của KAMA để đánh giá hướng xu hướng. Không có điều kiện lọc bổ sung được thiết lập, điều này đơn giản hóa logic chiến lược, cũng làm cho ít tham số, giảm nguy cơ tối ưu hóa quá mức, có lợi cho sự ổn định tham số và khả năng thích ứng trên khắp 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 tự nó là chỉ số chậm trễ, xu hướng thị trường có thể đã bị đảo ngược khi tín hiệu giao dịch được tạo ra. Điều này dẫn đến rủi ro dừng lỗ. Ngoài ra, có thể có những biến độ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 rủi ro, bạn có thể xem xét kết hợp với các chỉ số khác để xác nhận tín hiệu giao dịch, chẳng hạn như chỉ số tỷ lệ biến động, chỉ số khối lượng giao dịch, v.v.

Hướng tối ưu hóa

Có rất nhiều cách để tối ưu hóa chiến lược này, bao gồm:

  1. Bộ lọc tín hiệu kết hợp với các chỉ số khác, như MACD, chỉ số rung, v.v., để cải thiện chất lượng tín hiệu

  2. Tăng chiến lược dừng lỗ, sử dụng dừng di chuyển hoặc dừng đường cong để kiểm soát tổn thất đơn

  3. Tối ưu hóa tham số để KAMA nắm bắt xu hướng hiệu quả hơn

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

  5. Sử dụng phương pháp học máy để tự động tối ưu hóa các tham số để phù hợp với các giống khác nhau

Tóm tắt

Chiến lược này có ý tưởng tổng thể rõ ràng, đánh giá hướng xu hướng thông qua chỉ số KAMA, có khả năng theo dõi xu hướng mạnh mẽ, logic đơn giản, ít tham số. Nhưng cũng có nguy cơ nhận ra xu hướng đảo ngược. Có thể tối ưu hóa chiến lược này bằng nhiều cách để hiệu quả của nó tốt hơn, khả năng thích ứng rộng hơn.

Mã nguồn chiến lược
/*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)))