이것은 ATR 지표와 ADX 지표를 결합한 트렌드 다음 전략입니다. 더 나은 트렌드 추적을 달성하기 위해 시장 트렌드 조건에 따라 ATR 곱셈자를 동적으로 조정합니다.
이 전략은 주로 ATR 지표와 ADX 지표에 기반합니다.
첫째, True Range (ATR) 와 ADX를 계산합니다. ATR은 시장의 변동성을 반영하고 ADX는 트렌드 강도를 판단합니다.
둘째, ADX 지표의 DI+와 DI-의 차이에 따라 현재 트렌드 방향을 결정합니다. DI+가 DI-보다 높다면 상승 추세입니다. DI-가 DI+보다 높다면 하락 추세입니다.
ADX가 상승할 때, 더 큰 ATR 곱셈 (m1) 을 사용합니다. ADX가 떨어질 때, 더 작은 ATR 곱셈 (m2) 을 사용하여 동적 조정을 달성합니다. 이것은 전략의 핵심입니다.
마지막으로, ATR 및 가격의 중간점과 결합하여 상위 및 하위 대역을 계산하여 트렌드 방향을 결정합니다. 가격이 상위 대역을 넘으면 길게됩니다. 가격이 하위 대역을 넘으면 짧게됩니다.
그래서 전략은 ATR와 ADX를 통합하고, 동적으로 ATR 매개 변수를 조정함으로써 거래 트렌드를 더 잘 파악할 수 있습니다.
이 전략은 몇 가지 명백한 장점을 가지고 있습니다.
따라서, 이것은 좋은 유출 통제와 함께 전략을 따르는 매우 실용적인 추세입니다. 추천 할 가치가 있습니다.
이 전략은 또한 몇 가지 위험을 안고 있습니다.
그래서 매개 변수 최적화와 위험 통제는 주의가 필요합니다. 또한 블랙 스완 사건은 더 큰 영향을 줄 수 있습니다.
이 전략은 다음과 같은 측면에서 최적화 될 수 있습니다.
따라서 문제들에 따라 매개 변수와 메커니즘을 조정함으로써 최적화할 여지가 여전히 많습니다.
일반적으로, 이 적응성 ATR-ADX 트렌드 전략 V2는 매우 잘 수행된다. 동적으로 ATR 매개 변수를 조정함으로써, 트렌드를 잘 포착한다. 또한, ATR과 ADX의 두 지표를 결합하면 더 견고해진다. 그러나 우리는 여전히 후퇴와 과대 손실을 방지하기 위해 위험 통제와 최적화에 주의를 기울여야 한다. 전반적으로, 전략은 학습하고 적용할 가치가 있다.
/*backtest start: 2022-11-28 00:00:00 end: 2023-12-04 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=2 // From mortdiggiddy's indicator to strategy // See also: https://www.tradingview.com/u/mortdiggiddy/ strategy(title = "Adaptive ATR-ADX Trend V2", shorttitle = "Adaptive ATR V2 Strategy", overlay = true) //Mode src = input(title = "Source", defval = hlc3) atrLen = input(title = "ATR", defval = 21, minval = 1, maxval = 100) m1 = input(title = "ATR Multiplier - ADX Rising", type = float, defval = 3.5, minval = 1, step = 0.1, maxval = 100) m2 = input(title = "ATR Multiplier - ADX Falling", type = float, defval = 1.75, minval = 1, step = 0.1, maxval = 100) adxLen = input(title = "ADX", defval = 14, minval = 1, maxval = 100) adxThresh = input(title = "ADX Threshold", defval = 30, minval = 1) aboveThresh = input(true, title = "ADX Above Threshold uses ATR Falling Multiplier Even if Rising?") useHeiken = input(false, title = "Use Heiken-Ashi Bars (Source will be ohlc4)") // DI-Pos, DI-Neg, ADX hR = change(high) lR = -change(low) dmPos = hR > lR ? max(hR, 0) : 0 dmNeg = lR > hR ? max(lR, 0) : 0 sTR = nz(sTR[1]) - nz(sTR[1]) / adxLen + tr sDMPos = nz(sDMPos[1]) - nz(sDMPos[1]) / adxLen + dmPos sDMNeg = nz(sDMNeg[1]) - nz(sDMNeg[1]) / adxLen + dmNeg DIP = sDMPos / sTR * 100 DIN = sDMNeg / sTR * 100 DX = abs(DIP - DIN) / (DIP + DIN) * 100 adx = sma(DX, adxLen) // Heiken-Ashi xClose = ohlc4 xOpen = (nz(xOpen[1]) + nz(close[1])) / 2 xHigh = max(high, max(xOpen, xClose)) xLow = min(low, min(xOpen, xClose)) // Trailing ATR v1 = abs(xHigh - xClose[1]) v2 = abs(xLow - xClose[1]) v3 = xHigh - xLow trueRange = max(v1, max(v2, v3)) atr = useHeiken ? rma(trueRange, atrLen) : atr(atrLen) m = rising(adx, 1) and (adx < adxThresh or not aboveThresh) ? m1 : falling(adx, 1) or (adx > adxThresh and aboveThresh) ? m2 : nz(m[1]) mUp = DIP >= DIN ? m : m2 mDn = DIN >= DIP ? m : m2 src_ = useHeiken ? xClose : src c = useHeiken ? xClose : close t = useHeiken ? (xHigh + xLow) / 2 : hl2 up = t - mUp * atr dn = t + mDn * atr TUp = max(src_[1], c[1]) > TUp[1] ? max(up, TUp[1]) : up TDown = min(src_[1], c[1]) < TDown[1] ? min(dn, TDown[1]) : dn trend = min(src_, min(c, close)) > TDown[1] ? 1 : max(src_, max(c, close)) < TUp[1]? -1 : nz(trend[1], 1) stop = trend == 1 ? TUp : TDown trendChange = change(trend) longCondition = (trendChange > 0) if (longCondition) strategy.entry("long", strategy.long) shortCondition = (trendChange < 0) if (shortCondition) strategy.entry("short", strategy.short) // Plot lineColor = not(trendChange) ? trend > 0 ? #00FF00DD : #FF0000DD : #00000000 shapeColor = trendChange ? trendChange > 0 ? #00FF00F8 : #FF0000F8 : #00000000 plot(stop, color = lineColor, style = line, linewidth = 1, title = "ATR Trend") plotshape(trendChange ? stop : na, style = shape.circle, size = size.tiny, location = location.absolute, color = shapeColor, title = "Change") alertcondition(trendChange > 0, title = "ATR-ADX Change Up", message = "ATR-ADX Change Up") alertcondition(trendChange < 0, title = "ATR-ADX Change Down", message = "ATR-ADX Change Down") // end