Chiến lược tiếp cận kênh Donchian tương phản với tạm dừng lỗ sau dừng và dừng lỗ theo dõi

Tác giả:ChaoZhang, Ngày: 2024-01-24 15:07:18
Tags:

img

Tổng quan

Chiến lược chạm vào kênh Donchian Contrarian là một chiến lược giao dịch định lượng dựa trên chỉ số kênh Donchian. Nó kết hợp dừng lỗ tạm dừng và dừng lỗ theo dõi để quản lý rủi ro.

Chiến lược này đi vào các vị trí dài / ngắn khi giá chạm vào dải trên / dưới của kênh Donchian. Mức dừng lỗ và lấy lợi nhuận được thiết lập cho mỗi giao dịch. Sau khi dừng lỗ, sẽ có một thời gian tạm dừng trước khi thực hiện giao dịch mới theo cùng một hướng. Trong một giao dịch, dừng lỗ được sử dụng để khóa lợi nhuận.

Chiến lược logic

Chiến lược sử dụng kênh Donchian 20 giai đoạn, bao gồm dải trên, dải dưới và đường trung.

Logic đầu vào

Đi dài khi giá chạm vào dải dưới; đi ngắn khi giá chạm vào dải trên.

Cần tạm dừng (ví dụ 3 thanh) sau khi dừng lỗ trước đó theo cùng một hướng để tránh theo đuổi xu hướng.

Ngừng mất mát và kiếm lợi nhuận

Đối với mỗi giao dịch, hãy thiết lập một tỷ lệ dừng lỗ cố định (ví dụ 22%) và lợi nhuận tích cực được tính dựa trên tỷ lệ rủi ro-lợi nhuận (ví dụ 2)

Đánh dấu Stop Loss

Sử dụng lệnh dừng lỗ sau khi giao dịch:

Đối với các giao dịch dài, nếu giá vượt qua đường trung bình, điều chỉnh stop loss đến điểm trung bình của giá nhập cảnh và đường trung bình.

Ngược lại đối với các vị trí ngắn vượt dưới đường trung tâm.

Ưu điểm

  1. Bắt được các động tác đang có xu hướng bằng cách sử dụng các bước thoát của kênh Donchian.

  2. Sự gia nhập chạm trái ngược phù hợp với việc giao dịch chống lại ý tưởng xu hướng.

  3. Quản lý rủi ro hiệu quả với dừng lỗ tạm dừng và dừng kéo theo.

  4. Các quy tắc rõ ràng và dễ thực hiện.

Rủi ro

  1. Bắn chích trên thị trường bên cạnh cho một hệ thống theo xu hướng.

  2. Stop loss cố định có thể dễ bị dừng sớm.

  3. Việc điều chỉnh dừng lại quá mạnh mẽ có thể phá vỡ các giao dịch có lợi nhuận quá sớm.

  4. Tối ưu hóa tham số là rất quan trọng.

Cơ hội gia tăng

  1. Tối ưu hóa thời gian tìm lại kênh Donchian cho các thông số tốt nhất.

  2. Bao gồm các quy tắc định kích thước vị trí, ví dụ: lập lại số lượng tạm dừng định kỳ.

  3. Thêm các bộ lọc sử dụng các chỉ số khác để tránh sự đột phá sai.

  4. Thử nghiệm với stop loss động.

Tóm lại

Chiến lược Contrarian Donchian Channel Touch Entry tích hợp nhận dạng xu hướng, quản lý rủi ro và nhiều hơn nữa. Với việc điều chỉnh tham số thêm và kết hợp với các mô hình khác, nó có thể đạt được độ bền và lợi nhuận tốt hơn cho các nhà giao dịch có kinh nghiệm.


/*backtest
start: 2023-01-17 00:00:00
end: 2024-01-23 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("Contrarian Donchian Channel Strategy - Touch Entry with Post-SL Pause and Trailing Stop", overlay=true, default_qty_value=0.01, default_qty_type=strategy.percent_of_equity)

// Inputs
length = input(20, minval=1, title="Donchian Channel Length")
riskRewardRatio = input(2, title="Risk/Reward Ratio")
stopLossPercent = input(0.22, title="Stop Loss (%)") / 100
pauseCandles = input(3, minval=1, title="Pause After SL (Candles)")

// Donchian Channel Calculation
upper = highest(high, length)
lower = lowest(low, length)
centerline = (upper + lower) / 2  // Calculating the Centerline

// Plotting Donchian Channel and Centerline
plot(upper, color=color.red, title="Upper Band")
plot(lower, color=color.green, title="Lower Band")
plot(centerline, color=color.blue, title="Centerline")

// Tracking Stop Loss Hits and Pause
var longSLHitBar = 0
var shortSLHitBar = 0
var int lastTradeDirection = 0 // 1 for long, -1 for short, 0 for none

// Update SL Hit Bars
if (strategy.position_size[1] > 0 and strategy.position_size == 0)
    if (close[1] < strategy.position_avg_price[1])
        longSLHitBar := bar_index
        lastTradeDirection := 1

if (strategy.position_size[1] < 0 and strategy.position_size == 0)
    if (close[1] > strategy.position_avg_price[1])
        shortSLHitBar := bar_index
        lastTradeDirection := -1

// Entry Conditions - Trigger on touch
longCondition = (low <= lower) and (bar_index - longSLHitBar > pauseCandles or lastTradeDirection != 1)
shortCondition = (high >= upper) and (bar_index - shortSLHitBar > pauseCandles or lastTradeDirection != -1)

// Trade Execution
if (longCondition)
    strategy.entry("Long", strategy.long)
if (shortCondition)
    strategy.entry("Short", strategy.short)

// Initial Stop Loss and Take Profit Calculation
stopLoss = strategy.position_avg_price * (1 - stopLossPercent)
takeProfit = strategy.position_avg_price * (1 + stopLossPercent * riskRewardRatio)

// Trailing Stop Loss Logic
var float trailingStopLong = na
var float trailingStopShort = na

// Update Trailing Stop for Long Position
if (strategy.position_size > 0)
    if (close > centerline)
        trailingStopLong := (strategy.position_avg_price + centerline) / 2
    stopLoss := na(trailingStopLong) ? stopLoss : max(trailingStopLong, stopLoss)

// Update Trailing Stop for Short Position
if (strategy.position_size < 0)
    if (close < centerline)
        trailingStopShort := (strategy.position_avg_price + centerline) / 2
    stopLoss := na(trailingStopShort) ? stopLoss : min(trailingStopShort, stopLoss)

// Setting Stop Loss and Take Profit for each trade
strategy.exit("SL_TP_Long", "Long", stop=stopLoss, limit=takeProfit)
strategy.exit("SL_TP_Short", "Short", stop=stopLoss, limit=takeProfit)


Thêm nữa