← العودة إلى قائمة المقالات
July 12, 2026
5 دقائق للقراءة

DCC-GARCH: ارتباطات ديناميكية للأزواج ومخاطر المحفظة

#volatility
#GARCH
#DCC
#correlation
#portfolio
#pairs-trading
#crypto

اسأل معظم مكاتب تداول العملات الرقمية عن الارتباط بين BTC و ETH وستحصل على رقم واحد — 0.8، ربما 0.75 — محسوب على نافذة زمنية لا يتذكر أحد كيف اختيرت. هذا الرقم كذبة، أو على الأقل تبسيط خطير. الارتباط العيني هو متوسط على فترة كانت خلالها بنية الاعتماد الحقيقية تتحرك باستمرار. في الأسواق الهادئة يبتعد BTC و ETH عن بعضهما بما يكفي لجعل زوج محايد السوق يبدو جذابا. وفي موجة تصفيات، يرتبطان ببعضهما وبكل شيء آخر، ويتبخر التنويع الذي دفعت ثمنه في اللحظة نفسها التي تحتاجه فيها.

هذا ليس تأثيرا خفيا. تفحص أي موجة هبوط من 2022 — انهيار LUNA في مايو، تصفية 3AC في يونيو، انهيار FTX في نوفمبر — وسترى متوسط الارتباط الثنائي عبر أفضل 20 عملة يتحرك من نطاق 0.4-0.6 نحو أكثر من 0.9 خلال أيام. الارتباط ليس ثابتا يُقدَّر أحيانا بشكل سيئ؛ إنه سلسلة زمنية لها ديناميكياتها الخاصة، وتكتلها الخاص، وأنظمتها الخاصة. معاملته كعدد قياسي هو المكافئ متعدد المتغيرات لافتراض تقلب ثابت — وهو خطأ أمضينا بالفعل الجزء الأول من هذه السلسلة في تفكيكه لأصل واحد.

هذا المقال هو الجزء الثالث من سلسلة تقلب مكونة من أربعة أجزاء. الجزء الأول بنى نموذج GARCH(1,1) أحادي المتغير باستخدام مكتبة arch وأظهر كيف يتكتل التقلب ويعود إلى المتوسط. الجزء الثاني أضاف عدم التماثل (GJR-GARCH، EGARCH) ومبتكرات ستودنت-t لالتقاط تأثير الرافعة المالية والذيول السمينة. هنا ننتقل إلى تعدد المتغيرات: نموذج مصفوفة التغاير الشرطية الكاملة HtH_t أثناء تطورها، باستخدام نموذج الارتباط الشرطي الديناميكي (DCC) لإنجل. هذا يمنحنا شيئين لا يستطيع الارتباط العددي تقديمهما أبدا — نسبة تحوط ديناميكية لتداول الأزواج، وتباين محفظة صادق ومتغير عبر الزمن للتخصيص القائم على المخاطر. الجزء الرابع يختتم السلسلة باختبار خلفي مستهدِف للتقلب يربط التنبؤات أحادية ومتعددة المتغيرات بقاعدة تحديد حجم المراكز.

نفترض أنك قرأت الجزأين الأول والثاني، لذا لن نعيد اشتقاق GARCH أحادي المتغير. إذا كنت تريد سلوك الذيل المشترك — احتمال أن يخترق أصلان الكمية 1% معا — فهذا سؤال يخص الكوبولا، وقد تناولناه في نماذج الكوبولا للمخاطر المشتركة. نموذج DCC والكوبولا متكاملان: الكوبولا تمنحك بنية اعتماد ذيلي ثابتة لكن مرنة، بينما يمنحك DCC سلسلة زمنية قابلة للمعالجة لمصفوفة الارتباط بأكملها. هذا المقال يتناول الحالة الثانية.

لماذا ينهار الارتباط الثابت في العملات الرقمية

قبل الخوض في الآلية، لنكن دقيقين حول ما يفشل. الارتباط العيني الواحد ρ^\hat{\rho} على نافذة [tw,t][t-w, t] يقدّر

ρ^ij=s(ri,srˉi)(rj,srˉj)s(ri,srˉi)2s(rj,srˉj)2\hat{\rho}_{ij} = \frac{\sum_{s} (r_{i,s} - \bar{r}_i)(r_{j,s} - \bar{r}_j)}{\sqrt{\sum_s (r_{i,s}-\bar{r}_i)^2}\sqrt{\sum_s (r_{j,s}-\bar{r}_j)^2}}

يحمل هذا ثلاثة افتراضات ضمنية، جميعها خاطئة بالنسبة للعملات الرقمية:

  1. ثبات الاعتماد. النافذة تملك قيمة واحدة حقيقية لـ ρ\rho. في الواقع للاعتماد أنظمة — نظام سوق هادئ قرب 0.5 ونظام ضغط قرب 0.95 — و ρ^\hat{\rho} يمزجها في وسط بلا معنى.
  2. تقلب هامشي ثابت. ارتباط بيرسون هو تغاير مُطبَّع. إذا كانت σi,t\sigma_{i,t} و σj,t\sigma_{j,t} نفسها متحركة (وهي كذلك — هذه هي الفرضية الكاملة للجزأين الأول والثاني)، فحتى التغاير الثابت ينتج ارتباطا متغيرا عبر الزمن، والعكس صحيح. لا يمكنك فصل الاثنين دون نموذج تقلب في الأساس.
  3. التماثل عبر اتجاه السوق. يرتفع الارتباط في موجات الهبوط أكثر منه في الارتفاعات. هذا هو النسيب متعدد المتغيرات لتأثير الرافعة المالية. لا تستطيع نافذة متحركة التعبير عن ذلك دون أن تصبح قصيرة جدا لدرجة أنها مجرد ضوضاء صرفة.

إصلاح النافذة المتحركة — إعادة حساب ρ^\hat{\rho} على آخر 30 أو 60 يوما — يستبدل مشكلة بأخرى. النوافذ القصيرة سريعة الاستجابة لكنها صاخبة ومتأخرة عن الانكسار الفعلي؛ النوافذ الطويلة مستقرة لكنها قديمة. والأسوأ من ذلك أن مصفوفة الارتباط المتحركة عبر dd من الأصول ليست مضمونة البقاء شبه معرَّفة موجبة بمجرد أن تبدأ في انكماشها أو ترقيعها، ما يكسر كل مُحسِّن لاحق. نريد نموذجا (أ) مدفوعا بعملية تقلب سليمة لكل أصل، (ب) ينتج مصفوفة ارتباط صالحة في كل خطوة بالبناء، و(ج) له معالم يمكننا تقديرها بالإمكان الأعظم بدلا من اختيار طول نافذة عشوائيا. هذا النموذج هو DCC-GARCH.

المسألة متعددة المتغيرات: مصفوفة التغاير الشرطية

لتكن rtRdr_t \in \mathbb{R}^d متجه العوائد لـ dd من الأصول عند الزمن tt، بمتوسط شرطي μt\mu_t (غالبا مجرد ثابت أو حد AR صغير) وبقايا ϵt=rtμt\epsilon_t = r_t - \mu_t. نفترض

ϵtFt1D(0,Ht)\epsilon_t \mid \mathcal{F}_{t-1} \sim \mathcal{D}(0, H_t)

حيث HtH_t هي مصفوفة التغاير الشرطية ذات الأبعاد d×dd \times d عند مجموعة المعلومات Ft1\mathcal{F}_{t-1}، و D\mathcal{D} هو توزيع شرطي ما (غاوسي أو، الأفضل للعملات الرقمية، ستودنت-t متعدد المتغيرات). كل شيء في نمذجة التقلب متعدد المتغيرات هو إجابة مختلفة لسؤال واحد: كيف تُعامِل ديناميكيات HtH_t بحيث تبقى متماثلة موجبة معرَّفة في كل خطوة دون انفجار في عدد المعالم؟

