Chiến lược thoát khỏi kênh Donchian

Tác giả:ChaoZhang, Ngày: 2024-01-29 11:51:08
Tags:

img

Tổng quan

Chiến lược đột phá kênh Donchian là một chiến lược theo xu hướng. Nó tạo thành một kênh giá bằng cách tính toán giá cao nhất và thấp nhất trong một khoảng thời gian nhất định và sử dụng ranh giới kênh như tín hiệu mua và bán. Nó sẽ ngắn khi giá vượt qua đường ray trên và dài khi giá vượt qua đường ray dưới. Chiến lược này phù hợp với giao dịch tiền điện tử biến động cao.

Chiến lược logic

Chiến lược này sử dụng chỉ số kênh Donchian để xác định xu hướng giá và tính điểm vào và ra. kênh Donchian bao gồm đường ray trên, đường ray dưới và đường ray giữa. đường ray trên là giá cao nhất trong một khoảng thời gian nhất định, đường ray dưới là giá thấp nhất và đường ray giữa là giá trung bình.

Điểm ra là khi giá chạm vào đường ray tương ứng một lần nữa. Đường ray giữa cũng có thể được sử dụng như một đường dừng lỗ.

Ngoài ra, chiến lược cũng thiết lập một điểm lấy lợi nhuận. Giá lấy lợi nhuận cho các vị trí dài là giá đầu vào nhân với (1 + tỷ lệ phần trăm lấy lợi nhuận), và ngược lại cho các vị trí ngắn. Việc cho phép tính năng này khóa lợi nhuận và ngăn chặn lỗ mở rộng.

Tóm lại, trong khi đánh giá xu hướng, chiến lược này đảm bảo đủ không gian để thiết lập dừng và lấy lợi nhuận. Điều này làm cho nó đặc biệt phù hợp với các tài sản biến động cao như tiền điện tử.

Phân tích lợi thế

Những lợi thế của chiến lược này bao gồm:

  1. Logic tín hiệu rõ ràng và tạo tín hiệu đơn giản / đáng tin cậy.
  2. Chỉ số kênh Donchian không nhạy cảm với biến động giá, giúp nắm bắt xu hướng.
  3. Các tham số kênh có thể tùy chỉnh để phù hợp với các tài sản và khung thời gian khác nhau.
  4. Các chức năng dừng lỗ / lấy lợi nhuận tích hợp có hiệu quả kiểm soát rủi ro.
  5. Khả năng lợi nhuận cao cho các tài sản biến động như tiền điện tử.

Phân tích rủi ro

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

  1. Không thể tránh hoàn toàn rủi ro từ biến động giá khổng lồ mặc dù dừng lỗ.
  2. Cài đặt tham số không chính xác có thể dẫn đến giao dịch quá mức, tăng chi phí.
  3. Không nhạy cảm với biến động giá cả, có thể bỏ lỡ một số cơ hội giao dịch.

Để giảm thiểu các rủi ro trên:

  1. Đánh giá các vị trí một cách phù hợp và đa dạng hóa giữa các tài sản để kiểm soát rủi ro tổng thể.
  2. Tối ưu hóa các tham số để tìm ra sự kết hợp tốt nhất, có thể sử dụng máy học.
  3. Bao gồm các chỉ số bổ sung để xác định độ tin cậy của tín hiệu.

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

Chiến lược này có thể được tối ưu hóa thêm trong các khía cạnh sau:

  1. Kiểm tra và tối ưu hóa nhiều kết hợp tham số hơn để tìm ra các giá trị tối ưu. Các tham số chính bao gồm thời gian kênh, tỷ lệ lợi nhuận, cho phép dài / ngắn vv
  2. Kết hợp các mô hình học máy để tự động xác định các thông số tối ưu, ví dụ như sử dụng học tăng cường.
  3. Kết hợp các chỉ số khác như trung bình động và khối lượng để xác định xu hướng và độ tin cậy tín hiệu.
  4. Phát triển các chiến lược dừng lỗ tiên tiến hơn, ví dụ như dừng lỗ sau, Chandelier Exit vv để kiểm soát tốt hơn rủi ro.
  5. Mở rộng chiến lược trên nhiều loại tài sản hơn để tìm phù hợp nhất.

