Cette stratégie est un système de suivi des tendances qui combine l'indice de mouvement directionnel (DMI) avec la plage moyenne vraie (ATR). Le mécanisme de base utilise les indicateurs DI + et DI- pour identifier la direction et la force de la tendance du marché, tout en utilisant l'ATR pour des ajustements dynamiques de stop-loss et de take-profit.
La stratégie fonctionne sur la base des mécanismes de base suivants:
Risque d'oscillation du marché - Peut entraîner des arrêts consécutifs sur les marchés à fourchette. Suggestion: ajouter des indicateurs d'oscillation pour filtrer ou ajuster les seuils de paramètres.
Le risque de glissement - Risque de glissement significatif pendant les périodes de forte volatilité. Suggestion: élargir de manière appropriée les positions stop-loss pour tenir compte du glissement.
Risque de fausse rupture - éventuelles erreurs d'appréciation à des points tournants de la tendance. Suggestion: intégrer des indicateurs de volume pour confirmer le signal.
Sensibilité des paramètres - Les performances varient considérablement selon les combinaisons de paramètres. Suggestion: Trouver des plages de paramètres stables par le backtesting.
Optimisation du signal - envisager l'introduction de l'indicateur ADX pour l'évaluation de la force de la tendance ou l'ajout de mécanismes de confirmation du volume.
Gestion des positions - Mettre en œuvre une dimensionnement dynamique des positions basé sur la force de la tendance pour un contrôle des risques plus précis.
Structure temporelle - Considérer l'analyse de plusieurs délais pour améliorer la fiabilité du signal.
Adaptabilité au marché - Développer des mécanismes d'ajustement adaptatif des paramètres basés sur les différentes caractéristiques des instruments.
Cette stratégie réalise un suivi dynamique des tendances et un contrôle des risques en combinant des indicateurs de direction et de volatilité. La conception de la stratégie met l'accent sur la praticité et l'opérabilité, démontrant une forte adaptabilité du marché.
/*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="空單止盈")