Tài nguyên đang được tải lên... tải...

Chiến lược theo dõi xu hướng kênh Donchian

Tác giả:ChaoZhang, Ngày: 2023-11-06 15:52:56
Tags:

img

Tổng quan

Chiến lược theo dõi xu hướng kênh Donchian là một chiến lược theo dõi xu hướng dựa trên chỉ số kênh Donchian.

Chiến lược logic

Chiến lược đầu tiên thiết lập phạm vi thời gian backtesting, và sau đó xác định các quy tắc nhập dài và ngắn.

Đối với các vị trí dài, mở dài khi giá vượt qua dải trên của kênh Donchian; đóng dài khi giá vượt qua dải dưới.

Đối với các vị trí ngắn, mở ngắn khi giá phá vỡ dưới dải dưới của kênh Donchian; đóng ngắn khi giá phá vỡ trên dải trên.

Chiến lược cũng kết hợp chỉ số ATR để thiết lập cơ chế thoát khỏi lỗ dừng. Giá trị ATR nhân với hệ số được sử dụng làm mức dừng lỗ.

Cụ thể, giá dừng lỗ dài là giá nhập trừ giá dừng lỗ ATR; giá dừng lỗ ngắn là giá nhập cộng với giá dừng lỗ ATR.

Chiến lược cũng vẽ các dải trên và dưới của kênh Donchian và đường dừng lỗ ATR để tạo thành một hệ thống giao dịch hoàn chỉnh.

Ưu điểm

  • Sử dụng kênh Donchian để xác định hướng xu hướng, với một số khả năng theo dõi xu hướng.

  • Các tham số thanh mượt kênh Donchian có thể điều chỉnh, cho phép tối ưu hóa tham số để tìm kết hợp tham số tốt nhất.

  • Cơ chế dừng lỗ với ATR có thể kiểm soát rủi ro hiệu quả.

  • Các quy tắc giao dịch dài và ngắn đơn giản và dễ hiểu, phù hợp cho người mới bắt đầu.

  • Cấu trúc mã là rõ ràng và dễ hiểu và sửa đổi.

Rủi ro

  • Kênh Donchian có thể có một số giao dịch whipsaw trong các biến động giá giới hạn trong phạm vi.

  • Cài đặt không đúng phạm vi mất mát dừng ATR có thể gây ra mất mát dừng quá rộng hoặc quá nhạy cảm.

  • Các vị trí dài và ngắn có thể quá tập trung, đòi hỏi các quy tắc kích thước vị trí.

  • Chiến lược cần phải được thử nghiệm về khả năng áp dụng trên các sản phẩm khác nhau, với tối ưu hóa tham số độc lập.

  • Chi phí giao dịch cũng cần phải được xem xét, các tham số có thể cần phải điều chỉnh trong môi trường chi phí cao.

Cơ hội gia tăng

  • Tối ưu hóa các thông số thời gian của kênh Donchian để tìm ra sự kết hợp thông số tốt nhất.

  • Hãy thử các hệ số ATR khác nhau để tìm phạm vi dừng lỗ tối ưu.

  • Hãy thử giới thiệu dừng lỗ sau cùng trên ATR để khóa lợi nhuận.

  • Điều chỉnh tỷ lệ vị thế dài/giơ dựa trên điều kiện thị trường.

  • Kiểm tra độ bền của tham số trên các sản phẩm khác nhau để tìm các tham số chung.

  • Nghiên cứu kết hợp MACD và các bộ lọc khác để cải thiện sự ổn định.

  • Kiểm tra tính thích nghi của tham số trong môi trường chi phí giao dịch khác nhau.

Tóm lại

Tóm lại, đây là một chiến lược theo dõi xu hướng tương đối đơn giản tập trung vào việc áp dụng kênh Donchian. Lợi thế nằm ở sự đơn giản và dễ hiểu của nó, làm cho nó phù hợp với mục đích học tập, nhưng các tham số và rủi ro vẫn cần tối ưu hóa hơn nữa. Với các kỹ thuật nâng cao đa dạng, sự ổn định và lợi nhuận của chiến lược có thể được cải thiện.


/*backtest
start: 2022-10-30 00:00:00
end: 2023-11-05 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © kriswaters

//@version=4
strategy("Donchian Channels Strategy by KrisWaters", overlay=true ) 

// Date filter
FromDay   = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
FromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
FromYear  = input(defval = 2017, title = "From Year", minval = 1900)
ToDay     = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
ToMonth   = input(defval = 1, title = "To Month", minval = 1, maxval = 12)
ToYear    = input(defval = 9999, title = "To Year", minval = 2017)

start     = timestamp(FromYear, FromMonth, FromDay, 00, 00)  // backtest start window
finish    = timestamp(ToYear, ToMonth, ToDay, 23, 59)        // backtest finish window
window()  => true // create function "within window of time"

// Strategy Settings
canEnterLong = input(true, title="Can Enter Long Position")
canEnterShort = input(false, title="Can Enter Short Position")

showLongChannel = input(true, title="Show Donchian Long Channels")
showShortChannel = input(false , title="Show Donchian Short Channels")

useAtrAsStopRule = input(false, title="Enable ATR Stop Rule") 

// DonCcian Channel Lengths
longUpperLength = input(20, minval=1)
longLowerLength = input(10, minval=1)

shortUpperLength = input(10, minval=1)
shortLowerLength = input(20, minval=1)

// Donchian indicator calculations
longUpperValue = highest(high,longUpperLength)
longLowerValue = lowest(low,longLowerLength)

shortUpperValue = highest(high,shortUpperLength)
shortLowerValue = lowest(low,shortLowerLength)

// Plot Donchian Channels
uLong = plot(showLongChannel ? longUpperValue : na, color=color.green, offset=1)
lLong = plot(showLongChannel ? longLowerValue : na, color=color.green, offset=1)

uShort = plot(showShortChannel ? shortUpperValue : na, color=color.red, offset=1)
lShort = plot(showShortChannel ? shortLowerValue : na, color=color.red, offset=1)

// Styling
fill(uLong,lLong, color=color.green, transp=95, title="Long Arkaplan")
fill(uShort,lShort, color=color.red, transp=95, title="Short Arkaplan")

// Stop-loss value calculations
atrMultiplier = 2.0
atrValue = atr(20)
longStopValue = open - (atrMultiplier*atrValue)
shortStopValue = open + (atrMultiplier*atrValue)

// Plot stop-loss line
plot(useAtrAsStopRule ? longStopValue : na, color=color.red, linewidth=2, offset=1)
plot(useAtrAsStopRule ? shortStopValue : na, color=color.red, linewidth=2, offset=1)

// Long and Short Position Rules
if canEnterLong and na(longUpperValue) != true and na(longLowerValue) != true and window()
    strategy.entry("Long", true, stop=longUpperValue)
    strategy.exit("Long Exit", "Long", stop=useAtrAsStopRule ? max(longLowerValue,longStopValue) : longLowerValue)
    
if canEnterShort and na(shortUpperValue) != true and na(shortLowerValue) != true and window()
    strategy.entry("Short", false, stop=shortLowerValue)
    strategy.exit("Short Exit", "Short", stop=useAtrAsStopRule ? min(shortUpperValue,shortStopValue) : shortUpperValue)
    


Thêm nữa