Chiến lược phá vỡ kênh Donchian kép

Tác giả:ChaoZhang, Ngày: 2024-02-21 11:38:48
Tags:

img

Tổng quan

Chiến lược phá vỡ kênh Donchian kép là một chiến lược giao dịch phá vỡ dựa trên các kênh Donchian. Nó sử dụng các kênh Donchian nhanh và chậm để xây dựng các tín hiệu giao dịch dài và ngắn. Khi giá vượt qua kênh chậm, mở các vị trí dài hoặc ngắn. Khi giá vượt qua kênh nhanh, đóng các vị trí. Chiến lược cũng thiết lập các điều kiện lấy lợi nhuận và dừng lỗ.

Nguyên tắc chiến lược

Chiến lược phá vỡ kênh Donchian đôi dựa trên hai thông số:Thời kỳ kênh Donchian chậmThời kỳ kênh Donchian nhanhChiến lược đầu tiên tính toán các dải trên và dưới của hai kênh Donchian.

  • Thời gian kênh Donchian chậm mặc định là 50 thanh, phản ánh xu hướng dài hạn.
  • Thời gian kênh Donchian nhanh mặc định là 30 thanh, phản ánh những thay đổi xu hướng ngắn hạn.

Tín hiệu đầu vào dài làđột quỵ trên dải trênvớisự biến động lớn hơn ngưỡng. Tín hiệu đầu vào ngắn là mộtPhân loại dưới dải dướivớisự biến động lớn hơn ngưỡng.

Tín hiệu dừng mất mát dài làPhân loại dưới dải dưới. Tín hiệu dừng lỗ ngắn là mộtđột quỵ trên dải trên.

Chiến lược cũng đặt rathu lợi nhuậnCác điều kiện thoát. tỷ lệ mất lợi nhuận mặc định là 2%, tức là mất lợi nhuận một nửa vị trí khi biến động giá đạt 2%.

Phân tích lợi thế

Chiến lược Breakout kênh Donchian kép có những lợi thế sau:

  1. Thiết kế kênh kép có thể chụp tín hiệu xu hướng từ cả khung thời gian dài và ngắn hơn, cho phép nhập chính xác hơn.

  2. Điều kiện biến động tránh giao dịch thường xuyên trên các thị trường giới hạn phạm vi.

  3. Các thiết lập lợi nhuận toàn diện và dừng lỗ khóa lợi nhuận một phần và giảm lỗ.

  4. Đơn giản và rõ ràng chiến lược logic, dễ hiểu và thực hiện.

  5. Các tham số có thể tùy chỉnh phù hợp với các sản phẩm và ưu tiên thương mại khác nhau.

Phân tích rủi ro

Chiến lược phá vỡ kênh Donchian đôi cũng có một số rủi ro:

  1. Thiết kế kênh kép nhạy cảm và có thể tạo ra tín hiệu sai. Các kênh rộng hơn hoặc các tham số biến động được điều chỉnh có thể làm giảm tín hiệu sai.

  2. Trong các thị trường biến động, dừng lỗ có thể được kích hoạt quá thường xuyên.

  3. Tỷ lệ lợi nhuận cố định không tối đa hóa lợi nhuận. Xem xét can thiệp động hoặc thủ công để định giá lợi nhuận tối ưu.

  4. Hiệu suất giao dịch thực tế có thể khác với kỳ vọng backtest.

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

Chiến lược Breakout kênh Donchian kép có thể được tối ưu hóa trong một số khía cạnh:

  1. Kiểm tra nhiều kết hợp thời gian hơn để tìm các thông số tối ưu.

  2. Hãy thử các thước đo biến động khác nhau như ATR để tìm các thước đo ổn định nhất.

  3. Đặt giới hạn số lượng mục nhập để tránh tổn thất vào cuối xu hướng.

  4. Cố gắng động lấy lợi nhuận cho lợi nhuận giao dịch đơn cao hơn.

  5. Tích hợp các chỉ số khác để lọc các mục và cải thiện độ chính xác, ví dụ: khối lượng.

  6. Tối ưu hóa các mô hình quản lý tiền tệ như định dạng vị trí phân số cố định để kiểm soát rủi ro tốt hơn.