Kết luận

Tóm lại, chiến lược đột phá kênh Donchian cung cấp các tín hiệu rõ ràng và rủi ro có thể kiểm soát được cho giao dịch xu hướng. Nó đặc biệt phù hợp với các tài sản biến động như tiền điện tử với tiềm năng lợi nhuận lớn. Ngoài ra còn có khả năng tối ưu hóa thêm các tham số và kết hợp các chỉ số khác, đây là những con đường để cải thiện trong tương lai. Với những đổi mới liên tục, chiến lược này có tiềm năng trở thành một chiến lược giao dịch thuật toán quan trọng cho tiền điện tử.


/*backtest
start: 2023-12-01 00:00:00
end: 2023-12-31 23:59:59
period: 4h
basePeriod: 15m
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/
// © algotradingcc
// Strategy testing and optimisation for free trading bot 

//@version=4
strategy("Donchian Channel Strategy [for free bot]", overlay=true )

//Long optopns
buyPeriodEnter = input(10, "Channel Period for Long enter position")
buyPeriodExit = input(10, "Channel Period for Long exit position")
isMiddleBuy = input(true, "Is exit on Base Line? If 'no' - exit on bottom line")
takeProfitBuy = input(2.5, "Take Profit (%) for Long position")
isBuy = input(true, "Allow Long?")

//Short Options
sellPeriodEnter = input(20, "Channel Period for Short enter position")
sellPeriodExit = input(20, "Channel Period for Short exit position")
isMiddleSell = input(true, "Is exit on Base Line? If 'no' - exit on upper line")
takeProfitSell = input(2.5, "Take Profit (%) for Short position")
isSell = input(true, "Allow Short?")

// Test Start
startYear = input(2005, "Test Start Year")
startMonth = input(1, "Test Start Month")
startDay = input(1, "Test Start Day")
startTest = timestamp(startYear,startMonth,startDay,0,0)

//Test End
endYear = input(2050, "Test End Year")
endMonth = input(12, "Test End Month")
endDay = input(30, "Test End Day")
endTest = timestamp(endYear,endMonth,endDay,23,59)

timeRange = time > startTest and time < endTest ? true : false

// Long&Short Levels
BuyEnter = highest(buyPeriodEnter)
BuyExit = isMiddleBuy ? ((highest(buyPeriodExit) + lowest(buyPeriodExit)) / 2): lowest(buyPeriodExit)

SellEnter = lowest(sellPeriodEnter)
SellExit = isMiddleSell ? ((highest(sellPeriodExit) + lowest(sellPeriodExit)) / 2): highest(sellPeriodExit)

// Plot Data
plot(BuyEnter, style=plot.style_line, linewidth=2, color=color.blue, title="Buy Enter")
plot(BuyExit, style=plot.style_line, linewidth=1, color=color.blue, title="Buy Exit", transp=50)
plot(SellEnter, style=plot.style_line, linewidth=2, color=color.red, title="Sell Enter")
plot(SellExit, style=plot.style_line, linewidth=1, color=color.red, title="Sell Exit", transp=50)

// Calc Take Profits
TakeProfitBuy = 0.0
TakeProfitSell = 0.0
if strategy.position_size > 0
    TakeProfitBuy := strategy.position_avg_price*(1 + takeProfitBuy/100)
    
if strategy.position_size < 0
    TakeProfitSell := strategy.position_avg_price*(1 - takeProfitSell/100)

// Long Position    
if isBuy and timeRange
    strategy.entry("Long", strategy.long, stop = BuyEnter, when = strategy.position_size == 0) 
    
strategy.exit("Long Exit", "Long", stop=BuyExit, limit = TakeProfitBuy, when = strategy.position_size > 0)

// Short Position
if isSell and timeRange
    strategy.entry("Short", strategy.short, stop = SellEnter, when = strategy.position_size == 0) 
    
strategy.exit("Short Exit", "Short", stop=SellExit, limit = TakeProfitSell, when = strategy.position_size < 0)

// Close & Cancel when over End of the Test
if time > endTest
    strategy.close_all()
    strategy.cancel_all()


Thêm nữa