Strategi Adaptif ATR-ADX Trend V2


Tarikh penciptaan: 2023-12-05 18:08:14 Akhirnya diubah suai: 2023-12-05 18:08:14
Salin: 0 Bilangan klik: 1058
1
fokus pada
1621
Pengikut

Strategi Adaptif ATR-ADX Trend V2

Gambaran keseluruhan

Strategi ini adalah strategi trend-following yang menggabungkan ATR dan ADX. Ia secara dinamik akan menyesuaikan ATR mengikut keadaan trend pasaran, untuk mendapatkan trend-following yang lebih baik.

Prinsip Strategi

Strategi ini adalah berdasarkan kepada ATR dan ADX.

Pertama, mengira Jarak Ketegangan Sebenar (ATR) dan ADX. ATR mencerminkan tahap ketegangan pasaran, dan ADX menilai kekuatan trend.

Kemudian, berdasarkan perbezaan ADX dengan penunjuk arah kosong DX, menilai keadaan kosong tren semasa. Jika DI + lebih tinggi daripada DI-, maka tren multihead, jika DI - lebih tinggi daripada DI +, maka tren kosong.

Kemudian, apabila ADX naik, gunakan ATR yang lebih besar ((m1)), dan apabila ADX turun, gunakan ATR yang lebih kecil ((m2)), untuk mencapai penyesuaian dinamik. Inilah inti strategi ini.

Akhirnya, gabungan ATR dan nilai purata harga, mengira naik turun, dan kemudian menilai arah trend. Lihat lebih banyak apabila harga menembusi tren naik, lihat lebih sedikit apabila harga menembusi tren turun.

Oleh itu, strategi ini menggabungkan penunjuk ATR dan penunjuk ADX, dengan menyesuaikan parameter ATR secara dinamik, dapat menangkap trend yang lebih baik untuk berdagang.

Analisis kelebihan

Strategi ini mempunyai beberapa kelebihan yang jelas:

  1. Mampu menyesuaikan parameter secara dinamik untuk menangkap trend dengan lebih baik
  2. Kaedah ini boleh digunakan untuk menilai nilai saham yang lebih komprehensif dengan menggabungkan ATR dan ADX.
  3. Pengunduran dijangka dikawal
  4. Proses pelaksanaan lebih mudah dan mudah difahami

Oleh itu, ia adalah strategi trend tracking yang sangat berguna, dan kawalan penarikan baliknya sangat baik dan sangat disyorkan.

Analisis risiko

Strategi ini mempunyai beberapa risiko:

  1. Indeks ADX terlewat, mungkin terlepas titik perubahan trend
  2. ATR yang dipilih dengan salah boleh menyebabkan keuntungan yang kurang atau kerugian yang berlebihan
  3. Kejadian mendadak menyebabkan keretakan di atas dan di bawah landasan yang menyebabkan kerugian.

Oleh itu, perhatian perlu diberikan kepada pengoptimuman parameter dan kawalan risiko. Selain itu, peristiwa Black Swan juga akan memberi kesan besar kepada strategi.

Arah pengoptimuman

Strategi ini boleh dioptimumkan dalam beberapa arah:

  1. Mengoptimumkan parameter ATR dan ADX untuk menangkap trend dengan lebih baik
  2. Tambah pengesahan indikator lain untuk mengelakkan masalah ADX yang tertinggal
  3. Membina mekanisme hentian kerugian dinamik untuk mengawal kerugian tunggal
  4. Menyesuaikan pengurusan kedudukan, mengambil strategi yang berbeza dalam keadaan pasaran yang berbeza

Oleh itu, strategi ini masih mempunyai ruang yang besar untuk pengoptimuman, dan perlu untuk menyesuaikan parameter dan mekanisme untuk masalah ini.

ringkaskan

Strategi trend ATR-ADX yang beradaptasi sendiri sangat baik untuk keseluruhan V2, dengan menyesuaikan parameter ATR secara dinamik, dapat menangkap trend dengan baik; tetapi kita juga harus berhati-hati dengan kawalan risiko dan pengoptimuman strategi untuk mengelakkan kelewatan dan peningkatan kerugian. Secara keseluruhan, strategi ini patut dipelajari dan digunakan.

Kod 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