إجابتان كلاسيكيتان توضحان صعوبة المسألة.

VECH

نموذج VECH (بولرسليف، إنجل، وولدريدج 1988) يكتب نصف-المتجهة لـ HtH_t كدالة خطية للبقايا التربيعية السابقة والتغايرات السابقة:

vech(Ht)=c+Avech(ϵt1ϵt1)+Bvech(Ht1)\mathrm{vech}(H_t) = c + A\,\mathrm{vech}(\epsilon_{t-1}\epsilon_{t-1}') + B\,\mathrm{vech}(H_{t-1})

حيث vech()\mathrm{vech}(\cdot) تكدس المثلث السفلي لمصفوفة متماثلة في متجه طوله d(d+1)/2d(d+1)/2. هذا عام إلى أقصى حد — كل تباين وتغاير يعتمد على كل تباين وتغاير سابق — وعديم الفائدة إلى أقصى حد بعد d=3d=3. عند dd من الأصول، AA و BB كل منهما بأبعاد d(d+1)2×d(d+1)2\frac{d(d+1)}{2} \times \frac{d(d+1)}{2}. عند d=5d=5 هذا يعني مصفوفتين بأبعاد 15×1515\times 15، أي حوالي 450 معلما، بالإضافة إلى قيود إيجابية التعريف يصعب حتى صياغتها. سطح دالة الإمكان مستنقع حقيقي.

BEKK

نموذج BEKK (إنجل وكرونر 1995) يضمن إيجابية التعريف بالبناء باستخدام صيغة تربيعية:

Ht=CC+Aϵt1ϵt1A+BHt1BH_t = C'C + A'\,\epsilon_{t-1}\epsilon_{t-1}'\,A + B'\,H_{t-1}\,B

حيث CC مثلثية علوية. لأن كل حد صيغة تربيعية، فإن Ht0H_t \succ 0 تلقائيا طالما CC0C'C \succ 0. نموذج BEKK أكثر اقتصادا من VECH لكنه لا يزال يتوسع بمعدل O(d2)O(d^2) من المعالم — مصفوفتا AA و BB كل منهما d×dd \times d. عند d=10d=10 أنت تقدّر نحو 200+ معلم معا بالإمكان الأعظم، على بيانات عملات رقمية يومية صاخبة، دون ضمان أن يتقارب المُحسِّن لأي شيء ذي معنى. عمليا، يقتصر BEKK الكامل على d4d \le 4، وحتى عندئذ يستخدم الناس القيود "القُطرية" أو "العددية" التي تتخلى عن معظم الديناميكيات المتقاطعة.

هذه هي لعنة الأبعاد لنموذج GARCH متعدد المتغيرات: عدد المعالم ينمو تربيعيا، لكن كمية المعلومات في البيانات لا تنمو كذلك. تنفد درجات الحرية لديك قبل أن ينفد عدد الأصول التي تهتم بها بوقت طويل. أي محفظة عملات رقمية بها 10-30 عملة خارج متناول VECH أو BEKK تماما.

المخرج، بفضل إنجل، هو التوقف عن محاولة نمذجة HtH_t مباشرة، بل تفكيكها إلى أجزاء نعرف بالفعل كيفية تقديرها بتكلفة زهيدة.

نموذج DCC لإنجل (2002): التفكيك على خطوتين

كان نموذج الارتباط الشرطي الثابت (CCC) لبولرسليف (1990) أول تفكيك اقتصادي. يكتب

Ht=DtRDtH_t = D_t\, R\, D_t

حيث Dt=diag(σ1,t,,σd,t)D_t = \mathrm{diag}(\sigma_{1,t}, \ldots, \sigma_{d,t}) هي المصفوفة القطرية للانحرافات المعيارية الشرطية — نموذج GARCH أحادي المتغير واحد لكل أصل — و RR مصفوفة ارتباط ثابتة. هذا تبسيط ضخم: تُقدَّر dd من نماذج GARCH أحادية المتغير مستقلة، ثم تُقدَّر مصفوفة ارتباط عيني واحدة للبقايا المعيرة. إيجابية التعريف تلقائية طالما أن RR مصفوفة ارتباط صالحة وكل σi,t>0\sigma_{i,t} > 0.

مشكلة CCC موجودة في الاسم نفسه — الارتباط ثابت، وهذا بالضبط الافتراض الذي بدأنا هذا المقال برفضه. نموذج الارتباط الشرطي الديناميكي لإنجل (2002) يحافظ على تفكيك CCC الجميل لكنه يترك مصفوفة الارتباط تتنفس:

Ht=DtRtDtH_t = D_t\, R_t\, D_t

الآن RtR_t متغيرة عبر الزمن. العبقرية هي أن التقلبات والارتباطات تُقدَّر في خطوتين منفصلتين، بحيث لا نواجه أبدا التحسين المشترك الكامل بمعدل O(d2)O(d^2).

الخطوة 1: GARCH أحادي المتغير لكل أصل

لكل أصل ii، نلائم نموذج GARCH أحادي المتغير تماما كما في الجزأين الأول والثاني — GARCH(1,1)، أو GJR-GARCH، أو EGARCH بمبتكرات ستودنت-t، أيا كان الأنسب لتلك السلسلة. هذا يعطينا التباينات الشرطية σi,t2\sigma_{i,t}^2 ومن ثم Dt=diag(σ1,t,,σd,t)D_t = \mathrm{diag}(\sigma_{1,t}, \ldots, \sigma_{d,t}).

من النماذج المُلائَمة نستخرج البقايا المعيرة:

zi,t=ϵi,tσi,tz_{i,t} = \frac{\epsilon_{i,t}}{\sigma_{i,t}}

بالبناء، كل zi,tz_{i,t} لها تباين شرطي وحدوي (تقريبا). نكدسها في متجه zt=(z1,t,,zd,t)z_t = (z_{1,t}, \ldots, z_{d,t})'. هذه البقايا المعيرة هي المادة الخام لخطوة الارتباط — تمت إزالة ديناميكيات تقلبها الفردية، فأي تلازم متبقٍ هو اعتماد صرف، لا أثر تقلب. (هذا نفس منطق أسلوب PIT الذي يستخدمه مقال الكوبولا قبل ملاءمة الهوامش؛ هنا نتوقف عند التعيير بدلا من الذهاب حتى النهاية إلى التوزيع المنتظم.)

الخطوة 2: تكرار الارتباط لـ DCC

نُنمذج عملية مساعدة QtQ_t، مصفوفة متماثلة موجبة معرَّفة بأبعاد d×dd \times d، بتكرار شبيه بـ GARCH مدفوع بحاصل الضرب الخارجي للبقايا المعيرة:

Qt=(1ab)Qˉ+azt1zt1+bQt1Q_t = (1 - a - b)\,\bar{Q} + a\, z_{t-1} z_{t-1}' + b\, Q_{t-1}

حيث:

  • Qˉ=1Tt=1Tztzt\bar{Q} = \frac{1}{T}\sum_{t=1}^{T} z_t z_t' هي مصفوفة الارتباط غير الشرطية للبقايا المعيرة (هذا هو استهداف الارتباط — المزيد عنه أدناه)،
  • a0a \ge 0 يحكم مدى قوة تأثير صدمة اليوم zt1zt1z_{t-1}z_{t-1}' على الارتباط،
  • b0b \ge 0 يحكم الاستمرارية — مقدار ما يُرحَّل من Qt1Q_{t-1} الأمس،
  • وقيد العودة إلى المتوسط هو a+b<1a + b < 1 (مع a,b>0a, b > 0)، وهو مماثل مباشرة لـ α+β<1\alpha + \beta < 1 في GARCH أحادي المتغير.

لاحظ أن البنية مطابقة لتكرار GARCH(1,1) عددي، لكن على مصفوفات: مرساة طويلة الأجل Qˉ\bar{Q}، وحد صدمة، وحد استمرارية. لأنه تركيبة محدبة من مصفوفات شبه معرَّفة موجبة (Qˉ\bar{Q}، وحاصل الضرب الخارجي أحادي الرتبة، و Qt1Q_{t-1} السابقة)، تبقى QtQ_t موجبة معرَّفة طالما Qˉ0\bar{Q} \succ 0 والأوزان غير سالبة. هذا ما يمنحنا مصفوفات تغاير صالحة مضمونة مجانا.

QtQ_t تقريبا مصفوفة ارتباط لكن ليست تماما كذلك — قطرها ليس بالضبط 1. لذا نطبّعها:

Rt=(diag(Qt))1/2Qt(diag(Qt))1/2R_t = \left(\mathrm{diag}(Q_t)\right)^{-1/2}\, Q_t\, \left(\mathrm{diag}(Q_t)\right)^{-1/2}

عنصريا، الارتباط الشرطي بين الأصلين ii و jj هو

ρij,t=qij,tqii,tqjj,t\rho_{ij,t} = \frac{q_{ij,t}}{\sqrt{q_{ii,t}\, q_{jj,t}}}

هذه RtR_t مصفوفة ارتباط سليمة — قطر وحدوي، عناصر غير قطرية في [1,1][-1,1]، موجبة معرَّفة — في كل خطوة زمنية، بالبناء. نعيد تجميع مصفوفة التغاير الشرطية الكاملة:

Ht=DtRtDt,hij,t=ρij,tσi,tσj,tH_t = D_t\, R_t\, D_t, \qquad h_{ij,t} = \rho_{ij,t}\,\sigma_{i,t}\,\sigma_{j,t}

تلك الصيغة العنصرية الأخيرة هي التي ستستخدمها باستمرار: التغاير الشرطي لأصلين هو ارتباطهما الديناميكي مضروبا في كل من تقلبيهما الديناميكيين. كل مكون في الطرف الأيمن متغير عبر الزمن ويأتي من نموذج يمكنك تقديره.

النموذج بأكمله يحتوي فقط على معلمي ارتباط اثنين، aa و bb، بغض النظر عما إذا كان d=2d = 2 أو d=50d = 50. جانب التقلب يتوسع خطيا (نموذج GARCH أحادي المتغير واحد لكل أصل، كل منها بنحو 4-5 معالم، جميعها تُلائَم بشكل مستقل وقابل للتوازي بسهولة). هذا سبب توسع DCC حيث لا يستطيع BEKK و VECH: لعنة الأبعاد محصورة في Qˉ\bar{Q}، التي تُستهدَف (تُدخَل كتقدير عيني) بدلا من أن تُحسَّن.

القيد العددي وتكلفته

معلما a,ba, b العدديان يعنيان أن كل زوج من الأصول يشترك في نفس ديناميكيات الارتباط — نفس سرعة التكيف ونفس الاستمرارية. ارتباط BTC-ETH وارتباط DOGE-SHIB يتحركان بنفس الإيقاع رغم اختلاف اقتصادياتهما. هذا ثمن قابلية المعالجة، وعادة ما يكون ثمنا مقبولا. التعميمات (DCC المُعمَّم بمصفوفتي A,BA, B؛ DCC غير المتماثل لكابييلو-إنجل-شيبرد) تخفف هذا القيد على حساب المعالم واستقرار التقدير. نذكر aDCC أدناه.

دالة شبه الإمكان اللوغاريتمي لـ DCC

لتقدير aa و bb نحتاج دالة الإمكان. نتيجة إنجل الأساسية هي أن دالة الإمكان اللوغاريتمي الغاوسية تنفصل إلى جزء تقلب وجزء ارتباط، وهذا ما يبرر مُقدِّر الخطوتين. بافتراض ϵtFt1N(0,Ht)\epsilon_t \mid \mathcal{F}_{t-1} \sim \mathcal{N}(0, H_t)، مساهمة دالة الإمكان اللوغاريتمي عند الزمن tt هي

t=12(dlog(2π)+logHt+ϵtHt1ϵt)\ell_t = -\frac{1}{2}\left( d\log(2\pi) + \log|H_t| + \epsilon_t' H_t^{-1} \epsilon_t \right)

نعوّض Ht=DtRtDtH_t = D_t R_t D_t. عندئذ Ht=Dt2Rt|H_t| = |D_t|^2 |R_t| و Ht1=Dt1Rt1Dt1H_t^{-1} = D_t^{-1} R_t^{-1} D_t^{-1}، وباستخدام zt=Dt1ϵtz_t = D_t^{-1}\epsilon_t:

t=12(dlog(2π)+2logDt+logRt+ztRt1zt)\ell_t = -\frac{1}{2}\left( d\log(2\pi) + 2\log|D_t| + \log|R_t| + z_t' R_t^{-1} z_t \right)

الآن نفصلها بإضافة وطرح ztztz_t'z_t:

t=12(dlog(2π)+2logDt+ϵtDt2ϵt)جزء التقلب   tV  12(logRt+ztRt1ztztzt)جزء الارتباط   tC\ell_t = \underbrace{-\frac{1}{2}\left( d\log(2\pi) + 2\log|D_t| + \epsilon_t' D_t^{-2}\epsilon_t \right)}_{\text{جزء التقلب }\;\ell_t^{V}} \;\underbrace{-\frac{1}{2}\left( \log|R_t| + z_t' R_t^{-1} z_t - z_t' z_t \right)}_{\text{جزء الارتباط }\;\ell_t^{C}}

جزء التقلب tV\ell_t^V يعتمد فقط على معالم GARCH أحادية المتغير (عبر DtD_t) — تعظيمه هو بالضبط ملاءمة dd من نماذج GARCH أحادية المتغير المستقلة، وهو ما فعلناه في الخطوة 1. جزء الارتباط tC\ell_t^C يعتمد على aa و bb (عبر RtR_tبمعلومية البقايا المعيرة من الخطوة 1. لذا في الخطوة 2 نعظّم فقط

LC(a,b)=12t=1T(logRt+ztRt1zt)\mathcal{L}^C(a, b) = -\frac{1}{2}\sum_{t=1}^{T}\left( \log|R_t| + z_t' R_t^{-1} z_t \right)

(حد ztztz_t'z_t لا يعتمد على a,ba, b، لذا نتخلص منه). هذا تحسين بمعلمين اثنين بغض النظر عن عدد الأصول — هذا هو صلب الموضوع. يُسمّى دالة إمكان شبه لأن مُقدِّر الخطوتين متسق لكن غير كامل الكفاءة؛ الأخطاء المعيارية تحتاج تصحيحا (إنجل وشيبرد 2001)، لكن لتوليد الإشارة، التقديرات النقطية هي ما يهم.

بالنسبة للعملات الرقمية، مبتكرات غاوسية تُقلِّل من تقدير مخاطر الذيل. استبدالها بدالة إمكان ستودنت-t متعددة المتغيرات هو تعديل مباشر لـ t\ell_t (استبدال النواة الغاوسية بكثافة t متعددة المتغيرات وإضافة معلم درجات حرية ν\nu). نبقي على شبه الإمكان الغاوسي في المُقدِّر أدناه للوضوح ونشير أين يدخل ν\nu — التعيير من الجزأين الأول والثاني استخدم بالفعل مبتكرات t على الهوامش، ما يلتقط معظم فائدة الذيل.

التطبيق بلغة بايثون

حقيقة صريحة ومهمة: مكتبة arch لا تقوم بنمذجة GARCH متعددة المتغيرات أو DCC. مكتبة arch محرك أحادي المتغير رائع (نعتمد عليها لهذا بالضبط)، لكن لا يوجد فيها dcc_model. خياراتك العملية هي:

  1. بناء DCC بنفسك فوق arch — ملاءمة النماذج أحادية المتغير بـ arch، استخراج البقايا المعيرة، تطبيق تكرار QQ ودالة شبه الإمكان اللوغاريتمي للارتباط في NumPy/SciPy، وتحسين العدديين. هذا ما نفعله أدناه. حوالي 60 سطرا وشفاف تماما.
  2. حزمة mgarch من PyPI — تطبيق DCC-GARCH خفيف بلغة بايثون خالصة. مناسب لملاءمة سريعة، أقل مرونة إذا أردت هوامش GJR أو مبتكرات t مضبوطة بدقة.
  3. حزمة rmgarch من R (أليكسيوس غالانوس) — التطبيق المرجعي. dccspec / dccfit تدعم DCC، وaDCC، وGARCH-كوبولا، وستودنت-t، وأخطاء معيارية سليمة. إذا كنت تجري بحثا جادا في التقلب متعدد المتغيرات، فإن rmgarch (مستدعاة من بايثون عبر rpy2 إن اضطررت) هي المعيار الذهبي.

نبني الخيار 1 لأنه يجعل كل جزء متحرك واضحا ويعيد استخدام المهارات أحادية المتغير من الجزأين الأول والثاني.

الخطوة 1: ملاءمة هوامش GARCH أحادية المتغير بـ arch

import numpy as np
import pandas as pd
from arch import arch_model
from scipy.optimize import minimize

def fetch_returns(symbols, start="2022-01-01", end="2025-12-31"):
    """
    Daily log returns for a list of crypto symbols.
    Replace with your data source (ccxt for 24/7 exchange data,
    yfinance for a quick sketch).
    """
    import yfinance as yf
    px = yf.download([f"{s}-USD" for s in symbols],
                     start=start, end=end)["Close"]
    px.columns = symbols
    rets = np.log(px / px.shift(1)).dropna()
    return rets

symbols = ["BTC", "ETH", "SOL", "BNB"]
returns = fetch_returns(symbols)

def fit_univariate(series, dist="t"):
    """
    Fit GJR-GARCH(1,1) with Student-t innovations (Part 2 model).
    Returns the fitted result and the *scaled* series it was fit on.
    We scale returns by 100 for the optimizer's numerical health,
    exactly as in Parts 1 and 2.
    """
    scaled = series * 100.0
    model = arch_model(scaled, mean="Constant",
                       vol="GARCH", p=1, o=1, q=1, dist=dist)
    res = model.fit(disp="off")
    return res

fits = {s: fit_univariate(returns[s]) for s in symbols}

Z = pd.DataFrame({s: fits[s].std_resid for s in symbols}).dropna()

Sigma = pd.DataFrame({s: fits[s].conditional_volatility
                      for s in symbols}).loc[Z.index]

print(Z.describe())

فحص سلامة سريع على البقايا المعيرة أمر مهم. إذا كان لأي عمود انحراف معياري بعيد عن 1، أو ارتباطا ذاتيا متبقيا قويا في مربعه (اختبار Ljung-Box على zi,t2z_{i,t}^2)، فإن الهامش أحادي المتغير غير محدد جيدا وستورث خطوة DCC هذا الخطأ. أصلح الهامش أولا — لهذا كان الجزء الثاني.

الخطوة 2: تكرار DCC ودالة شبه الإمكان اللوغاريتمي

def dcc_negloglik(params, Z):
    """
    Negative DCC quasi-log-likelihood (Gaussian) in (a, b).
    Z : (T, d) array of standardized residuals from Step 1.

    Implements:
        Q_t = (1-a-b) Qbar + a z_{t-1} z_{t-1}' + b Q_{t-1}
        R_t = diag(Q_t)^{-1/2} Q_t diag(Q_t)^{-1/2}
        LL  = -1/2 sum_t ( log|R_t| + z_t' R_t^{-1} z_t )
    with correlation targeting: Qbar = sample corr of Z.
    """
    a, b = params
    if a <= 0 or b <= 0 or a + b >= 1.0:
        return 1e10

    Z = np.asarray(Z)
    T, d = Z.shape
    Qbar = np.cov(Z, rowvar=False, bias=True)   # unconditional (targeted)
    dinv = np.diag(1.0 / np.sqrt(np.diag(Qbar)))
    Qbar = dinv @ Qbar @ dinv

    Q = Qbar.copy()          # initialize Q_1 at the target
    ll = 0.0
    for t in range(T):
        q_diag = np.sqrt(np.diag(Q))
        R = Q / np.outer(q_diag, q_diag)
        sign, logdet = np.linalg.slogdet(R)
        if sign <= 0:
            return 1e10
        z = Z[t]
        Rinv_z = np.linalg.solve(R, z)
        ll += -0.5 * (logdet + z @ Rinv_z)
        Q = (1 - a - b) * Qbar + a * np.outer(z, z) + b * Q
    return -ll

def fit_dcc(Z):
    """Estimate (a, b) by maximizing the DCC quasi-log-likelihood."""
    res = minimize(
        dcc_negloglik, x0=[0.03, 0.94], args=(np.asarray(Z),),
        method="L-BFGS-B",
        bounds=[(1e-6, 0.5), (1e-6, 0.999)],
    )
    a, b = res.x
    print(f"DCC estimates: a = {a:.4f}, b = {b:.4f}, a+b = {a+b:.4f}")
    print(f"log-likelihood: {-res.fun:.2f}")
    return a, b

a_hat, b_hat = fit_dcc(Z)

تشغيل هذا على محفظة BTC/ETH/SOL/BNB على مدى بضع سنوات من البيانات اليومية ينتج مخرجات بالشكل التالي (الأرقام أدناه توضيحية، وليست من تجربة مؤرخة محددة — شغّلها على بياناتك الخاصة):

DCC estimates: a = 0.0287, b = 0.9401, a+b = 0.9688
log-likelihood: -3812.44

كيفية القراءة:

  • a=0.029a = 0.029 صغيرة — مصفوفة الارتباط لا تتأرجح بشدة بسبب صدمة يوم واحد. كل يوم يدفع RtR_t نحو حاصل الضرب الخارجي zt1zt1z_{t-1}z_{t-1}' بنسبة ~3% فقط.
  • b=0.940b = 0.940 كبيرة — الارتباطات مستمرة جدا. بمجرد أن تتشابك المحفظة في حدث ضغط، تبقى متشابكة لفترة، وتتراجع نحو Qˉ\bar{Q} ببطء. هذا يطابق التجربة الفعلية لموجات الهبوط في العملات الرقمية: الارتباطات لا تعود بسرعة بمجرد استقرار السعر.
  • a+b=0.969<1a + b = 0.969 < 1 يؤكد العودة إلى المتوسط. لعملية الارتباط مستوى طويل الأجل مستقر (Qˉ\bar{Q}) تعود إليه، بعمر نصف يبلغ تقريبا log(0.5)/log(a+b)22\log(0.5)/\log(a+b) \approx 22 يوما. إذا قدّرت يوما a+ba + b مساويا فعليا للواحد، فإن عملية الارتباط متكاملة — ليس لها مرساة طويلة الأجل، وعادة ما يكون ذلك عرضا لانكسار بنيوي داخل عيّنتك يمتصه النموذج على شكل استمرارية لانهائية.

الاستمرارية شبه الوحدوية وتحميل الصدمة الضئيل هو البصمة القانونية لـ DCC عبر فئات الأصول، والعملات الرقمية ليست استثناء. وهذا أيضا سبب كون الارتباط المتحرك لـ 30 يوما بديلا ضعيفا: النافذة المتحركة تفترض ضمنيا aa و bb لا تطابق بنية التراجع هذه على الإطلاق.

بضع ملاحظات تنفيذية توفر وقت تصحيح أخطاء حقيقيا:

  • التهيئة. البدء عند [0.03, 0.94] يعكس التقدير النموذجي للعملات الرقمية: aa صغيرة (الارتباطات تستجيب للصدمات لكن ليس بعنف)، bb كبيرة (الارتباطات مستمرة). إذا انحرف المُحسِّن نحو a+b1a+b \to 1، فإن عملية الارتباط متكاملة — عادة علامة على انكسار بنيوي في العينة (تغيير نظام يجهد النموذج لملاءمته كاستمرارية).
  • اتفاقية التوقيت. داخل الحلقة نقيّم RtR_t مقابل ztz_t ثم نحدّث QQ بـ ztztz_t z_t' للخطوة التالية. هذا يبقي RtR_t دالة للمعلومات حتى t1t-1 فقط — لا استباق للمستقبل. الخطأ في هذا الترتيب هو أكثر خطأ شائع في DCC، ويُضخّم الملاءمة داخل العينة بصمت.
  • استهداف الارتباط. ندخل Qˉ\bar{Q} كارتباط عيني بدلا من تقديره. هذا ما يجعل التحسين ثنائي الأبعاد. التكلفة هي أن Qˉ\bar{Q} تستخدم العينة الكاملة، لذا في تقييم تدريجي صارم يجب إعادة تقديرها على نافذة التدريب فقط (انظر أدناه).

الخطوة 3: إعادة بناء مسارات الارتباط والتغاير

بمجرد تثبيت a,ba, b، شغّل التكرار مرة أخرى، هذه المرة مع تخزين مسار RtR_tHtH_t) الكامل بحيث تستطيع الاستراتيجيات اللاحقة استخدامه.

def dcc_filter(Z, Sigma, a, b):
    """
    Run the DCC recursion with fixed (a,b) and return the full paths:
      R_path : (T, d, d) conditional correlation matrices
      H_path : (T, d, d) conditional covariance matrices (scaled units)
    Sigma : (T, d) conditional volatilities aligned with Z.
    """
    Z = np.asarray(Z); Sig = np.asarray(Sigma)
    T, d = Z.shape
    Qbar = np.cov(Z, rowvar=False, bias=True)
    dinv = np.diag(1.0 / np.sqrt(np.diag(Qbar)))
    Qbar = dinv @ Qbar @ dinv

    Q = Qbar.copy()
    R_path = np.empty((T, d, d))
    H_path = np.empty((T, d, d))
    for t in range(T):
        q_diag = np.sqrt(np.diag(Q))
        R = Q / np.outer(q_diag, q_diag)
        R_path[t] = R
        Dt = np.diag(Sig[t])          # D_t = diag(sigma_i,t)
        H_path[t] = Dt @ R @ Dt       # H_t = D_t R_t D_t
        z = Z[t]
        Q = (1 - a - b) * Qbar + a * np.outer(z, z) + b * Q
    return R_path, H_path

R_path, H_path = dcc_filter(Z, Sigma, a_hat, b_hat)

i, j = symbols.index("BTC"), symbols.index("ETH")
rho_btc_eth = pd.Series(R_path[:, i, j], index=Z.index, name="rho_BTC_ETH")
print(rho_btc_eth.describe())
print("min/max correlation:", rho_btc_eth.min().round(3),
      rho_btc_eth.max().round(3))

سلسلة rho_btc_eth هي ثمرة التمرين بأكمله: بدلا من رقم واحد، أصبح لديك الآن ارتباط يومي يمكنك رسمه، أو وضع عتبات له، أو تغذيته في استراتيجية. على بيانات العملات الرقمية الحقيقية سترى عادة أنه يتراوح من حوالي 0.5 في الفترات الهادئة إلى أكثر من 0.9 خلال الضغط — بالضبط الانتشار الذي يمحوه الارتباط العيني الواحد.

التنبؤ خطوة واحدة إلى الأمام

للتداول الحي تحتاج Ht+1H_{t+1} للفترة التالية من المعلومات المتاحة الآن. جانب التقلب يأتي من التنبؤ خطوة واحدة لكل نموذج arch؛ جانب الارتباط هو دورة إضافية واحدة من التكرار:

def dcc_forecast_next(Z, a, b, fits, symbols):
    """One-step-ahead H_{t+1} using info through the last observation."""
    Z = np.asarray(Z); T, d = Z.shape
    Qbar = np.cov(Z, rowvar=False, bias=True)
    dinv = np.diag(1.0 / np.sqrt(np.diag(Qbar)))
    Qbar = dinv @ Qbar @ dinv

    Q = Qbar.copy()
    for t in range(T):
        z = Z[t]
        Q = (1 - a - b) * Qbar + a * np.outer(z, z) + b * Q
    q_diag = np.sqrt(np.diag(Q))
    R_next = Q / np.outer(q_diag, q_diag)

    sig_next = np.array([
        np.sqrt(fits[s].forecast(horizon=1, reindex=False)
                .variance.iloc[-1, 0])
        for s in symbols
    ])
    Dt = np.diag(sig_next)
    H_next = Dt @ R_next @ Dt
    return R_next, H_next, sig_next

R_next, H_next, sig_next = dcc_forecast_next(Z, a_hat, b_hat, fits, symbols)

تذكر أن كل شيء بوحدات مُعيَّرة (×100) لأننا لائمنا arch على series * 100. اقسم التقلبات على 100 (والتغايرات على 1002=10,000100^2 = 10{,}000) للعودة إلى وحدات العائد الخام قبل تغذية استراتيجية. الحفاظ على التعيير صحيحا أمر مرهق لكنه مصدر شائع لأخطاء صامتة.

التطبيق 1: نسبة تحوط ديناميكية لتداول الأزواج

الزوج المحايد للسوق الكلاسيكي — شراء أصل وبيع مكشوف بمقدار موزون بيتا لأصل آخر — يعيش أو يموت بحسب نسبة التحوط β\beta. قدّرها بانحدار OLS ثابت على نافذة تدريب وسترث بالضبط مشكلة الارتباط القديم التي يدور حولها هذا المقال بأكمله: التحوط الذي حيّد التعرض للسوق الربع الماضي خاطئ هذا الربع.

يمنحك DCC نسبة التحوط كسلسلة زمنية. تحوط الحد الأدنى من التباين لتعرض ETH باستخدام BTC هو معامل الانحدار الشرطي

βt=Covt(rETH,rBTC)Vart(rBTC)=hETH,BTC,tσBTC,t2=ρETH,BTC,tσETH,tσBTC,t\beta_t = \frac{\mathrm{Cov}_t(r_{\text{ETH}}, r_{\text{BTC}})}{\mathrm{Var}_t(r_{\text{BTC}})} = \frac{h_{\text{ETH,BTC},t}}{\sigma_{\text{BTC},t}^2} = \rho_{\text{ETH,BTC},t}\,\frac{\sigma_{\text{ETH},t}}{\sigma_{\text{BTC},t}}

كل حد في الطرف الأيمن مخرج من DCC. نسبة التحوط تتحرك لسببين متمايزين، و DCC يفصلهما بوضوح: الارتباط ρt\rho_t يتغير (الأصلان يتشابكان أو ينفصلان)، ونسبة التقلب σETH,t/σBTC,t\sigma_{\text{ETH},t}/\sigma_{\text{BTC},t} تتغير (أصل يصبح أكثر تقلبا نسبيا). بيتا OLS المتحركة تمزج الأثرين معا بتأخير؛ DCC ينسبهما.

def dynamic_hedge_ratio(R_path, Sigma, base="BTC", target="ETH",
                        symbols=symbols, index=Z.index):
    """
    beta_t to hedge `target` exposure with `base`:
        beta_t = rho_t * sigma_target,t / sigma_base,t
    (Scaling cancels in the ratio, so scaled units are fine here.)
    """
    i = symbols.index(target)
    j = symbols.index(base)
    rho = R_path[:, i, j]
    sig = np.asarray(Sigma)
    beta = rho * sig[:, i] / sig[:, j]
    return pd.Series(beta, index=index, name=f"beta_{target}_{base}")

beta_t = dynamic_hedge_ratio(R_path, Sigma)
print(beta_t.describe())

spread = (returns["ETH"] - beta_t.shift(1) * returns["BTC"]).dropna()

غذِّ spread إلى أي محرك أزواج تشغّله. التحوط الديناميكي لا يخلق ميزة بحد ذاته — بل يجعل الفرق الذي تتداوله محايدا للسوق فعليا عبر الزمن، بحيث لا تتلوث إشارة العودة إلى المتوسط بتعرض اتجاهي منجرف. إذا كنت تبني استراتيجيات أزواج، فهذا يندمج مباشرة في الأطر الواردة في التحكيم الإحصائي وتداول الأزواج في العملات الرقمية ونهج المسافة لتداول الأزواج، ليحل محل نسبة التحوط الثابتة فيهما. سلسلة الارتباط نفسها أيضا مُدخَل أنظف لـإشارة زوج قائمة على الارتباط من أي نافذة متحركة — تحصل على ρt\rho_t ملساء ومتسقة مع النموذج بدلا من تقدير نافذي صاخب.

تحذيران خاصان باستخدام βt\beta_t حيا. أولا، أخّرها — تداول على βt1\beta_{t-1}، وليس أبدا βt\beta_t اللحظية، وإلا فأنت تختلس النظر إلى المستقبل. ثانيا، نسبة تحوط تتأرجح كل يوم تولّد دورانا ورسوما؛ في سوق العملات الرقمية على مدار الساعة مع تكاليف تمويل على الساق القصيرة، تحوط مفرط الاستجابة يمكن أن ينزف أكثر من الانحراف الذي يصححه. نعّم βt\beta_t (بمتوسط متحرك أسي، أو أعد موازنة التحوط فقط عندما يتجاوز نطاقا) وحدد الحجم بأكمله بعقلانية — تحديد حجم المركز اعتمادا على إشارة صاخبة هو انضباط بحد ذاته، ومغطى في تحديد الحجم بمعيار كيلي.

التطبيق 2: تباين محفظة متغير عبر الزمن

لمحفظة بمتجه أوزان ww، التباين الشرطي هو

σp,t2=wHtw=ijwiwjρij,tσi,tσj,t\sigma_{p,t}^2 = w'\, H_t\, w = \sum_{i}\sum_{j} w_i w_j\, \rho_{ij,t}\,\sigma_{i,t}\,\sigma_{j,t}

بمصفوفة تغاير ثابتة — الإعداد الافتراضي لماركويتز — هذا الرقم ثابت حسبته مرة واحدة وتتظاهر بأنه لا يزال صحيحا. إنه ليس كذلك. مخاطر المحفظة تتنفس مع السوق، وتتنفس بأقصى قوة بالضبط عندما تقفز الارتباطات، لأنه في موجة هبوط ترتفع حدود σi,t\sigma_{i,t} وحدود ρij,t\rho_{ij,t} معا وتتضاعف. محفظة بدت وكأنها 40% تقلبا سنويا في الأسواق الهادئة قد تصل إلى أكثر من 80% في أسبوع ضغط، ومصفوفة تغاير ثابتة لن تخبرك بأن شيئا تغير.

def portfolio_vol_path(H_path, weights, index=Z.index, unscale=1e4):
    """
    Conditional portfolio volatility sigma_{p,t} = sqrt(w' H_t w).
    H_path is in scaled (x100) units, so covariances carry a 100^2
    factor: divide by unscale=1e4 to return to raw-return variance.
    """
    w = np.asarray(weights)
    var_t = np.einsum("i,tij,j->t", w, H_path, w) / unscale
    return pd.Series(np.sqrt(var_t), index=index, name="port_vol")

w = np.array([0.4, 0.3, 0.2, 0.1])   # BTC, ETH, SOL, BNB
pv = portfolio_vol_path(H_path, w)
pv_annual = pv * np.sqrt(365)
print(pv_annual.describe())

هذه σp,t\sigma_{p,t} المتغيرة عبر الزمن هي المُدخَل الصادق الذي يحتاجه التخصيص القائم على المخاطر. تحسين المتوسط-التباين (ماركويتز للعملات الرقمية) بتغاير عيني ثابت هو تحسين ضد وهم؛ تغذيته بـ HtH_t (أو تنبؤه قصير الأفق) يجعل الحدود الفعالة نفسها متغيرة عبر الزمن ويجبر المُحسِّن على تقليل المخاطر مع أنظمة الارتباط المرتفعة بدلا من بعدها. الأساليب القائمة على تكافؤ المخاطر والتسلسل الهرمي — خط أنابيب HRP + CVaR — أكثر حساسية لمُدخَل التغاير، لأن التخصيص بأكمله هو دالة لمصفوفة المخاطر. وإذا كنت تقارن مُخصِّصات جنبا إلى جنب، كما في مقارنة خوارزميات تحسين المحفظة، فإن استهلاكها لتغاير ثابت أو ديناميكي غالبا ما يكون محركا أكبر للمخاطر المتحققة من اختيار الخوارزمية نفسها.

التطبيق المباشر هو استهداف التقلب للمحفظة بأكملها: اختر تقلبا سنويا مستهدفا σ\sigma^{*}، وحجّم التعرض الإجمالي بـ σ/σp,t\sigma^{*} / \sigma_{p,t} في كل فترة بحيث تبقى المخاطر المتحققة ثابتة تقريبا بدلا من الانفجار في الأزمات. هذا يغلق الحلقة مع الجزء الرابع، الذي يبني ويختبر خلفيا هذه القاعدة بالضبط.

التطبيق 3: الارتباط كإشارة نظام

بعيدا عن التحوط وتحديد الحجم، تحمل مصفوفة الارتباط إشارة كلية. أكثر عدد قياسي مفيد يمكنك استخراجه هو متوسط الارتباط الثنائي:

ρˉt=2d(d1)i<jρij,t\bar{\rho}_t = \frac{2}{d(d-1)}\sum_{i < j} \rho_{ij,t}

عندما يرتفع ρˉt\bar{\rho}_t عبر المحفظة، يدخل السوق نظام تجنب المخاطرة — القصص الفردية تتوقف عن الأهمية ويتداول كل شيء كبيتا كلية واحدة. هذه هي البصمة الكمية لعبارة "الارتباطات تذهب إلى 1 في الأزمة." تميل إلى أن تسبق موجات الهبوط أو تتزامن معها، ما يجعلها مؤشر نظام قابلا للاستخدام وليس تشريحا متأخرا.

def avg_pairwise_corr(R_path, index=Z.index):
    T, d, _ = R_path.shape
    iu = np.triu_indices(d, k=1)          # upper-triangle off-diagonals
    avg = R_path[:, iu[0], iu[1]].mean(axis=1)
    return pd.Series(avg, index=index, name="avg_corr")

avg_corr = avg_pairwise_corr(R_path)

roll_q = avg_corr.rolling(365, min_periods=90).quantile(0.80)
risk_off = (avg_corr > roll_q)

يمكنك استخدام risk_off كمُخفِّض مستقل (خفض التعرض الإجمالي، توسيع أوامر وقف الخسارة، إيقاف استراتيجيات العودة إلى المتوسط التي تُسحق عندما يتحرك كل شيء معا) أو كخاصية في نموذج نظام أكثر رسمية. تتناسب طبيعيا مع نهج ماركوف الخفي في كشف الأنظمة باستخدام HMM: متوسط ارتباط DCC هو أحد أكثر متغيرات الملاحظة إفادة التي يمكنك تسليمها لـ HMM، لأنه استشرافي بشأن الضغط النظامي بطريقة لا تمتلكها العوائد المتأخرة. التحذير الصادق: الارتباط المرتفع يخبرك أن التنويع يفشل، وليس إلى أي اتجاه يتجه السوق. إنها إشارة مخاطر، لا إشارة ألفا، ويجب تحديد حجمها على هذا الأساس — انظر عدم تماثل الخسائر والأرباح لمعرفة سبب أن معاملة نظام مخاطر كرهان اتجاهي ينتهي بشكل سيء.

اعتبارات عملية

استقرار التقدير وعدد الأصول

DCC يتوسع بشكل أفضل بكثير من BEKK، لكن "التوسع" ليس "مجانيا." مصفوفة استهداف الارتباط Qˉ\bar{Q} هي ارتباط عيني بأبعاد d×dd \times d، ومصفوفات الارتباط العيني تصبح سيئة الاشتراط مع اقتراب dd من عدد المشاهدات. مع 4 أصول و1000 يوم أنت بخير. مع 60 أصلا و400 يوم، Qˉ\bar{Q} شبه منفردة، ومعكوسها في دالة الإمكان ينفجر، ويمكن أن تنحرف RtR_t عن كونها موجبة معرَّفة بسبب الضوضاء العددية. التخفيفات، مرتبة تقريبا حسب مدى الحاجة إليها:

  • انكماش Qˉ\bar{Q} نحو هدف مُهيكَل (ليدويت-وولف، أو نحو المصفوفة الوحدوية / مصفوفة ارتباط ثابتة) قبل تشغيل التكرار. هذا هو الإصلاح الأعلى تأثيرا للمحافظ الكبيرة.
  • تجميع الأصول في عدد قليل من القطاعات (العملات الكبرى، سلاسل الطبقة الأولى، DeFi، عملات الميم)، النمذجة داخل وعبر مستوى القطاع، أو تشغيل DCC على عوامل المكونات الرئيسية بدلا من الأصول الخام.
  • تفضيل مزيد من البيانات على مزيد من الأصول. لدى DCC شهية لا تشبع لتاريخ طويل ونظيف ومتزامن — وهو بالضبط ما لا تملكه العملات الفتية.

واقعيا، احتفظ بـ DCC المباشر لعدد قليل من العشرات من الأصول على الأكثر. لمجموعة أكبر، فإن DCC على عوائد العوامل بالإضافة إلى البقايا الخاصة هو الحل البديل القياسي.

استهداف الارتباط اختصار له تكلفة

استهداف Qˉ\bar{Q} يجعل التقدير قابلا للمعالجة لكنه يدمج الارتباط غير الشرطي للعينة الكاملة في كل RtR_t. في اختبار خلفي صارم، هذا تسرب استباقي: مصفوفة ارتباط اليوم tt "تعرف" متوسط ارتباط العينة بأكملها، بما فيها المستقبل. للتقييم الصادق يجب إعادة تقدير Qˉ\bar{Q} على نافذة التدريب فقط وتثبيتها خارج العينة، أو تدويرها إلى الأمام. هذا نفس الانضباط الذي يفرضه إطار التحسين التدريجي بأكمله، ومن السهل انتهاكه عن غير قصد بـ np.cov(Z) مريح على المصفوفة الكاملة — كما تفعل شفرتنا التعليمية أعلاه. أصلح هذا قبل أن تثق برقم ربح وخسارة واحد.

وتيرة إعادة الملاءمة والانضباط ضد الاستباق

لست بحاجة لإعادة تحسين a,ba, b كل يوم — إنها معالم مستقرة. وتيرة إنتاجية معقولة:

  • إعادة تقدير a,ba, b ومعالم GARCH أحادية المتغير أسبوعيا أو شهريا.
  • تشغيل المرشح (تحديث QtQ_t، σi,t\sigma_{i,t}) كل فترة بالمعالم المجمَّدة للحصول على RtR_t و HtH_t حديثين. الترشيح رخيص؛ الملاءمة ليست كذلك.
  • دائما تنبأ، لا تنعّم أبدا. استخدم RtR_t المبنية من معلومات حتى t1t-1 للتداول عند tt. البنية ذات المرحلتين (الملاءمة على نافذة، ثم الترشيح إلى الأمام) هي ما يبقيك صادقا.

الفجوة بين اختبار خلفي لـ DCC والأداء الحي غالبا ما تكون تسربا استباقيا — Qˉ\bar{Q} للعينة الكاملة، أو βt\beta_t لحظية، أو إعادة الملاءمة على بيانات تشمل الصفقة التي تقيّمها. انضباط مطابقة الاختبار الخلفي للظروف الحية موضوع بحد ذاته في تطابق الاختبار الخلفي مع الحي، وDCC نموذج يعاقب الإهمال هنا أكثر من معظمها. إذا لم يضف الارتباط الديناميكي، بعد تقييم تدريجي نظيف، أي شيء فوق تقدير متحرك بسيط لاستراتيجيتك أنت، فهذه نتيجة سلبية حقيقية وقابلة للنشر — عقلية النتائج السلبية الصادقة تنطبق مباشرة.

DCC غير المتماثل (aDCC)

تماما كما يعني تأثير الرافعة المالية أحادي المتغير (الجزء الثاني) أن الأخبار السيئة ترفع التقلب أكثر من الأخبار الجيدة، فإن الارتباطات ترتفع أكثر بعد الصدمات السلبية المشتركة منها بعد الإيجابية. كابييلو، إنجل وشيبرد (2006) يلتقطون هذا بـDCC غير المتماثل، بإضافة حد مدفوع بحاصل الضرب الخارجي للبقايا المعيرة سلبية الجزء zt=min(zt,0)z_t^- = \min(z_t, 0):

Qt=(QˉaQˉbQˉgNˉ)+azt1zt1+gzt1zt1+bQt1Q_t = (\bar{Q} - a\bar{Q} - b\bar{Q} - g\bar{N}) + a\, z_{t-1} z_{t-1}' + g\, z_{t-1}^- z_{t-1}^{-\prime} + b\, Q_{t-1}

حيث Nˉ=1Ttztzt\bar{N} = \frac{1}{T}\sum_t z_t^- z_t^{-\prime} و g0g \ge 0 يقيس دفعة الارتباط الإضافية من التحركات المشتركة إلى الأسفل. بالنسبة للعملات الرقمية، حيث يهيمن ارتباط الانهيار كمخاطرة رئيسية، عادة ما يكون حد عدم التماثل معنويا ويستحق المعلم الإضافي الواحد. حزمة rmgarch تلائم aDCC جاهزا (model="aDCC")؛ إضافة حد ztz_t^- إلى مُقدِّرنا بـ NumPy تمرين مباشر.

مقارنة: DCC مقابل البدائل

أين يقع DCC بين طرق الحصول على مصفوفة تغاير لمحفظة عملات رقمية؟ الملخص الصادق:

النهج المعالم يتوسع إلى ارتباط ρ\rho متغير عبر الزمن؟ إيجابية التعريف مضمونة؟ اعتماد الذيل؟
تغاير عيني / متحرك 0 (طول النافذة) أي dd بشكل خام (متأخر، صاخب) لا (يحتاج ترقيعا) لا
EWMA (RiskMetrics) 1 (λ\lambda) أي dd نعم (تراجع أحادي) نعم لا
CCC-GARCH dd هوامش + Qˉ\bar{Q} عشرات لا (ثابت RR) نعم لا
DCC-GARCH dd هوامش + 2 عشرات نعم نعم لا
aDCC-GARCH dd هوامش + 3 عشرات نعم، غير متماثل نعم جزئي
BEKK O(d2)O(d^2) 4\le 4 نعم (غني) نعم لا
VECH O(d4)O(d^4) 3\le 3 نعم (الأغنى) مؤلم لا
GARCH-كوبولا dd هوامش + كوبولا عشرات (كروم) كوبولا ثابتة نعم نعم

بضع قراءات لهذا الجدول:

  • EWMA هو خط الأساس الرخيص الذي يجب على الجميع التفوق عليه قبل الادعاء بأن DCC يساعد. إنه حالة خاصة بمعلم واحد من حيث الروح — تراجع أسي واحد يُطبَّق مباشرة على التغاير — ولكثير من المحافظ يصعب تحسينه بشكل مذهل خارج العينة. إذا لم يتفوق DCC على EWMA في تقييم تدريجي نظيف، استخدم EWMA.
  • CCC مقابل DCC هو صلب هذا المقال بأكمله: نفس التفكيك، لكن CCC يجمّد RR ويدع DCC يحرّكه. المعلمان الإضافيان (a,ba, b) هما الفرق الكامل، وفي العملات الرقمية يستحقان ثمنهما.
  • BEKK/VECH يشتريان ديناميكيات أغنى — كل تغاير يمكن أن يستجيب لكل صدمة سابقة — لكن تكلفة المعالم تحصرهما في محافظ صغيرة جدا. لأكثر من 4 أصول ليسا خيارا حقيقيا.
  • GARCH-كوبولا هو الصف الوحيد الذي يحمل "نعم" تحت اعتماد الذيل. هذا التكامل مرة أخرى: DCC ينمذج المركز الديناميكي للتوزيع المشترك، والكوبولا تنمذج ذيوله الثابتة. إذا كان سؤال المخاطر لديك "ماذا يحدث عندما ينهار كل شيء معا"، توجه إلى خط أنابيب الكوبولا؛ إذا كان "ما نسبة تحوطي / تباين محفظتي الآن"، توجه إلى DCC.

الافتراضي العملي لمكتب تداول عملات رقمية منهجي: DCC (أو aDCC) لنسب التحوط والتغاير الديناميكي في الجسم، وطبقة كوبولا لمخاطر الذيل و CVaR، و EWMA كخط أساس للتحقق من السلامة يبقيك صادقا بشأن ما إذا كانت الآلية الإضافية تستحق نفسها.

القيود

  • ديناميكيات عددية. معلم aa واحد ومعلم bb واحد لكل الأزواج قيد قوي. BTC-ETH وعملتان بديلتان غامضتان تشتركان في نفس سرعة التكيف. DCC المُعمَّم يخفف هذا لكنه يعيد إدخال انفجار المعالم الذي صُمِّم DCC لتجنبه.
  • خسارة كفاءة الخطوتين. مُقدِّر شبه الإمكان متسق لكن غير كامل الكفاءة، والأخطاء المعيارية الساذجة خاطئة. استخدم تصحيح إنجل-شيبرد إذا كنت تهتم بالاستدلال؛ لتوليد الإشارة تكفي التقديرات النقطية.
  • ذيول غاوسية افتراضيا. شبه الإمكان الغاوسي البسيط يُقلِّل من تقدير مخاطر الذيل المشترك. مبتكرات ستودنت-t تساعد؛ لاعتماد الذيل الحقيقي (احتمال التحركات المتطرفة المتزامنة)، DCC أداة خاطئة ونموذج الكوبولا هو الأداة الصحيحة. DCC يمنحك الجسم الديناميكي للارتباط؛ الكوبولا تمنحك الذيل الثابت. المكاتب الجادة تستخدم كليهما.
  • الارتباط ليس سببية، وليس اتجاها. ارتفاع ρˉt\bar{\rho}_t يحذر من فشل التنويع؛ لا يقول شيئا عن اتجاه السوق. لا تُحمِّل إشارة مخاطر بتوقعات اتجاهية.
  • جوع البيانات. كل ما سبق يفترض تواريخ طويلة ونظيفة ومتزامنة. أحدث عملات العملات الرقمية وأكثرها إثارة للاهتمام تنتهك الثلاثة جميعا.

الملخص

  • الارتباط الثابت كذبة في العملات الرقمية. الارتباطات تتكتل وتستمر وتقفز نحو 1 في موجات الهبوط — بالضبط عندما يُفترَض بالتنويع أن يساعد. الارتباط العيني الواحد ρ^\hat{\rho} يُتوسِّط عملية متبدلة الأنظمة في وسط بلا معنى.
  • نموذج GARCH متعدد المتغيرات الكامل (VECH، BEKK) لا يتوسع. عدد المعالم ينمو كـ O(d2)O(d^2)؛ كلاهما محصور في عدد قليل من الأصول عمليا.
  • DCC (إنجل 2002) يفكك المسألة: Ht=DtRtDtH_t = D_t R_t D_t، مع DtD_t من ملاءمات GARCH أحادية المتغير مستقلة (إعادة استخدام الجزأين الأول والثاني) و RtR_t من تكرار بمعلمين. يتوسع إلى عشرات الأصول لأنه فقط a,ba, b يُحسَّنان.
  • التكرار Qt=(1ab)Qˉ+azt1zt1+bQt1Q_t = (1-a-b)\bar{Q} + a\,z_{t-1}z_{t-1}' + b\,Q_{t-1}، المُطبَّع إلى RtR_t، ينتج مصفوفة ارتباط موجبة معرَّفة صالحة في كل خطوة، مع a,b>0a,b>0، a+b<1a+b<1.
  • مكتبة arch لا تقوم بـ DCC. لائم الهوامش بـ arch، ثم طبّق المُقدِّر بـ NumPy/SciPy المكوَّن من ~60 سطرا هنا، أو استخدم mgarch (بايثون) أو rmgarch (R، المرجع).
  • ثلاثة عوائد ملموسة: نسبة تحوط ديناميكية βt=ρtσETH,t/σBTC,t\beta_t = \rho_t\,\sigma_{\text{ETH},t}/\sigma_{\text{BTC},t} لتداول الأزواج؛ تباين محفظة صادق ومتغير عبر الزمن wHtww'H_t w للتخصيص القائم على المخاطر؛ ومتوسط الارتباط الثنائي كإشارة نظام تجنب مخاطرة.
  • الانضباط هو كل شيء. استهداف الارتباط يُسرِّب متوسط العينة الكاملة، لذا أعد تقدير Qˉ\bar{Q} على بيانات التدريب فقط؛ أخّر كل نسبة تحوط؛ رشِّح إلى الأمام، لا تنعّم أبدا. التقييم التدريجي غير قابل للتفاوض.
  • aDCC يضيف حد عدم تماثل هبوطي وعادة ما يستحق العناء في العملات الرقمية، حيث يهيمن ارتباط الانهيار.
  • الجزء الرابع يستخدم هذه التنبؤات لبناء واختبار خلفي لاستراتيجية مستهدِفة للتقلب.

المراجع:

  • Engle, R. (2002). Dynamic Conditional Correlation: A Simple Class of Multivariate Generalized Autoregressive Conditional Heteroskedasticity Models. Journal of Business & Economic Statistics, 20(3), 339-350. DOI
  • Engle, R. & Sheppard, K. (2001). Theoretical and Empirical Properties of Dynamic Conditional Correlation Multivariate GARCH. NBER Working Paper 8554. DOI
  • Bollerslev, T. (1990). Modelling the Coherence in Short-Run Nominal Exchange Rates: A Multivariate Generalized ARCH Model. Review of Economics and Statistics, 72(3), 498-505. DOI
  • Cappiello, L., Engle, R., & Sheppard, K. (2006). Asymmetric Dynamics in the Correlations of Global Equity and Bond Returns. Journal of Financial Econometrics, 4(4), 537-572. DOI
  • Engle, R. & Kroner, K. (1995). Multivariate Simultaneous Generalized ARCH. Econometric Theory, 11(1), 122-150. DOI
  • Bollerslev, T., Engle, R., & Wooldridge, J. (1988). A Capital Asset Pricing Model with Time-Varying Covariances. Journal of Political Economy, 96(1), 116-131. DOI
  • Galanos, A. (2022). rmgarch: Multivariate GARCH Models. R package. CRAN.
blog.disclaimer

MarketMaker.cc Team

البحوث والاستراتيجيات الكمية

ناقش في تلغرام
Newsletter

ابقَ متقدماً على السوق

اشترك في نشرتنا الإخبارية للحصول على رؤى حصرية حول تداول الذكاء الاصطناعي وتحليلات السوق وتحديثات المنصة.

نحترم خصوصيتك. يمكنك إلغاء الاشتراك في أي وقت.