Kết luận

Tóm lại, Chiến lược Breakout kênh Donchian kép là một chiến lược theo xu hướng tuyệt vời. Nó kết hợp cả khả năng xác định xu hướng và bảo vệ đảo ngược. Với tối ưu hóa tham số và tinh chỉnh quy tắc, nó có thể có lợi cho hầu hết các sản phẩm và điều kiện thị trường. Chiến lược đơn giản và thực tế, đáng để học và áp dụng cho các nhà giao dịch định lượng.


/*backtest
start: 2024-01-01 00:00:00
end: 2024-01-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © omererkan

//@version=5
strategy(title="Double Donchian Channel Breakout", overlay=true, initial_capital = 1000, commission_value = 0.05, default_qty_value = 100, default_qty_type = strategy.percent_of_equity)

// Donchian Channels
slowLen = input.int(50, title="Slow Donchian", group = "Conditions")
fastLen = input.int(30, title="Fast Donchian", group = "Conditions")

// Volatility Calculated as a percentage
volatility = input.int(3, title="Volatility (%)", group = "Conditions")

// Long positions
long = input.bool(true, "Long Position On/Off", group = "Strategy")
longProfitPerc = input.float(2, title="Long TP1 (%)", group = "Strategy", minval=0.0, step=0.1) * 0.01

// Short positions
short = input.bool(true, "Short Position On/Off", group = "Strategy")
shortProfitPerc = input.float(2, title="Short TP1 (%)", group = "Strategy", minval=0.0, step=0.1) * 0.01

// First take profit point for positions
TP1Yuzde =input.int(50, title = "TP1 Position Amount (%)", group = "Strategy")

// Slow Donchian Calculated
ubSlow = ta.highest(high, slowLen)[1]
lbSlow = ta.lowest(low, slowLen)[1]

// Fast Donchian Calculated
ubFast = ta.highest(high, fastLen)[1]
lbFast = ta.lowest(low, fastLen)[1]

// Plot Donchian Channel for entries
plot(ubSlow, color=color.green, linewidth=2, title="Slow DoCh - Upperband")
plot(lbSlow, color=color.green, linewidth=2, title="Slow DoCh - Lowerband")
plot(ubFast, color=color.blue, linewidth=2, title="Fast DoCh - Upperband")
plot(lbFast, color=color.blue, linewidth=2, title="Fast DoCh - Lowerband")

// This calculation, the strategy does not open position in the horizontal market.
fark = (ubSlow - lbSlow) / lbSlow * 100

// Take profit levels
longExitPrice  = strategy.position_avg_price * (1 + longProfitPerc)
shortExitPrice = strategy.position_avg_price * (1 - shortProfitPerc)

// Code long trading conditions
longCondition = ta.crossover(close, ubSlow) and fark > volatility
if longCondition and long == true
    strategy.entry("Long", strategy.long)

// Code short trading conditions
shortCondition = ta.crossunder(close, lbSlow) and fark > volatility
if shortCondition and short == true
    strategy.entry("Short", strategy.short)

// Determine long trading conditions
if strategy.position_size > 0 and ta.crossunder(close, lbFast) 
    strategy.close_all("Close All")

// Determine short trading conditions
if strategy.position_size < 0 and ta.crossover(close, ubFast)
    strategy.close_all("Close All")

// Take Profit Long
if strategy.position_size > 0
    strategy.exit("TP1", "Long", qty_percent = TP1Yuzde, limit = longExitPrice)

// Take Profit Short
if strategy.position_size < 0
    strategy.exit("TP1", "Short", qty_percent = TP1Yuzde, limit = shortExitPrice)

Thêm nữa