एक अनुकूलित एटीआर-एडीएक्स ट्रेंड रणनीति V2

लेखक:चाओझांग, दिनांक: 2023-12-05 18:08:14
टैगः

img

अवलोकन

यह एक ट्रेंड फॉलो करने वाली रणनीति है जो एटीआर इंडिकेटर और एडीएक्स इंडिकेटर को जोड़ती है। यह बेहतर ट्रेंड ट्रैकिंग प्राप्त करने के लिए बाजार की ट्रेंड स्थितियों के अनुसार एटीआर गुणक को गतिशील रूप से समायोजित करती है।

रणनीति तर्क

यह रणनीति मुख्य रूप से एटीआर और एडीएक्स संकेतकों पर आधारित है।

सबसे पहले, यह True Range (ATR) और ADX की गणना करता है। ATR बाजार की अस्थिरता को दर्शाता है जबकि ADX प्रवृत्ति की ताकत का आकलन करता है।

दूसरा, यह ADX सूचक में DI+ और DI- के बीच अंतर के अनुसार वर्तमान प्रवृत्ति की दिशा निर्धारित करता है। यदि DI+ DI- से अधिक है, तो यह एक अपट्रेंड है। यदि DI- DI+ से अधिक है, तो यह एक डाउनट्रेंड है।

फिर, जब ADX बढ़ रहा है, तो यह एक बड़ा ATR गुणक (m1) का उपयोग करता है। जब ADX गिर रहा है, तो यह गतिशील समायोजन प्राप्त करने के लिए एक छोटे ATR गुणक (m2) का उपयोग करता है। यह रणनीति का मूल है।

अंत में, एटीआर और मूल्य के मध्य बिंदु के साथ संयुक्त, यह प्रवृत्ति की दिशा निर्धारित करने के लिए ऊपरी और निचले बैंड की गणना करता है। जब मूल्य ऊपरी बैंड को तोड़ता है, तो यह लंबा हो जाता है। जब मूल्य निचले बैंड को तोड़ता है, तो यह छोटा हो जाता है।

इसलिए रणनीति में एटीआर और एडीएक्स शामिल हैं, और एटीआर मापदंडों को गतिशील रूप से समायोजित करके, यह व्यापार के लिए रुझानों को बेहतर ढंग से पकड़ सकता है।

लाभ विश्लेषण

इस रणनीति के कई स्पष्ट फायदे हैंः

  1. प्रवृत्ति को बेहतर ढंग से पकड़ने के लिए पैरामीटर को गतिशील रूप से समायोजित करने में सक्षम
  2. अधिक व्यापक निर्णय के लिए एटीआर और एडीएक्स को जोड़ती है
  3. नियंत्रित निकासी की अपेक्षा करता है
  4. सरल कार्यान्वयन और समझने में आसान

इसलिए, यह एक बहुत ही व्यावहारिक प्रवृत्ति है, जो एक अच्छी ड्रॉडाउन नियंत्रण के साथ रणनीति का पालन करती है।

जोखिम विश्लेषण

इस रणनीति में कुछ जोखिम भी हैं:

  1. एडीएक्स के पास पिछड़े मुद्दे हैं, ट्रेंड रिवर्स पॉइंट को मिस कर सकते हैं
  2. गलत एटीआर आकार चयन से अपर्याप्त लाभ या अत्यधिक स्टॉप लॉस हो सकता है
  3. ब्लैक स्वान घटनाओं के कारण बैंडों के खिलाफ तेजी से ब्रेकआउट नुकसान का कारण बन सकता है

इसलिए पैरामीटर अनुकूलन और जोखिम नियंत्रण पर ध्यान देने की आवश्यकता है। इसके अलावा, ब्लैक स्वान घटनाओं का अधिक प्रभाव हो सकता है।

अनुकूलन दिशाएँ

इस रणनीति को निम्नलिखित पहलुओं में अनुकूलित किया जा सकता हैः

  1. बेहतर रुझान कैप्चर करने के लिए एटीआर और एडीएक्स के मापदंडों का अनुकूलन
  2. एडीएक्स विलंब के मुद्दों से बचने के लिए पुष्टि के लिए अन्य संकेतक जोड़ें
  3. एकल व्यापार हानि को नियंत्रित करने के लिए गतिशील स्टॉप लॉस तंत्र का निर्माण
  4. विभिन्न बाजार वातावरणों के लिए स्थिति आकार को समायोजित करें

इसलिए समस्याओं के अनुसार मापदंडों और तंत्रों को समायोजित करके अनुकूलन के लिए अभी भी बहुत जगह है।

निष्कर्ष

सामान्य तौर पर, यह अनुकूली एटीआर-एडीएक्स प्रवृत्ति रणनीति वी 2 बहुत अच्छा प्रदर्शन करती है। एटीआर मापदंडों को गतिशील रूप से समायोजित करके, यह प्रवृत्तियों को अच्छी तरह से पकड़ती है। इसके अलावा, एटीआर और एडीएक्स में दो संकेतकों को जोड़ने से यह अधिक मजबूत हो जाता है। लेकिन हमें अभी भी जोखिम नियंत्रण और अनुकूलन पर ध्यान देने की आवश्यकता है ताकि पिछड़ने और ओवरसाइज्ड नुकसान को रोका जा सके। कुल मिलाकर, रणनीति सीखने और लागू करने के लायक है।


/*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

अधिक