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 sử dụng kênh Donchian 20 giai đoạn, bao gồm dải trên, dải dưới và đường trung.
Đ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.
Đố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)
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.
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.
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.
Quản lý rủi ro hiệu quả với dừng lỗ tạm dừng và dừng kéo theo.
Các quy tắc rõ ràng và dễ thực hiện.
Bắn chích trên thị trường bên cạnh cho một hệ thống theo xu hướng.
Stop loss cố định có thể dễ bị dừng sớm.
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.
Tối ưu hóa tham số là rất quan trọng.
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.
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ỳ.
Thêm các bộ lọc sử dụng các chỉ số khác để tránh sự đột phá sai.
Thử nghiệm với stop loss động.
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)