Strategi Tren Adaptif ATR-ADX V2


Tanggal Pembuatan: 2023-12-05 18:08:14 Akhirnya memodifikasi: 2023-12-05 18:08:14
menyalin: 0 Jumlah klik: 1058
1
fokus pada
1621
Pengikut

Strategi Tren Adaptif ATR-ADX V2

Ringkasan

Strategi ini merupakan strategi pelacakan tren yang menggabungkan indikator ATR dan indikator ADX. Strategi ini akan secara dinamis menyesuaikan kelipatan ATR sesuai dengan kondisi tren pasar, sehingga memungkinkan pelacakan tren yang lebih baik.

Prinsip Strategi

Strategi ini didasarkan pada indikator ATR dan ADX.

Pertama, menghitung rentang fluktuasi yang sebenarnya (ATR) dan ADX. ATR mencerminkan tingkat fluktuasi pasar, dan ADX menilai kekuatan tren.

Kemudian, berdasarkan perbedaan ADX dengan indikator DX, menilai kondisi kosong tren saat ini. Jika DI+ lebih tinggi dari DI-, maka tren multihead, jika DI- lebih tinggi dari DI+, maka tren headless.

Selanjutnya, menggunakan ATR yang lebih besar (m1) saat ADX naik dan ATR yang lebih kecil (m2) saat ADX turun, untuk melakukan penyesuaian dinamis. Inilah inti dari strategi ini.

Akhirnya, dengan menggabungkan ATR dan nilai rata-rata harga, perhitungan naik turun, dan kemudian menilai arah tren. Lihatlah lebih banyak ketika harga menembus tren naik, dan lihatlah lebih sedikit ketika harga menembus tren turun.

Jadi, strategi ini menggabungkan indikator ATR dan indikator ADX, dan dengan menyesuaikan parameter ATR secara dinamis, dapat menangkap tren yang lebih baik untuk perdagangan.

Analisis Keunggulan

Strategi ini memiliki beberapa keuntungan yang jelas:

  1. Dengan kemampuan untuk menyesuaikan parameter secara dinamis untuk menangkap tren yang lebih baik
  2. Perbandingan antara ATR dan ADX memberikan penilaian yang lebih komprehensif.
  3. Pengunduran diri diharapkan dapat dikendalikan dalam batas tertentu.
  4. Proses implementasinya sederhana dan mudah dipahami

Jadi, ini adalah strategi pelacakan tren yang sangat praktis, dengan kemampuan kontrol mundur yang sangat baik dan sangat disarankan.

Analisis risiko

Strategi ini juga memiliki beberapa risiko:

  1. Indeks ADX Terlambat, Mungkin Melewatkan Titik Peralihan
  2. Ukuran ATR yang tidak tepat dapat menyebabkan keuntungan yang kurang atau kerugian yang terlalu besar
  3. Kecelakaan itu menyebabkan kerusakan pada jalur kereta api.

Oleh karena itu, perlu diperhatikan pengoptimalan parameter dan pengendalian risiko. Selain itu, peristiwa Black Swan juga akan berdampak besar pada strategi.

Arah optimasi

Strategi ini dapat dioptimalkan dari beberapa arah:

  1. Optimalkan parameter ATR dan ADX untuk menangkap tren yang lebih baik
  2. Menambahkan Konfirmasi Indikator Lainnya untuk Menghindari Keterlambatan ADX
  3. Membangun mekanisme stop loss yang dinamis untuk mengendalikan kerugian tunggal
  4. Adaptasi manajemen posisi, mengambil strategi yang berbeda dalam kondisi pasar yang berbeda

Oleh karena itu, strategi ini masih memiliki banyak ruang untuk pengoptimalan, dan perlu untuk menyesuaikan parameter dan mekanisme untuk masalah tersebut.

Meringkaskan

Strategi tren ATR-ADX yang beradaptasi secara otomatis sangat bagus untuk V2 secara keseluruhan, dengan menyesuaikan parameter ATR secara dinamis, dapat menangkap tren dengan baik; dan memiliki toleransi kesalahan yang kuat dalam kombinasi penilaian kedua indikator ATR dan ADX. Namun, kita juga harus memperhatikan pengendalian risiko dan pengoptimalan strategi untuk mencegah keterlambatan dan perluasan kerugian. Secara keseluruhan, strategi ini layak untuk dipelajari dan diterapkan.

Kode Sumber Strategi
/*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