이 전략은 방향 움직임 지수 (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="空單止盈")