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


Ngày tạo: 2024-02-26 16:36:30 sửa đổi lần cuối: 2024-02-26 16:36:30
sao chép: 0 Số nhấp chuột: 666
1
tập trung vào
1617
Người theo dõi

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

Tổng quan

Chiến lược này dựa trên thiết kế KAMA của Kaufman, có thể điều chỉnh các vị trí giao dịch động, tự động theo dõi xu hướng thị trường. Các chức năng chính của chiến lược bao gồm:

  1. Tính năng tính toán thời gian giao dịch ((đơn vị điểm), tự điều chỉnh biến động thị trường
  2. Tạo tín hiệu mua và bán theo hướng KAMA
  3. Sau khi tín hiệu được tạo ra, thiết lập một khoảng cách dừng lỗ và điều chỉnh khi giá di chuyển
  4. Lựa chọn chờ tín hiệu xác nhận kết thúc K, lọc tín hiệu giả

Bằng cách sử dụng các tính năng này, chiến lược cố gắng thu được lợi nhuận bổ sung từ xu hướng, đồng thời kiểm soát rủi ro.

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

Chiến lược này dựa trên Kaufman thích ứng với các chỉ số trung bình di chuyển. KAMA, bằng cách tính toán tỷ lệ động lượng và biến động của giá, động điều chỉnh trọng lượng và độ mịn của trung bình, để phản ứng nhanh hơn với sự thay đổi giá.

Khi KAMA đi qua đường dừng xuống, nó biểu thị xu hướng đảo ngược, tạo ra tín hiệu mua; khi KAMA đi qua đường dừng xuống, nó biểu thị xu hướng đảo ngược, tạo ra tín hiệu bán. Sau khi vào vị trí, chiến lược sẽ tính toán khoảng cách dừng động dựa trên ATR và thiết lập đường dừng. Khi KAMA di chuyển theo hướng thuận lợi, đường dừng cũng sẽ điều chỉnh theo, di chuyển đường dừng đến vị trí thuận lợi hơn để khóa thêm lợi nhuận.

Bằng cách này, chiến lược có thể theo dõi xu hướng và di chuyển đường dừng dần dần cho đến khi đường dừng bị kích hoạt hoặc tín hiệu đảo ngược được kích hoạt và thanh toán.

Lợi thế chiến lược

Chiến lược này có những ưu điểm sau đây so với chiến lược trung bình di chuyển truyền thống:

  1. Chỉ số KAMA có độ nhạy cao, có thể nắm bắt xu hướng giá nhanh hơn;
  2. Động thái tính toán khoảng cách dừng lỗ, điều chỉnh theo xu hướng, có thể khóa lợi nhuận cao hơn;
  3. Có tùy chọn xác nhận khép kín K, có thể lọc tín hiệu giả, giảm bớt việc mở vị trí không cần thiết.

Nhìn chung, chiến lược này phản ứng nhanh, có thể kiểm soát được và là một chiến lược theo dõi xu hướng điển hình.

Rủi ro chiến lược

Chiến lược này cũng có một số rủi ro:

  1. Rủi ro đảo ngược xu hướng. Chỉ số KAMA có thể đáp ứng linh hoạt với biến động giá, nhưng có thể không đáp ứng kịp thời với sự đảo ngược xu hướng đột ngột.
  2. Stop Loss quá cấp tiến. Dynamic Stop Loss Distance có thể quá cấp tiến nếu được thiết lập quá lớn, khiến lợi nhuận không được khóa.
  3. Rủi ro của tín hiệu giả. Việc bật xác nhận kết thúc đường K có thể làm giảm tín hiệu giả, nhưng không thể loại bỏ hoàn toàn.

Những rủi ro này có thể được kiểm soát bằng cách tối ưu hóa khoảng cách dừng lỗ, thiết lập tỷ lệ dừng lỗ tối đa. Các chỉ số khác cũng có thể được kết hợp để xác nhận và tránh giao dịch sai.

Hướng tối ưu hóa chiến lược

Chiến lược này có thể được tối ưu hóa như sau:

  1. Tối ưu hóa tham số KAMA: điều chỉnh chiều dài đường trung bình, tối ưu hóa độ mịn;
  2. Tối ưu hóa dừng động: Xét nghiệm khoảng cách dừng tối ưu và bước dài theo đặc điểm của các giống khác nhau;
  3. Thêm các chỉ số lọc: kết hợp với các chỉ số xu hướng khác, xác nhận tín hiệu giao dịch, tăng độ tin cậy của tín hiệu.

Ví dụ, bạn có thể thử nghiệm thêm MACD như một chỉ số xác nhận phụ trợ, đồng thời yêu cầu MACDDif cũng là tích cực và mở rộng. Điều này có thể lọc ra một số tín hiệu giả và tránh mở vị trí lặp lại không cần thiết.

Tóm tắt

Chiến lược này hoạt động suôn sẻ, sử dụng các bước dừng động để theo dõi xu hướng và tối đa hóa lợi nhuận theo xu hướng. Tính thích ứng của chỉ số KAMA cũng cho phép chiến lược theo kịp sự thay đổi nhanh chóng của thị trường. Với một số tối ưu hóa, chiến lược có thể trở thành một chương trình theo dõi xu hướng hiệu quả, phù hợp với hoạt động đường dài trung bình.

Mã nguồn chiến lược
/*backtest
start: 2024-01-26 00:00:00
end: 2024-02-25 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("THMA - Bharath Vc Improved", overlay=true, process_orders_on_close=true)

// Function to calculate pips with higher precision
getPips(price) =>
    difc = syminfo.mintick
    hlpips = price / difc
    math.round(hlpips / syminfo.mintick) * syminfo.mintick

// Inputs
buyMess = input.string("Buy Message","Buy Alert Message")
sellMess = input.string("Sell Message","Sell Alert Message")
buyExitMessage = input.string("Buy Exit","Buy Exit Alert Message" )
sellExitMessage = input.string("Sell Exit","Sell Exit Alert Message" )

tmf = input.timeframe("", "Timeframe")
length = input(title='Length', defval=14)
fastLength = input(title='Fast EMA Length', defval=2)
slowLength = input(title='Slow EMA Length', defval=30)
src = input(title='Source', defval=close)
highlight = input(title='Highlight ?', defval=true)
awaitBarConfirmation = input(title='Await Bar Confirmation ?', defval=true)

// Function to calculate the TMA
gettma() =>
    mom = math.abs(ta.change(src, length))
    volatility = math.sum(math.abs(ta.change(src)), length)
    er = volatility != 0 ? mom / volatility : 0
    fastAlpha = 2 / (fastLength + 1)
    slowAlpha = 2 / (slowLength + 1)
    alpha = math.pow(er * (fastAlpha - slowAlpha) + slowAlpha, 2)
    kama = 0.0
    kama := alpha * src + (1 - alpha) * nz(kama[1], src)
    await = awaitBarConfirmation ? barstate.isconfirmed : true
    maColor = highlight ? kama > kama[1] and await ? color.green : color.red : color.new(color.purple, 0)
    thma = kama
    hma_dif = (thma - thma[2])/2
    colour = hma_dif > 0 ? color.green : color.red
    isGreen = hma_dif > 0
    [thma, isGreen, colour]

// Dynamic pip size based on ATR to adapt better to smaller timeframes
pips = ta.atr(14) * 0.1

// Main execution logic
var float psl = na
var int lastSignal = 0
var float lastPsl = na

[thma, isGreen, colour] = request.security(syminfo.tickerid, tmf, gettma(), gaps=barmerge.gaps_off, lookahead=barmerge.lookahead_off)

plot(thma, title='KAMA', linewidth=2, color=colour)

if ta.crossover(thma, psl) and strategy.position_size < 0
    strategy.exit("Sell Exit", stop=thma, alert_message=sellExitMessage)

if ta.crossunder(thma, psl) and strategy.position_size > 0
    strategy.exit("Buy Exit", stop=thma, alert_message=buyExitMessage)

if isGreen and strategy.position_size <= 0
    if na(psl)
        psl := close + getPips(pips)
    strategy.entry("Buy", strategy.long, alert_message=buyMess)
    lastSignal := 1

if not isGreen and strategy.position_size >= 0
    if na(psl)
        psl := close - getPips(pips)
    strategy.entry("Sell", strategy.short, alert_message=sellMess)
    lastSignal := -1

if (thma >= lastPsl or na(lastPsl)) and thma > psl
    psl := psl + getPips(pips)
    lastPsl := psl

if (thma <= lastPsl or na(lastPsl)) and thma < psl
    psl := psl - getPips(pips)
    lastPsl := psl

plot(psl, title="Position Stop Level", style=plot.style_stepline, color=color.blue)
plot(lastPsl, title="Last Position Stop Level", style=plot.style_cross, color=color.red)