Chiến lược này được thiết kế dựa trên trung bình chuyển động thích nghi Kaufman (KAMA) để điều chỉnh động các vị trí giao dịch và theo dõi tự động xu hướng thị trường.
Thông qua việc áp dụng các chức năng này, chiến lược cố gắng thu được lợi nhuận bổ sung từ xu hướng trong khi kiểm soát rủi ro.
Chiến lược này hoạt động dựa trên chỉ số Đường trung bình động thích nghi Kaufman. KAMA tính toán tỷ lệ đà tăng giá và biến động để điều chỉnh động trọng lượng và độ mượt mà của đường trung bình động, cho phép nó phản ứng nhanh hơn với những thay đổi giá.
Khi KAMA vượt qua trên đường dừng lỗ giảm, nó chỉ ra sự đảo ngược xu hướng và kích hoạt tín hiệu mua. Khi KAMA vượt qua dưới đường dừng lỗ tăng, nó gợi ý sự đảo ngược xu hướng và kích hoạt tín hiệu bán. Sau khi nhập vào vị trí, chiến lược tính toán khoảng cách dừng lỗ động dựa trên ATR và thiết lập đường dừng lỗ thuận lợi. Khi KAMA di chuyển theo hướng thuận lợi, đường dừng lỗ cũng điều chỉnh phù hợp, di chuyển đến vị trí thuận lợi hơn để khóa nhiều lợi nhuận hơn.
Bằng cách này, chiến lược có thể theo dõi xu hướng, dần dần di chuyển đường dừng lỗ cho đến khi nó được kích hoạt hoặc một tín hiệu ngược được kích hoạt để đóng vị trí.
So với các chiến lược trung bình động truyền thống, chiến lược này có những lợi thế sau:
Nói chung, chiến lược là đáp ứng, có thể kiểm soát, và một hệ thống theo dõi xu hướng điển hình.
Chiến lược này cũng mang một số rủi ro:
Để quản lý những rủi ro này, có thể sử dụng các phương pháp như tối ưu hóa khoảng cách dừng lỗ và thiết lập tỷ lệ stoploss tối đa.
Các hướng có thể tối ưu hóa chiến lược bao gồm:
Ví dụ, MACD có thể được thêm vào như một chỉ số xác nhận phụ trợ, yêu cầu MACD Dif là dương tính và mở rộng cùng với thập giá vàng KAMA. Điều này có thể lọc ra một số tín hiệu giả và tránh các mục lặp lại không cần thiết.
Hoạt động tổng thể của chiến lược này là trơn tru. Bằng cách sử dụng một stop loss năng động để theo dõi xu hướng và tối đa hóa lợi nhuận xu hướng, cùng với khả năng thích nghi của chỉ số KAMA để nhanh chóng phản ứng với những thay đổi thị trường nhanh chóng, chiến lược này có thể trở thành một hệ thống theo dõi xu hướng hiệu quả sau khi tối ưu hóa một số, phù hợp với giao dịch trung và dài hạn.
/*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)