Chiến lược giao dịch định lượng của Donchian dựa trên đột phá kênh giá


Ngày tạo: 2023-12-08 11:00:05 sửa đổi lần cuối: 2023-12-08 11:00:05
sao chép: 0 Số nhấp chuột: 655
1
tập trung vào
1621
Người theo dõi

Chiến lược giao dịch định lượng của Donchian dựa trên đột phá kênh giá

Tổng quan

Ý tưởng cốt lõi của chiến lược này là thực hiện giao dịch mua và bán dựa trên sự phá vỡ giá của kênh Dongxian, thuộc loại chiến lược định lượng theo dõi xu hướng. Nó có thể tự động xác định kênh giá, mở nhiều vị trí khi giá phá vỡ trên kênh và đóng cửa khi giá giảm trở lại gần hoặc dừng lỗ bên dưới kênh.

Nguyên tắc

Chiến lược này dựa trên chỉ số kênh Dongxian, kênh Dongxian là vùng kênh được vẽ bằng giá cao nhất và giá thấp nhất trong một chu kỳ nhất định. Cách tính toán là:

Đường đua = giá cao nhất trong gần n chu kỳ Đường đua dưới = giá thấp nhất trong gần n chu kỳ

Khi giá phá vỡ đường ray, nó được coi là vào xu hướng đa đầu, và khi giá rơi xuống đường ray, nó được coi là vào xu hướng không. Chiến lược này chỉ xem xét trường hợp phá vỡ đường ray.

Các giao dịch được thực hiện theo các logic sau:

  1. Sử dụng giá cao nhất n chu kỳ để vẽ đường Dongxiang lên đường ray
  2. Khi giá đóng cửa phá vỡ đường đua, hãy tham gia nhiều hơn
  3. Phương pháp dừng để giá tròn quay trở lại gần đường dẫn dưới hoặc đặt điểm dừng lỗ

Ưu điểm

Chiến lược này có những ưu điểm sau:

  1. Kế hoạch chiến lược rõ ràng, dễ hiểu và dễ thực hiện
  2. Các chỉ số đường Đông Dương đã thành công, dễ dàng đánh giá xu hướng
  3. Tự động nhận diện đường đi, không cần đánh giá con người
  4. Các tham số có thể cấu hình, có khả năng thích ứng
  5. Bao gồm các cơ chế dừng lỗ để hạn chế tổn thất

Rủi ro

Chiến lược này cũng có một số rủi ro:

  1. Có thể xảy ra hư hỏng không cần thiết ở đường Đông Dương
  2. Thiết lập vị trí dừng lỗ không đúng cách có thể mở rộng losses
  3. Cần lưu ý nguy cơ đảo ngược khi tiếp cận lối đi
  4. Cài đặt tham số không đúng (dài chu kỳ, v.v.) sẽ ảnh hưởng đến hiệu quả của chiến lược

Giải pháp tương ứng:

  1. Kết hợp các chỉ số khác để lọc phẳng giả phá vỡ
  2. Tối ưu hóa vị trí dừng lỗ, thoát ra trơn tru
  3. Cân nhắc tăng khối lượng giao dịch hoặc mở rộng phạm vi chặn gần kênh
  4. Kiểm tra các tham số khác nhau để tìm ra tham số tối ưu

Hướng tối ưu hóa

Chiến lược này cũng có thể được tối ưu hóa bằng cách:

  1. Thêm một số chỉ số khác để tránh sự phá vỡ bằng phẳng, chẳng hạn như MACD, KD, v.v.
  2. Tối ưu hóa các cơ chế dừng lỗ, chẳng hạn như dừng động theo biến động giá
  3. Kiểm soát tham gia tối ưu hóa, chẳng hạn như giao dịch chỉ khi biến động tăng lên
  4. Tối ưu hóa tham số, tìm kiếm sự kết hợp tham số tối ưu

Tóm tắt

Chiến lược này có ý tưởng tổng thể rõ ràng, dễ hiểu và thực hiện, sử dụng các chỉ số đường Đông Dương đã được kiểm định để tự động xác định xu hướng. Đồng thời, cấu hình linh hoạt hơn, có thể được điều chỉnh theo nhu cầu thực tế. Bằng cách dừng lỗ và tối ưu hóa tham số, hiệu quả tốt hơn có thể đạt được.

Mã nguồn chiến lược
/*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])