Ini adalah strategi trend berikut yang menggabungkan penunjuk ATR dan penunjuk ADX. Ia secara dinamik menyesuaikan pengganda ATR mengikut keadaan trend pasaran untuk mencapai penjejakan trend yang lebih baik.
Strategi ini terutamanya berdasarkan kepada penunjuk ATR dan penunjuk ADX.
Pertama, ia mengira Julat Benar (ATR) dan ADX. ATR mencerminkan turun naik pasaran manakala ADX menilai kekuatan trend.
Kedua, ia menentukan arah trend semasa mengikut perbezaan antara DI + dan DI- dalam penunjuk ADX. Jika DI + lebih tinggi daripada DI-, ia adalah aliran menaik. Jika DI- lebih tinggi daripada DI+, ia adalah aliran menurun.
Kemudian, apabila ADX meningkat, ia menggunakan pengganda ATR yang lebih besar (m1). Apabila ADX jatuh, ia menggunakan pengganda ATR yang lebih kecil (m2) untuk mencapai penyesuaian dinamik.
Akhirnya, digabungkan dengan ATR dan titik tengah harga, ia mengira jalur atas dan bawah untuk menentukan arah trend. Apabila harga menembusi jalur atas, ia pergi panjang. Apabila harga menembusi jalur bawah, ia pergi pendek.
Jadi strategi ini menggabungkan ATR dan ADX, dan dengan menyesuaikan parameter ATR secara dinamik, ia boleh menangkap lebih baik trend untuk perdagangan.
Strategi ini mempunyai beberapa kelebihan yang jelas:
Oleh itu, ini adalah trend yang sangat praktikal mengikut strategi dengan kawalan pengeluaran yang baik.
Strategi ini juga mempunyai beberapa risiko:
Jadi pengoptimuman parameter dan kawalan risiko memerlukan perhatian. Juga, peristiwa black swan boleh mempunyai kesan yang lebih besar.
Strategi ini boleh dioptimumkan dalam aspek berikut:
Jadi masih ada banyak ruang untuk pengoptimuman dengan menyesuaikan parameter dan mekanisme mengikut masalah.
Secara umum, Strategi Trend ATR-ADX Adaptive ini berfungsi dengan sangat baik. Dengan menyesuaikan parameter ATR secara dinamik, ia menangkap trend dengan baik. Juga, menggabungkan dua penunjuk dalam ATR dan ADX menjadikannya lebih mantap. Tetapi kita masih perlu memberi perhatian kepada kawalan risiko dan pengoptimuman untuk mengelakkan kerugian yang ketinggalan dan berlebihan. Secara keseluruhan, strategi ini sangat bernilai dipelajari dan digunakan.
/*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