리소스 로딩... 로딩...

동적 변동성 조정 트렌드 다음 전략 ATR 정지 관리와 함께 DI 지표에 기반

저자:차오장, 날짜: 2025-01-06 16:18:01
태그:DIDMIATRSMAMA

img

전반적인 설명

이 전략은 방향 움직임 지수 (DMI) 와 평균 진실 범위 (ATR) 를 결합한 트렌드 다음 시스템이다. 핵심 메커니즘은 시장 트렌드 방향과 강도를 식별하기 위해 DI + 및 DI- 지표를 사용하여 동적 스톱 로스 및 영리 조정에 ATR을 활용합니다. 트렌드 필터링 이동 평균의 도입은 신호 신뢰성을 더욱 향상시킵니다. 전략 설계는 시장 변동성을 고려하고 좋은 적응력을 보여줍니다.

전략 원칙

이 전략은 다음과 같은 핵심 메커니즘에 기반합니다.

  1. 트렌드 방향과 강도를 측정하기 위해 DI+ 및 DI- 지표를 사용합니다. DI+가 DI-의 임계 값을 초과하면 상승 추세가 확인됩니다. 하락 추세에는 역행합니다.
  2. 트렌드 확인 도구로 트렌드 필터링 이동 평균 (SMA) 을 포함합니다. 가격 및 이동 평균 포지션이 상호 확인 될 때 신호가 활성화됩니다.
  3. ATR 지표를 사용하여 스톱 로스 및 영업 취득 수준을 동적으로 계산하여 위험 관리가 다른 시장 조건에 적응하도록 보장합니다.
  4. 과도한 거래 빈도를 피하기 위해 거래 실행에 대한 시간 제한을 엄격히 준수합니다.

전략적 장점

  1. 강력한 동적 조정 - ATR을 통해 시장 변동성 적응을 달성합니다.
  2. 포괄적 리스크 제어 - 변동성 기반의 동적 스톱 로스 및 영리 메커니즘을 구현합니다.
  3. 높은 신호 신뢰성 - 여러 지표의 교차 검증을 통해 잘못된 신호를 줄입니다.
  4. 유연한 매개 변수 - 전략 매개 변수는 다른 시장 특성에 최적화 될 수 있습니다.
  5. 명확한 실행 논리 - 정확한 입출구 조건이 실제 구현을 촉진합니다.

전략 위험

  1. 오스실레이션 시장 위험 - 범위 제한 시장에서 연속적인 정지로 이어질 수 있습니다. 제안: 필터링을 위해 진동 지표를 추가하거나 매개 변수 문턱을 조정하십시오.

  2. 소위 '보험자'를 포함해서 제안: 슬라이드를 수용하기 위해 적절한 스톱 로스 포지션을 넓혀라.

  3. 허위 파업 위험 - 트렌드 전환점에 발생할 수 있는 잘못된 판단. 제안: 신호 확인을 위해 부피 표시기를 포함합니다.

  4. 매개 변수 민감도 - 성능은 다른 매개 변수 조합에 따라 크게 달라집니다. 제안: 백테스팅을 통해 안정적인 매개 변수 범위를 찾습니다.

전략 최적화 방향

  1. 신호 최적화 - 트렌드 강도를 평가하기 위해 ADX 지표를 도입하거나 부피 확인 메커니즘을 추가하는 것을 고려하십시오.

  2. 포지션 관리 - 더 정교한 위험 통제를 위해 트렌드 강도에 기반한 동적 포지션 크기를 구현합니다.

  3. 시간 구조 - 신호 신뢰성을 높이기 위해 여러 시간 프레임 분석을 고려하십시오.

  4. 시장 적응력 - 다른 기기 특성에 기초한 적응적 매개 변수 조정 메커니즘을 개발합니다.

요약

이 전략은 방향 및 변동성 지표를 결합하여 동적인 트렌드 추적 및 위험 통제를 달성합니다. 전략 설계는 실용성과 작동성을 강조하며 강력한 시장 적응력을 보여줍니다. 매개 변수 최적화 및 신호 개선을 통해 추가 개선의 여지가 있습니다. 투자자는 실행 전에 시장 특성에 따라 철저하게 테스트하고 특정 조정을 할 것을 권장합니다.


/*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="空單止盈")

관련

더 많은