Kênh Donchian với chiến lược dừng lỗ

Tác giả:ChaoZhang, Ngày: 2023-12-07 16:53:10
Tags:

img

Tổng quan

Đây là một chiến lược theo xu hướng dựa trên chỉ số kênh Donchian, kết hợp với dừng lỗ năng động dựa trên chỉ số ATR để khóa lợi nhuận.

Chiến lược logic

Chiến lược này sử dụng kênh Donchian 20 giai đoạn, trong đó đường giữa kênh là mức trung bình của mức cao nhất và thấp nhất. Nó đi dài khi giá vượt qua trên đường trung tâm kênh và đi ngắn khi giá vượt qua dưới đường trung. Quy tắc thoát là khi giá chạm vào đường dừng lỗ động, được tính là mức thấp nhất trong 3 thanh gần đây trừ một phần ba giá trị ATR cho các vị trí dài, và cao nhất trong 3 thanh gần đây cộng với một phần ba giá trị ATR cho các vị trí ngắn.

Phân tích lợi thế

Những lợi thế chính của chiến lược này là:

  1. Kênh Donchian có hiệu quả trong việc xác định hướng xu hướng thị trường và nắm bắt xu hướng.
  2. Các lệnh dừng lỗ động dựa trên ATR khóa lợi nhuận trong khi kiểm soát rủi ro.
  3. Việc kết hợp yếu tố ATR vào tính toán dừng lỗ sẽ xem xét sự biến động của thị trường, làm cho việc dừng hợp lý hơn.
  4. Phương pháp tính toán stop loss là ổn định và đáng tin cậy, tránh các điểm dừng quá gần và bị dừng sớm.

Phân tích rủi ro

Những rủi ro chính của chiến lược này bao gồm:

  1. Kênh Donchian có một số hiệu ứng chậm lại, có thể bỏ lỡ các cơ hội ngắn hạn.
  2. Cài đặt tham số ATR không chính xác có thể dẫn đến việc dừng lỗ quá rộng hoặc quá gần.
  3. Cơ chế xác định xu hướng tương đối đơn giản, có thể tạo ra nhiều tín hiệu sai hơn trong quá trình củng cố thị trường.
  4. Thiếu đánh giá hỗ trợ/kháng cự hiệu quả, dẫn đến thời gian nhập thị trường không phù hợp.

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

Một số hướng tối ưu hóa cho chiến lược này:

  1. Thêm các chỉ số khác để tránh giao dịch thường xuyên khi không có xu hướng rõ ràng.
  2. Thêm phán đoán hỗ trợ / kháng cự để tối ưu hóa thời gian nhập cảnh.
  3. Kiểm tra các phương pháp tính toán dừng lỗ động khác để tối ưu hóa thêm chiến lược dừng lỗ.
  4. Kiểm tra tác động của các thông số giai đoạn kênh Donchian khác nhau đối với hiệu suất chiến lược.
  5. Thêm bộ lọc vào âm lượng hoặc tăng để giảm tín hiệu sai.

Kết luận

Tóm lại, đây là một chiến lược theo xu hướng đơn giản và thực tế. Nó xác định hướng xu hướng thông qua kênh Donchian và khóa lợi nhuận với lệnh dừng lỗ theo sau động, có thể theo dõi xu hướng hiệu quả. Chiến lược khá thực tế để sử dụng, nhưng có thể được tối ưu hóa thêm theo nhiều cách khác nhau để có hiệu suất tốt hơn trong môi trường thị trường phức tạp hơn.


/*backtest
start: 2023-11-29 00:00:00
end: 2023-12-06 00:00:00
period: 30m
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy(title = "dc",  overlay = true)
atrLength = input(title="ATR Length:", defval=20, minval=1)

testStartYear = input(2017, "Backtest Start Year")
testStartMonth = input(1, "Backtest Start Month")
testStartDay = input(1, "Backtest Start Day")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,0,0)

testEndYear = input(2018, "Backtest Start Year")
testEndMonth = input(12)
testEndDay = input(31, "Backtest Start Day")
testPeriodEnd = timestamp(testEndYear,testEndMonth,testEndDay,0,0)


testPeriod() =>
    true
    //time >= testPeriodStart  ? true : false

dcPeriod = input(20, "Period")

dcUpper = highest(close, dcPeriod)[1]
dcLower = lowest(close, dcPeriod)[1]
dcAverage = (dcUpper + dcLower) / 2
atrValue=atr(atrLength)


useTakeProfit   = na
useStopLoss     = na
useTrailStop    = na
useTrailOffset  = na
//@version=1
Buy_stop = lowest(low[1],3) - atr(20)[1] / 3
plot(Buy_stop, color=red, title="buy_stoploss")
Sell_stop = highest(high[1],3) + atr(20)[1] / 3
plot(Sell_stop, color=green, title="sell_stoploss")

plot(dcLower, style=line, linewidth=3, color=red, offset=1)
plot(dcUpper, style=line, linewidth=3, color=aqua, offset=1)

plot(dcAverage, color=black, style=line, linewidth=3, title="Mid-Line Average")

strategy.entry("simpleBuy", strategy.long, when=(close > dcAverage) and cross(close,dcAverage))
strategy.close("simpleBuy",when= ( close< Buy_stop))
    
strategy.entry("simpleSell", strategy.short,when=(close < dcAverage) and cross(close,dcAverage) )
strategy.close("simpleSell",when=( close > Sell_stop))
    
//strategy.exit("Exit simpleBuy", from_entry = "simpleBuy", profit = useTakeProfit, loss = useStopLoss, trail_points = useTrailStop, trail_offset = useTrailOffset)
//strategy.exit("Exit simpleSell", from_entry = "simpleSell", profit = useTakeProfit, loss = useStopLoss, trail_points = useTrailStop, trail_offset = useTrailOffset)



Thêm nữa