これは,ATR指標とADX指標を組み合わせたトレンドフォロー戦略です.よりよいトレンド追跡を達成するために,市場トレンド条件に応じてATR倍数を動的に調整します.
この戦略は主にATR指標とADX指標に基づいています.
まず True Range (ATR) と ADX を計算します.ATR は市場の変動を反映し,ADX はトレンド強さを判断します.
2つ目は,ADX指標のDI+とDI-の差によって現在のトレンド方向を決定する.DI+がDI-より高ければ上昇傾向である.DI-がDI+より高ければ下落傾向である.
ADXが上昇するときは,より大きなATR倍数 (m1) を使用する.ADXが落ちる時は,動的調整を達成するためにより小さなATR倍数 (m2) を使用する.これは戦略の核心である.
ATR と 価格 の 中点 と 組み合わせ て,上位 と 下位 の バンド を 計算 し て,トレンド の 方向 を 決定 する. 上位 の バンド を 破る 時,価格 は 長い. 下位 の バンド を 破る 時,価格 は 短い.
戦略にはATRとADXが組み込まれています そしてATRパラメータを動的に調整することで 取引のトレンドを把握できます
この戦略にはいくつかの明らかな利点があります.
これは非常に実用的な傾向であり, 引き上げを適切に制御する戦略です.
この戦略にはいくつかのリスクもあります:
またブラック・スワン・イベントは より大きな影響を与える可能性があります ブラック・スワン・イベントは,より大きな影響を与える可能性があります
戦略は以下の側面で最適化できます.
問題に応じてパラメータやメカニズムを調整することで 最適化できる余地がまだたくさんあります
一般的に,このアダプティブATR-ADXトレンドストラテジーV2は非常にうまく機能しています.ATRパラメータを動的に調整することで,トレンドをよく把握できます.また,ATRとADXの2つの指標を組み合わせることで,より堅牢になります.しかし,遅れや過大損失を防ぐためにリスク制御と最適化に注意を払う必要があります.全体として,戦略は学び,適用する価値があります.
/*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