
Chiến lược này là một hệ thống theo xu hướng kết hợp Chỉ số chuyển động có hướng (DMI) và Biên độ thực trung bình (ATR). Cốt lõi của chiến lược này là xác định hướng đi và sức mạnh của xu hướng thị trường thông qua các chỉ báo DI+ và DI-, đồng thời sử dụng ATR để điều chỉnh linh hoạt các vị thế chốt lời và cắt lỗ. Bằng cách đưa đường trung bình động được lọc theo xu hướng làm xác nhận phụ trợ, độ tin cậy của tín hiệu giao dịch được cải thiện hơn nữa. Chiến lược thiết kế cân nhắc đầy đủ đến sự biến động của thị trường và có khả năng thích ứng tốt.
Chiến lược này hoạt động dựa trên các cơ chế cốt lõi sau:
Rủi ro thị trường biến động - có thể xảy ra tình trạng dừng liên tục trong thị trường biến động. Gợi ý: Thêm bộ lọc dao động hoặc điều chỉnh ngưỡng tham số.
Rủi ro trượt giá - Bạn có thể phải đối mặt với tình trạng trượt giá lớn trong thời kỳ biến động cao. Gợi ý: Nới lỏng vị trí dừng lỗ một cách hợp lý và chừa chỗ cho sự trượt giá.
Rủi ro đột phá sai - có thể đánh giá sai điểm chuyển hướng xu hướng. Khuyến nghị: Kết hợp các chỉ báo như khối lượng giao dịch để xác nhận tín hiệu.
Độ nhạy của tham số - các tổ hợp tham số khác nhau có thể có hiệu suất rất khác nhau. Khuyến nghị: Tìm một phạm vi tham số có độ ổn định cao thông qua thử nghiệm ngược.
Tối ưu hóa tín hiệu - Có thể đưa chỉ báo ADX vào để đánh giá sức mạnh xu hướng hoặc có thể thêm cơ chế xác nhận khối lượng.
Quản lý vị thế - Điều chỉnh quy mô vị thế một cách linh hoạt dựa trên sức mạnh của xu hướng để đạt được khả năng kiểm soát rủi ro tinh vi hơn.
Khung thời gian - Có thể cân nhắc phân tích nhiều khoảng thời gian để tăng cường độ tin cậy của tín hiệu.
Khả năng thích ứng với thị trường - Cơ chế điều chỉnh thông số thích ứng có thể được phát triển dựa trên đặc điểm của các giống khác nhau.
Chiến lược này đạt được khả năng theo dõi xu hướng năng động và kiểm soát rủi ro bằng cách kết hợp các chỉ báo xu hướng và chỉ báo biến động. Chiến lược thiết kế tập trung vào tính thực tiễn và khả năng vận hành, có khả năng thích ứng mạnh mẽ với thị trường. Vẫn còn chỗ để cải thiện chiến lược hơn nữa thông qua tối ưu hóa tham số và cải thiện tín hiệu. Các nhà đầu tư được khuyên nên tiến hành thử nghiệm đầy đủ trong ứng dụng thực tế và thực hiện các điều chỉnh có mục tiêu dựa trên các đặc điểm cụ thể của thị trường.
/*backtest
start: 2019-12-23 08:00:00
end: 2025-01-04 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("使用 DI+ 和 DI- 的策略 (最終完整修正且含圖表止損止盈線)", overlay=true)
// 輸入參數
diLength = input.int(title="DI 長度", defval=14)
adxSmoothing = input.int(title="ADX Smoothing", defval=14)
trendFilterLength = input.int(title="趨勢過濾均線長度", defval=20)
strengthThreshold = input.int(title="趨勢強度門檻值", defval=20)
atrLength = input.int(title="ATR 長度", defval=14)
atrMultiplierStop = input.float(title="ATR 停損倍數", defval=1.5)
atrMultiplierTakeProfit = input.float(title="ATR 止盈倍數", defval=2.5)
// 計算 DI+ 和 DI-
[diPlus, diMinus, _] = ta.dmi(diLength, adxSmoothing)
// 計算趨勢過濾均線
trendFilterMA = ta.sma(close, trendFilterLength)
// 判斷趨勢方向和強度
strongUpTrend = diPlus > diMinus + strengthThreshold and close > trendFilterMA
strongDownTrend = diMinus > diPlus + strengthThreshold and close < trendFilterMA
// 計算 ATR
atr = ta.atr(atrLength)
// 追蹤止損止盈價格 (使用 var 宣告,只在進場時更新)
var float longStopPrice = na
var float longTakeProfitPrice = na
var float shortStopPrice = na
var float shortTakeProfitPrice = na
// 進場邏輯
longCondition = strongUpTrend
shortCondition = strongDownTrend
if (longCondition)
strategy.entry("多單", strategy.long)
longStopPrice := close - atr * atrMultiplierStop // 進場時計算並更新止損價
longTakeProfitPrice := close + atr * atrMultiplierTakeProfit // 進場時計算並更新止盈價
if (shortCondition)
strategy.entry("空單", strategy.short)
shortStopPrice := close + atr * atrMultiplierStop // 進場時計算並更新止損價
shortTakeProfitPrice := close - atr * atrMultiplierTakeProfit // 進場時計算並更新止盈價
// 出場邏輯 (使用 time 限制和 ATR)
inLongPosition = strategy.position_size > 0
inShortPosition = strategy.position_size < 0
lastEntryTime = strategy.opentrades.entry_bar_index(strategy.opentrades - 1)
if (inLongPosition and time > lastEntryTime)
strategy.exit("多單出場", "多單", stop=longStopPrice, limit=longTakeProfitPrice)
if (inShortPosition and time > lastEntryTime)
strategy.exit("空單出場", "空單", stop=shortStopPrice, limit=shortTakeProfitPrice)
// 繪製 DI+、DI- 和趨勢過濾均線
plot(diPlus, color=color.green, title="DI+")
plot(diMinus, color=color.red, title="DI-")
plot(trendFilterMA, color=color.blue, title="趨勢過濾均線")
// 繪製止損止盈線 (使用 plot 函數繪製)
plot(strategy.position_size > 0 ? longStopPrice : na, color=color.red, style=plot.style_linebr, linewidth=2, title="多單停損")
plot(strategy.position_size > 0 ? longTakeProfitPrice : na, color=color.green, style=plot.style_linebr, linewidth=2, title="多單止盈")
plot(strategy.position_size < 0 ? shortStopPrice : na, color=color.red, style=plot.style_linebr, linewidth=2, title="空單停損")
plot(strategy.position_size < 0 ? shortTakeProfitPrice : na, color=color.green, style=plot.style_linebr, linewidth=2, title="空單止盈")