Tài nguyên đang được tải lên... tải...

Đường Donchian động và sự kết hợp của trung bình di chuyển đơn giản Chiến lược định lượng

Tác giả:ChaoZhang, Ngày: 2024-06-17 17:29:48
Tags:SMA

img

Tổng quan

Chiến lược này kết hợp hai chỉ số kỹ thuật: Kênh Donchian và Trung bình di chuyển đơn giản (SMA). Nó mở một vị trí dài khi giá phá vỡ dưới dải dưới của Kênh Donchian và đóng trên SMA. Ngược lại, nó mở một vị trí ngắn khi giá phá vỡ trên dải trên của Kênh Donchian và đóng dưới SMA.

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

  1. Tính toán các dải trên và dưới của kênh Donchian. Dải trên là mức cao nhất trong n giai đoạn qua, và dải dưới là mức thấp nhất trong n giai đoạn qua.
  2. Tính toán Đường trung bình di chuyển đơn giản. SMA là trung bình số học của giá đóng trong m thời gian qua.
  3. Nhập dài: Mở một vị trí dài khi giá dưới dải dưới của kênh Donchian và giá đóng là trên SMA.
  4. Nhập ngắn: Mở một vị trí ngắn khi giá nằm trên dải trên của kênh Donchian và giá đóng dưới SMA.
  5. Ra khỏi dài: Đóng vị trí dài khi giá đạt đến dải trên của kênh Donchian.
  6. Khóa ngắn: Đóng vị trí ngắn khi giá đạt đến dải dưới của kênh Donchian.

Ưu điểm chiến lược

  1. Kết hợp hai yếu tố thị trường: xu hướng và biến động. SMA nắm bắt xu hướng, trong khi kênh Donchian nắm bắt sự biến động, cho phép chiến lược nắm bắt các cơ hội rút lui trong các thị trường xu hướng.
  2. Điều kiện thu lợi nhuận rõ ràng giúp khóa lợi nhuận kịp thời. Các vị trí dài và ngắn được đóng khi giá đạt đến dải trên và dưới của kênh Donchian, tương ứng, cho phép chiến lược thoát khỏi các giao dịch có lợi nhuận trước khi xu hướng đảo ngược.
  3. Chỉ có một vài thông số giúp tối ưu hóa dễ dàng hơn. Chiến lược chỉ có ba thông số: Thời gian kênh Donchian, trượt và thời gian SMA, đơn giản hóa tối ưu hóa.

Rủi ro chiến lược

  1. Giao dịch thường xuyên. Chiến lược này có tần suất nhập và thoát vị cao, có thể làm xói mòn lợi nhuận trong các thị trường có chi phí giao dịch cao. Điều này có thể được giảm thiểu bằng cách nới lỏng điều kiện nhập cảnh hoặc tăng khung thời gian.
  2. Hiệu suất kém trong thị trường giới hạn phạm vi. Chiến lược có thể chịu nhiều tổn thất hơn khi xu hướng không rõ ràng. Các chỉ số biến động có thể được sử dụng để xác định thị trường giới hạn phạm vi và đình chỉ chiến lược.
  3. Sự ổn định tham số không đủ. Các tham số tối ưu có thể khác nhau đáng kể giữa các thiết bị và khung thời gian khác nhau, cho thấy sự ổn định tham số kém. Hiệu suất trực tiếp có thể không phù hợp với backtest. Kiểm tra ngoài mẫu và phân tích độ nhạy rộng rãi là cần thiết để xác nhận độ bền của tham số.

Hướng dẫn tối ưu hóa chiến lược

  1. Thêm các điều kiện nhập khẩu tùy chọn kết hợp với các chỉ số khác. Ví dụ, yêu cầu ADX của DMI ở trên một ngưỡng nhất định để nhập khẩu, hoặc chỉ nhập dài khi RSI rời khỏi vùng bán quá mức. Điều này có thể cải thiện tỷ lệ thắng của các mục nhập.
  2. Sử dụng các đường lấy lợi nhuận động thay vì các đường kênh Donchian cố định để đạt được chức năng kéo theo lợi nhuận. Ví dụ, sau khi giá đạt đến dải trên của kênh Donchian cho một vị trí dài, chuyển sang đóng vị trí tại đường dừng lỗ ATR hoặc đường dừng lỗ SAR.
  3. Điều chỉnh động thời gian kênh Donchian dựa trên mức độ biến động. Giảm thời gian kênh Donchian trong điều kiện thị trường biến động cao và kéo dài thời gian trong điều kiện biến động thấp. Điều này giúp thích nghi với các thị trường khác nhau.

Tóm lại

Chiến lược kết hợp kênh Donchian năng động và trung bình động đơn giản là một khuôn khổ chiến lược giao dịch định lượng đơn giản và dễ sử dụng. Nó xây dựng logic vào và ra từ quan điểm theo xu hướng và đột phá biến động, làm cho nó phù hợp với các công cụ có xu hướng mạnh. Tuy nhiên, chiến lược hoạt động kém trong các thị trường thường xuyên giới hạn phạm vi, và độ bền tham số của nó là tầm trung. Khả năng thích nghi và độ bền của chiến lược có thể được cải thiện bằng cách giới thiệu các điều kiện nhập cảnh phụ trợ, thu lợi nhuận năng động và cơ chế tự điều chỉnh tham số. Nhìn chung, chiến lược này có thể phục vụ như một chiến lược khung cơ bản để được sửa đổi và cải thiện hơn nữa để tạo ra các chiến lược định lượng tiên tiến hơn.


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

//@version=5
strategy("FBK Donchian Channel Strategy", overlay=true)

// Inputs
donchian_period = input.int(20, title="Donchian Channel Period")
donchian_offset = input.int(1, title="Donchian Channel Offset")
sma_period = input.int(200, title="SMA Period")
start_date = input(timestamp("2023-01-01 00:00 +0000"), title="Start Date")
end_date = input(timestamp("2023-12-31 23:59 +0000"), title="End Date")
trade_type = input.string("Both", title="Trade Type", options=["Buy Only", "Sell Only", "Both"])

// Calculate indicators
donchian_upper = ta.highest(high, donchian_period)[donchian_offset]
donchian_lower = ta.lowest(low, donchian_period)[donchian_offset]
sma = ta.sma(close, sma_period)

// Plot indicators
plot(donchian_upper, color=color.red, title="Donchian Upper")
plot(donchian_lower, color=color.green, title="Donchian Lower")
plot(sma, color=color.blue, title="SMA")

// Helper function to check if within testing period
is_in_testing_period() => true

// Entry conditions
long_condition = low <= donchian_lower and close > sma
short_condition = high >= donchian_upper and close < sma

// Exit conditions
exit_long_condition = high >= donchian_upper
exit_short_condition = low <= donchian_lower

// Open long position
if (is_in_testing_period() and (trade_type == "Buy Only" or trade_type == "Both") and long_condition)
    strategy.entry("Long", strategy.long)

// Close long position
if (is_in_testing_period() and exit_long_condition)
    strategy.close("Long")

// Open short position
if (is_in_testing_period() and (trade_type == "Sell Only" or trade_type == "Both") and short_condition)
    strategy.entry("Short", strategy.short)

// Close short position
if (is_in_testing_period() and exit_short_condition)
    strategy.close("Short")

// Close all positions at the end of the testing period
if not is_in_testing_period()
    strategy.close_all()


Có liên quan

Thêm nữa