Donchian Channel Breakout Chiến lược giao dịch định lượng

Tác giả:ChaoZhang, Ngày: 2023-12-08 11:00:05
Tags:

img

Tổng quan

Ý tưởng cốt lõi của chiến lược này là đưa ra quyết định giao dịch dựa trên sự đột phá giá của các kênh Donchian. Nó thuộc về xu hướng sau loại chiến lược định lượng. Nó có thể tự động xác định các kênh giá. Khi giá vượt qua đường ray trên của kênh, các vị trí dài sẽ được mở. Khi giá giảm trở lại gần đường ray dưới của kênh hoặc điểm dừng lỗ, các vị trí sẽ được đóng. Chiến lược này nhằm mục đích nắm bắt xu hướng giá trung hạn đến dài hạn và phù hợp với giao dịch thuật toán của các công cụ phái sinh tài chính như tương lai chỉ số.

Nguyên tắc

Chiến lược này dựa trên chỉ số kênh Donchian. Các kênh Donchian là các kênh được rút ra bởi giá cao nhất và thấp nhất trong một khoảng thời gian nhất định. Phương pháp tính toán của nó là:

Upper Rail = Giá cao nhất trong n kỳ cuối cùng Lower Rail = Giá thấp nhất trong n giai đoạn cuối cùng

Khi giá vượt qua đường ray trên, nó được coi là một xu hướng dài đã bắt đầu. Khi giá vượt qua đường ray dưới, nó được coi là một xu hướng ngắn đã bắt đầu. Chiến lược này chỉ xem xét các trường hợp khi đường ray trên bị phá vỡ.

Logic giao dịch cụ thể là:

  1. Chụp đường ray trên của kênh Donchian bằng cách sử dụng giá cao nhất trong n giai đoạn gần đây
  2. Khi giá đóng cửa phá vỡ đường sắt trên, đi dài
  3. Lấy lợi nhuận bằng cách dừng lại khi giá đóng lại giảm trở lại gần đường sắt thấp hơn hoặc đến điểm dừng lỗ được đặt trước

Ưu điểm

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

  1. Ý tưởng chiến lược là rõ ràng và dễ hiểu và thực hiện
  2. Các kênh Donchian là một chỉ số trưởng thành và đáng tin cậy để đánh giá hướng xu hướng
  3. Nó tự động xác định các kênh mà không cần can thiệp bằng tay
  4. Các thông số tùy chỉnh làm cho nó rất thích nghi
  5. Nó chứa các cơ chế dừng lỗ để hạn chế lỗ

Rủi ro

Ngoài ra còn có một số rủi ro:

  1. Các kênh Donchian có thể có những vụ phá vỡ giả, gây ra những tổn thất không cần thiết.
  2. Vị trí dừng lỗ không chính xác có thể làm tăng lỗ
  3. Chú ý đến rủi ro đảo ngược khi giá gần đường ray kênh
  4. Các thiết lập tham số không đầy đủ có thể ảnh hưởng tiêu cực đến hiệu suất chiến lược

Giải pháp:

  1. Thêm các bộ lọc bằng cách kết hợp các chỉ số khác để tránh đột phá sai
  2. Tối ưu hóa vị trí dừng lỗ cho lối ra mượt mà
  3. Xem xét tăng kích thước vị trí hoặc mở rộng phạm vi lợi nhuận khi giá gần đường ray kênh
  4. Kiểm tra các thông số khác nhau để tìm ra các giá trị tối ưu

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

Chiến lược này có thể được tối ưu hóa hơn nữa trong các lĩnh vực sau:

  1. Thêm các chỉ số khác như MACD, KD để tránh đột phá sai
  2. Tối ưu hóa các cơ chế dừng lỗ, ví dụ như di chuyển dừng lỗ
  3. Tối ưu hóa kiểm soát tỷ lệ tham gia, ví dụ: chỉ giao dịch khi biến động tăng
  4. Tối ưu hóa tham số để tìm kết hợp tối ưu

Tóm lại

Ý tưởng tổng thể của chiến lược này là rõ ràng và dễ hiểu và thực hiện. Nó sử dụng các kênh Donchian trưởng thành để tự động xác định hướng xu hướng. Cấu hình cũng rất linh hoạt để phục vụ cho các nhu cầu khác nhau. Với việc dừng lỗ và tối ưu hóa tham số thích hợp, kết quả tốt có thể đạt được. Tóm lại, chiến lược này có đường cong học tập thấp nhưng hiệu quả hợp lý. Nó phù hợp như một chiến lược giao dịch định lượng bắt đầu.


/*backtest
start: 2022-12-07 00:00:00
end: 2023-12-07 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/
// © Giovanni_Trombetta

// Strategy to capture price channel breakouts

//@version=4
strategy("ChannelsBreakout", max_bars_back=50, overlay=true)

instrument = input(1, title = "Select 1: Stock/Forex, 2: Future")
money = input(10000, title = "Money for each trade")
backtest_start = input(2000, "Insert first year to backtest")
period = input(50, title = "Period in bars of Donchian Channel")
monetary_stoploss = input(1000, title = "Monetary Stop Loss")

quantity = if instrument != 1 
    1
else
    int(money / close)
    
upBarrier = highest(high,period)
downBarrier = lowest(low,period)
up = highest(high,period / 4)
down = lowest(low,period / 4)

plot(upBarrier, color=color.green, linewidth=2)
plot(downBarrier, color=color.red, linewidth=2)
plot(up, color=color.lime, linewidth=1)
plot(down, color=color.orange, linewidth=2)

longCondition = crossover(close, upBarrier[1]) and year >= backtest_start

if (longCondition)
    strategy.entry("Long", strategy.long, quantity, when = strategy.position_size == 0)

closeCondition = crossunder(close, down[1]) or down < down[1]

if (closeCondition)
    strategy.close("Long", comment = "Trailing")
    
stop_level = strategy.position_avg_price - monetary_stoploss / strategy.position_size
strategy.exit("StopLoss", from_entry = "Long", stop = stop_level)
plot(stop_level, color=color.yellow, linewidth=2)

// l = label.new(bar_index, na,
//   text="PineScript Code", color= color.lime, textcolor = color.white,
//   style=label.style_labelup, yloc=yloc.belowbar, size=size.normal)
// label.delete(l[1])

Thêm nữa