Strategi Tren Adaptif ATR-ADX V2

Penulis:ChaoZhang, Tanggal: 2023-12-05 18:08:14
Tag:

img

Gambaran umum

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.

Logika Strategi

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.

Analisis Keuntungan

Strategi ini memiliki beberapa keuntungan yang jelas:

  1. Mampu menyesuaikan parameter secara dinamis untuk menangkap tren yang lebih baik
  2. Menggabungkan ATR dan ADX untuk penilaian yang lebih komprehensif
  3. Mengharapkan penarikan yang terkontrol
  4. Implementasi sederhana dan mudah dipahami

Oleh karena itu, ini adalah tren yang sangat praktis mengikuti strategi dengan pengendalian penarikan yang baik.

Analisis Risiko

Strategi ini juga memiliki beberapa risiko:

  1. ADX memiliki masalah tertinggal, mungkin melewatkan titik pembalikan tren
  2. Pilihan ukuran ATR yang tidak tepat dapat menyebabkan keuntungan yang tidak cukup atau stop loss yang terlalu besar
  3. Kecelakaan cepat terhadap band yang disebabkan oleh peristiwa angsa hitam dapat menyebabkan kerugian

Jadi pengoptimalan parameter dan pengendalian risiko perlu perhatian. Juga, peristiwa angsa hitam dapat memiliki dampak yang lebih besar.

Arahan Optimasi

Strategi dapat dioptimalkan dalam aspek berikut:

  1. Mengoptimalkan parameter ATR dan ADX untuk menangkap tren yang lebih baik
  2. Tambahkan indikator lain untuk konfirmasi untuk menghindari masalah keterlambatan ADX
  3. Membangun mekanisme stop loss yang dinamis untuk mengendalikan kerugian perdagangan tunggal
  4. Sesuaikan ukuran posisi untuk lingkungan pasar yang berbeda

Jadi masih banyak ruang untuk optimasi dengan menyesuaikan parameter dan mekanisme sesuai dengan masalah.

Kesimpulan

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

Lebih banyak