
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.
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.
Strategi ini mempunyai beberapa kelebihan yang jelas:
Oleh itu, ia adalah strategi trend tracking yang sangat berguna, dan kawalan penarikan baliknya sangat baik dan sangat disyorkan.
Strategi ini mempunyai beberapa risiko:
Oleh itu, perhatian perlu diberikan kepada pengoptimuman parameter dan kawalan risiko. Selain itu, peristiwa Black Swan juga akan memberi kesan besar kepada strategi.
Strategi ini boleh dioptimumkan dalam beberapa arah:
Oleh itu, strategi ini masih mempunyai ruang yang besar untuk pengoptimuman, dan perlu untuk menyesuaikan parameter dan mekanisme untuk masalah ini.
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.
/*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