Ini adalah strategi mengikuti tren yang menggabungkan indikator ATR dan indikator ADX. Ini secara dinamis menyesuaikan pengganda ATR sesuai dengan kondisi tren pasar untuk mencapai pelacakan tren yang lebih baik.
Strategi ini terutama didasarkan pada indikator ATR dan indikator ADX.
Pertama, ini menghitung True Range (ATR) dan ADX. ATR mencerminkan volatilitas pasar sementara ADX menilai kekuatan tren.
Kedua, menentukan arah tren saat ini sesuai dengan perbedaan antara DI + dan DI- dalam indikator ADX. Jika DI + lebih tinggi dari DI-, itu adalah tren naik. Jika DI- lebih tinggi dari DI+, itu adalah tren menurun.
Kemudian, ketika ADX naik, ia menggunakan multiplier ATR yang lebih besar (m1). Ketika ADX turun, ia menggunakan multiplier ATR yang lebih kecil (m2) untuk mencapai penyesuaian dinamis.
Akhirnya, dikombinasikan dengan ATR dan titik tengah harga, ia menghitung band atas dan bawah untuk menentukan arah tren.
Jadi strategi ini menggabungkan ATR dan ADX, dan dengan menyesuaikan parameter ATR secara dinamis, dapat lebih menangkap tren untuk perdagangan.
Strategi ini memiliki beberapa keuntungan yang jelas:
Oleh karena itu, ini adalah tren yang sangat praktis mengikuti strategi dengan pengendalian penarikan yang baik.
Strategi ini juga memiliki beberapa risiko:
Jadi pengoptimalan parameter dan pengendalian risiko perlu perhatian. Juga, peristiwa angsa hitam dapat memiliki dampak yang lebih besar.
Strategi dapat dioptimalkan dalam aspek berikut:
Jadi masih banyak ruang untuk optimasi dengan menyesuaikan parameter dan mekanisme sesuai dengan masalah.
Secara umum, Adaptive ATR-ADX Trend Strategy V2 ini berkinerja sangat baik. Dengan menyesuaikan parameter ATR secara dinamis, ia menangkap tren dengan baik. Juga, menggabungkan dua indikator di ATR dan ADX membuatnya lebih kuat. Tapi kita masih perlu memperhatikan pengendalian risiko dan pengoptimalan untuk mencegah keterlambatan dan kerugian yang terlalu besar. Secara keseluruhan, strategi ini sangat layak dipelajari dan diterapkan.
/*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