একটি অভিযোজিত ATR-ADX ট্রেন্ড কৌশল V2

লেখক:চাওঝাং, তারিখ: ২০২৩-১২-০৫ ১৮ঃ০৮ঃ১৪
ট্যাগঃ

img

সারসংক্ষেপ

এটি একটি প্রবণতা অনুসরণকারী কৌশল যা এটিআর সূচক এবং এডিএক্স সূচককে একত্রিত করে। এটি আরও ভাল প্রবণতা ট্র্যাকিং অর্জনের জন্য বাজারের প্রবণতা অবস্থার অনুযায়ী গতিশীলভাবে এটিআর গুণক সামঞ্জস্য করে।

কৌশলগত যুক্তি

এই কৌশলটি মূলত ATR এবং ADX সূচকের উপর ভিত্তি করে।

প্রথমত, এটি ট্রু রেঞ্জ (এটিআর) এবং এডিএক্স গণনা করে। এটিআর বাজারের অস্থিরতা প্রতিফলিত করে যখন এডিএক্স প্রবণতার শক্তি বিচার করে।

দ্বিতীয়ত, এটি ADX সূচকের DI + এবং DI- এর মধ্যে পার্থক্য অনুযায়ী বর্তমান প্রবণতার দিক নির্ধারণ করে। যদি DI + DI- এর চেয়ে বেশি হয় তবে এটি একটি আপট্রেন্ড। যদি DI- DI + এর চেয়ে বেশি হয় তবে এটি একটি ডাউনট্রেন্ড।

তারপর, যখন ADX বৃদ্ধি পাচ্ছে, এটি একটি বৃহত্তর ATR গুণক (m1) ব্যবহার করে। যখন ADX হ্রাস পাচ্ছে, এটি গতিশীল সমন্বয় অর্জনের জন্য একটি ছোট ATR গুণক (m2) ব্যবহার করে। এটি কৌশলটির মূল।

অবশেষে, এটিআর এবং মূল্যের মাঝামাঝি পয়েন্টের সাথে মিলিত, এটি প্রবণতা দিক নির্ধারণের জন্য উপরের এবং নীচের ব্যান্ডগুলি গণনা করে। যখন দাম উপরের ব্যান্ডটি ভেঙে যায়, তখন এটি দীর্ঘ হয়। যখন দাম নিম্ন ব্যান্ডটি ভেঙে যায়, তখন এটি সংক্ষিপ্ত হয়।

সুতরাং কৌশলটি ATR এবং ADX অন্তর্ভুক্ত করে, এবং গতিশীলভাবে ATR পরামিতিগুলি সামঞ্জস্য করে, এটি ট্রেডিংয়ের জন্য প্রবণতা আরও ভালভাবে ক্যাপচার করতে পারে।

সুবিধা বিশ্লেষণ

এই কৌশলটির বেশ কয়েকটি সুস্পষ্ট সুবিধা রয়েছে:

  1. প্রবণতা ক্যাপচার করার জন্য গতিশীলভাবে পরামিতি সামঞ্জস্য করতে সক্ষম
  2. আরও বিস্তৃত রায়ের জন্য এটিআর এবং এডিএক্সকে একত্রিত করে
  3. নিয়ন্ত্রিত টান প্রত্যাশা করে
  4. সহজ বাস্তবায়ন এবং বোঝা সহজ

অতএব, এটি একটি ভাল ড্রাউনডাউন নিয়ন্ত্রণের সাথে কৌশল অনুসরণ করে একটি খুব বাস্তব প্রবণতা।

ঝুঁকি বিশ্লেষণ

এই কৌশলের কিছু ঝুঁকিও রয়েছে:

  1. এডিএক্সের ইস্যু পিছিয়ে আছে, প্রবণতা বিপরীত পয়েন্ট মিস করতে পারে
  2. ভুল ATR আকার নির্বাচন অপর্যাপ্ত লাভ বা অত্যধিক স্টপ লস হতে পারে
  3. ব্ল্যাক সোয়ান ইভেন্টের কারণে ব্যান্ডের বিরুদ্ধে দ্রুত ব্রেকআউট ক্ষতি হতে পারে

সুতরাং পরামিতি অপ্টিমাইজেশান এবং ঝুঁকি নিয়ন্ত্রণের দিকে মনোযোগ দিতে হবে। এছাড়াও, ব্ল্যাক সোয়ান ইভেন্টগুলি আরও বেশি প্রভাব ফেলতে পারে।

অপ্টিমাইজেশান নির্দেশাবলী

কৌশলটি নিম্নলিখিত দিকগুলিতে অপ্টিমাইজ করা যেতে পারেঃ

  1. আরও ভাল প্রবণতা ক্যাপচার করার জন্য ATR এবং ADX এর পরামিতিগুলি অপ্টিমাইজ করুন
  2. ADX বিলম্ব সমস্যা এড়ানোর জন্য নিশ্চিতকরণের জন্য অন্যান্য সূচক যোগ করুন
  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

আরো