كيف يتم حساب ADX؟
الإجابة المباشرة: حساب ADX في سلسلة واحدة
يُبنى ADX (Average Directional Index) على مراحل من تغيّرات السعر: (1) احسب حركة الاتجاه والمدى الحقيقي لكل فترة، (2) قم بتنعيم تلك السلاسل، (3) احسب مؤشرات الاتجاه (+DI و−DI)، (4) احسب DX من العلاقة بينهما، و(5) قم بتنعيم DX للحصول على ADX.
يستخدم تعريف شائع ومعياري طول نظرة يُكتب غالبًا كـ n (غالبًا 14، لكن الطريقة تدعم قيمًا أخرى). تعتمد قيم ADX على n المختار وعلى قاعدة التنعيم المستخدمة في التطبيق.
الآلية: التعريفات والصيغ خطوة بخطوة
لوصف الحساب دون افتراض بيانات لحظية، افترض أن لديك سلسلة من الشموع/الأشرطة مرتبة حسب الزمن. لكل شريط t، تحتاج إلى القمة (high) والقاع (low) والإغلاق (close) (أو على الأقل high/low/close كما هو مُعرّف أدناه).
1) احسب المدى الحقيقي (TR)
يلتقط المدى الحقيقي مقدار الحركة، بما في ذلك الفجوات. بالنسبة للشريط t مقارنةً بـ t−1:
- TR(t) = max( High(t) − Low(t), |High(t) − Close(t−1)|, |Low(t) − Close(t−1)| )
يجعل هذا التعريف TR أكبر عندما يكون نطاق السعر الحالي واسعًا أو عندما تقفز الأسعار عبر إغلاق الفترة السابقة.
2) احسب حركة الاتجاه: +DM و−DM
تفصل حركة الاتجاه بين التحركات الصعودية والهبوطية:
- UpMove(t) = High(t) − High(t−1)
- DownMove(t) = Low(t−1) − Low(t)
قاعدة شائعة هي:
- +DM(t) = UpMove(t) إذا كان UpMove(t) > DownMove(t) و UpMove(t) > 0، وإلا 0
- −DM(t) = DownMove(t) إذا كان DownMove(t) > UpMove(t) و DownMove(t) > 0، وإلا 0
يضمن هيكل “إما/أو” هذا أن الاتجاه المسيطر فقط هو الذي يساهم في كل خطوة.
3) نعّم TR و+DM و−DM
لا يتم حساب ADX من TR وDM الخام لكل شريط؛ بل يستخدم خطوة تنعيم. تستخدم العديد من التطبيقات تنعيمًا بأسلوب Wilder (وهو نهج شائع)، وهو ما يعادل متوسطًا متحركًا تراجعيًا (recursive) محددًا.
لتكن SmoothedTR(t) هي قيمة TR بعد التنعيم، وبالمثل Smoothed+DM(t) و Smoothed−DM(t).
وبالتنعيم بأسلوب Wilder للفترة n، غالبًا ما تبدو المعادلة التراجعية كما يلي:
- SmoothedTR(t) = SmoothedTR(t−1) − (SmoothedTR(t−1) / n) + TR(t)
- Smoothed+DM(t) = Smoothed+DM(t−1) − (Smoothed+DM(t−1) / n) + +DM(t)
- Smoothed−DM(t) = Smoothed−DM(t−1) − (Smoothed−DM(t−1) / n) + −DM(t)
تؤثر عملية البدء (initialization) على النتيجة: عادةً ما تبدأ التطبيقات سلسلة القيم المُعوّمة بعد عدد كافٍ من الأشرطة لتأسيس مجموع ابتدائي أو متوسط عبر n فترات.
4) احسب +DI و−DI
تحوّل مؤشرات الاتجاه حركة الاتجاه المُعوّمة إلى قيم نسبية إلى TR المُعوّمة:
- +DI(t) = 100 × Smoothed+DM(t) / SmoothedTR(t)
- −DI(t) = 100 × Smoothed−DM(t) / SmoothedTR(t)
5) احسب DX (Directional Index)
يصف DX مدى سيطرة اتجاه واحد على الآخر:
- DX(t) = 100 × |+DI(t) − −DI(t)| / (+DI(t) + −DI(t))
إذا كانت +DI(t) + −DI(t) تساوي صفرًا (وهو ممكن مع حركة مسطحة أو بدون اتجاه ومع بعض شروط البيانات/البداية)، فيجب على التطبيق التعامل مع قسمة على صفر.
6) نعّم DX للحصول على ADX
في النهاية، يكون ADX متوسطًا متحركًا مُعوّمًا لـ DX عبر الفترة n (وبشكل شائع أيضًا بأسلوب Wilder):
- ADX(t) = متوسط مُعوّم لـ DX(t) عبر الطول المختار n
عمليًا، يتم إنتاج أول قيمة ADX بعد منطقة “تهيئة” (warm-up) (غالبًا بعد تجميع عدد كافٍ من نقاط DX). قد تختار منصات مختلفة قواعد بدء (initialization) مختلفة قليلًا، مما يؤدي إلى اختلافات بسيطة.
دليل عبر مثال صغير مُطبّق (مع افتراضات واضحة)
بدون بيانات لحظية، سيكون المثال العددي الكامل اعتباطيًا. بدلًا من ذلك، إليك قالب حساب مختصر يمكنك تطبيقه على أشرطة OHLC الخاصة بك.
افترض أن لديك أشرطة متتالية وتختار فترة n. لكل شريط بدءًا من الشريط الثاني (لأن t−1 مطلوب):
- احسب TR(t) من High(t) وLow(t) وClose(t−1).
- احسب +DM(t) و −DM(t) من فروقات القمم والقيعان.
- كوّن القيم المُعوّمة SmoothedTR(t) و Smoothed+DM(t) و Smoothed−DM(t) باستخدام قاعدة التنعيم المختارة والتهيئة الصحيحة.
- احسب +DI(t) و −DI(t).
- احسب DX(t).
- نعّم DX(t) لتكوين ADX(t).
افتراض المادة الذي يجب ذكره عند التحقق بشكل مستقل: مصدر بياناتك (قيم OHLC بالضبط)، و n التي اخترتها، وقاعدة التنعيم يجب أن تتطابق مع التطبيق الذي تتحقق منه. حتى لو كانت الصيغ “قياسية”، قد تختلف تفاصيل التهيئة والتنعيم.
إذا أردت التأكد من أن نظامين يحسبان نفس ADX، صدّر نفس سلسلة OHLC، وطبّق نفس n، واستخدم نفس تعريفات TR/DM، ثم تحقّق من السلاسل الوسيطة (+DM/−DM و +DI/−DI و DX) قبل مقارنة ADX النهائي.
القيود وأوضاع الفشل التي يجب أن تأخذها في الحسبان
غالبًا ما يُوصف ADX كمقياس “لقوة الاتجاه”، لكن هذا التفسير له حدود. تأتي المشكلات الرئيسية من حساسية البيانات ومن كيفية سلوك حركة الاتجاه.
1) يعتمد ADX على التنعيم والتهيئة
لأن ADX يستخدم TR/DM مُعوّمين وDX مُعوّم، فقد تختلف النتائج عندما:
- تغيّر n،
- تغيّر طريقة التنعيم (أو اصطلاح التهيئة)، أو
- تتعامل منصتك مع الحالات الحدّية بشكل مختلف (مثل الأشرطة المبكرة، أو القسمة على صفر).
هذه نقطة فشل رئيسية عند مقارنة الأرقام بين مزودين مختلفين.
2) القيم المرتفعة لا تضمن أفضلية اتجاهية
يُحسب ADX من مقدار سيطرة اتجاه على آخر، وليس من ضمان اتجاه بعينه. قد يكون مرتفعًا نسبيًا عندما يسيطر اتجاه واحد باستمرار حتى لو تغيّر السياق العام لاحقًا.
تتضح أهمية ذلك لأن التحول اللاحق في حركة الاتجاه قد يجعل سلوك ADX السابق أقل إفادة.
3) الأسواق المتقلبة أو التي تتحرك ضمن نطاق قد تنتج قراءات قوة مضللة
قد تظل تعريفات حركة الاتجاه تُنتج سيطرة متكررة في تحركات صغيرة وغير منتظمة. في بعض ظروف “جانبية لكن متقلبة”، قد يرتفع ADX حتى لو لم يكن هناك هيكل اتجاهي مستدام ومستقر.
وهذا يعني أن ADX يُعامل الأفضل كمؤشر لخصائص الحركة، وليس كقاعدة قرار مستقلة.
التحقق: كيف تتحقق بشكل مستقل من حساب ADX الخاص بك
للتحقق من ADX بنفسك باستخدام سلسلة الصيغ أعلاه:
- اختر n محددًا وسجّله.
- استخدم مجموعة بيانات OHLC واحدة متسقة وتأكد من أن High وLow وClose مصطفّة حسب الزمن.
- احسب TR و+DM و−DM بدقة باستخدام نفس منطق الشرط.
- طبّق قاعدة التنعيم والتهيئة نفسها المستخدمة في مرجعك.
- احسب +DI و−DI وDX، ثم نعّم DX إلى ADX.
- قارن المخرجات الوسيطة أولًا؛ إذا تطابقت، فمن المرجح جدًا أن يكون ADX النهائي متسقًا.