Bei dieser Strategie handelt es sich um ein Trendfolgesystem, das den Directional Movement Index (DMI) und den Average True Range (ATR) kombiniert. Der Kern der Strategie besteht darin, die Richtung und Stärke von Markttrends anhand der Indikatoren DI+ und DI- zu erkennen und mithilfe von ATR die Take-Profit- und Stop-Loss-Positionen dynamisch anzupassen. Durch die Einführung eines trendgefilterten gleitenden Durchschnitts als zusätzliche Bestätigung wird die Zuverlässigkeit der Handelssignale weiter verbessert. Bei der Entwicklung der Strategie wird die Marktvolatilität in vollem Umfang berücksichtigt und sie weist eine gute Anpassungsfähigkeit auf.
Die Strategie basiert auf den folgenden Kernmechanismen:
Risiko volatiler Märkte – in einem Markt mit schwankenden Kursen kann es zu kontinuierlichen Stopps kommen. Vorschlag: Oszillatorfilter hinzufügen oder Parameterschwelle anpassen.
Slippage-Risiko – In Zeiten hoher Volatilität kann es zu großem Slippage kommen. Vorschlag: Lockern Sie die Stop-Loss-Position entsprechend und lassen Sie Spielraum für Slippage.
Falsches Ausbruchsrisiko – mögliche Fehleinschätzung von Trendwendepunkten. Empfehlung: Kombinieren Sie Indikatoren wie das Handelsvolumen, um das Signal zu bestätigen.
Parametersensitivität – unterschiedliche Parameterkombinationen können sehr unterschiedliche Leistungen erbringen. Empfehlung: Finden Sie durch Backtesting einen Parameterbereich mit starker Stabilität.
Signaloptimierung – Zur Bewertung der Trendstärke kann ein ADX-Indikator eingeführt oder ein Mechanismus zur Volumenbestätigung hinzugefügt werden.
Positionsmanagement – Passen Sie die Positionsgröße dynamisch basierend auf der Trendstärke an, um eine ausgefeiltere Risikokontrolle zu erreichen.
Zeitrahmen – Zur Verbesserung der Signalzuverlässigkeit können Analysen mehrerer Zeiträume in Betracht gezogen werden.
Marktanpassungsfähigkeit – Basierend auf den Eigenschaften verschiedener Sorten können adaptive Mechanismen zur Parameteranpassung entwickelt werden.
Mit dieser Strategie wird eine dynamische Trendverfolgung und Risikokontrolle durch die Kombination von Trendindikatoren und Volatilitätsindikatoren erreicht. Der Schwerpunkt des Strategieentwurfs liegt auf Praktikabilität und Umsetzbarkeit und weist eine hohe Marktanpassungsfähigkeit auf. Es besteht noch Raum für eine weitere Verbesserung der Strategie durch Parameteroptimierung und Signalverbesserung. Anlegern wird empfohlen, ausreichende Tests in der tatsächlichen Anwendung durchzuführen und gezielte Anpassungen anhand spezifischer Marktmerkmale vorzunehmen.
/*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="空單止盈")