この戦略は,指向動向指数 (DMI) と平均真の範囲 (ATR) を組み合わせたトレンドフォローシステムである.コアメカニズムは,市場のトレンド方向と強さを特定するためにDI+とDI-インジケーターを使用し,動的なストップ・ロストとテイク・プロフィート調整のためにATRを使用する.トレンドフィルタリング移動平均の導入により信号の信頼性がさらに向上する.戦略設計は市場の変動を考慮し,良好な適応性を示する.
この戦略は,次の基本的メカニズムに基づいて機能します.
波動市場リスク - 範囲限定の市場で連続的な停止を引き起こす可能性があります.
提案: フィルタリングのために振動指標を追加するか,パラメータの
変動リスク - 高波動期間の間,重大な変動に直面する可能性があります. 提案: スリップに対応するためにストップ・ロスのポジションを適切に拡大します.
誤ったブレイクリスク - 傾向の転換点における潜在的な誤った判断. 提案:信号の確認のために音量指標を組み込む.
パラメータ感度 - パラメータの組み合わせによって性能が大きく異なります. 提案: バックテストで安定したパラメータ範囲を見つけます.
シグナル最適化 - 傾向強度評価のためのADX指標を導入するか,ボリューム確認メカニズムを追加することを検討する.
ポジション管理 - より精巧なリスク管理のために,トレンド強度に基づく動的ポジションサイズを導入する.
時間構造 - シグナル信頼性を高めるため,複数のタイムフレーム分析を検討する.
市場適応性 - 異なる機器の特徴に基づいて適応性のあるパラメータ調整メカニズムを開発する.
この戦略は,方向性および変動指標を組み合わせて動的トレンドフォローとリスク管理を達成する.戦略設計は,実用性と操作性を強調し,強力な市場適応性を実証する.パラメータ最適化と信号改善を通じて,さらなる強化の余地がある.投資家は実施前に市場特性を徹底的にテストし,特定の調整を行うことをお勧めする.
/*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="空單止盈")