Strategi Trend ATR-ADX yang Sesuai V2

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

img

Ringkasan

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.

Logika Strategi

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.

Analisis Kelebihan

Strategi ini mempunyai beberapa kelebihan yang jelas:

  1. Mampu menyesuaikan parameter secara dinamik untuk menangkap trend yang lebih baik
  2. Menggabungkan ATR dan ADX untuk penilaian yang lebih komprehensif
  3. Menjangkakan pengambilan yang terkawal
  4. Pelaksanaan mudah dan mudah difahami

Oleh itu, ini adalah trend yang sangat praktikal mengikut strategi dengan kawalan pengeluaran yang baik.

Analisis Risiko

Strategi ini juga mempunyai beberapa risiko:

  1. ADX mempunyai isu yang tertinggal, mungkin terlepas titik pembalikan trend
  2. Pilihan saiz ATR yang tidak betul boleh membawa kepada keuntungan yang tidak mencukupi atau stop loss yang terlalu besar
  3. Kecelakaan yang cepat terhadap kumpulan yang disebabkan oleh peristiwa black swan boleh menyebabkan kerugian

Jadi pengoptimuman parameter dan kawalan risiko memerlukan perhatian. Juga, peristiwa black swan boleh mempunyai kesan yang lebih besar.

Arahan pengoptimuman

Strategi ini boleh dioptimumkan dalam aspek berikut:

  1. Mengoptimumkan parameter ATR dan ADX untuk menangkap trend yang lebih baik
  2. Tambah penunjuk lain untuk pengesahan untuk mengelakkan isu-isu kelewatan ADX
  3. Membina mekanisme berhenti rugi dinamik untuk mengawal kerugian perdagangan tunggal
  4. Sesuaikan saiz kedudukan untuk persekitaran pasaran yang berbeza

Jadi masih ada banyak ruang untuk pengoptimuman dengan menyesuaikan parameter dan mekanisme mengikut masalah.

Kesimpulan

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

Lebih lanjut