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

نماذج GARCH غير المتماثلة وذات الذيول السميكة: EGARCH وGJR وStudent-t

#volatility
#GARCH
#EGARCH
#risk
#VaR
#crypto
#algorithmic-trading

في الجزء الأول من هذه السلسلة بنينا نموذج GARCH(1,1) من الصفر: حدس تكتل التقلب، معادلة التباين الشرطي التكرارية، تقدير الإمكان الأعظم، التنبؤ، وتشخيصات البواقي المعيارية باستخدام مكتبة arch. إن لم تكن قد قرأته، ابدأ من هناك؛ هذا المقال يفترض أنك قادر بالفعل على ملاءمة وتفسير نموذج GARCH(1,1) البسيط ولن يعيد اشتقاق الأساسيات.

نموذج GARCH(1,1) البسيط خط أساس جيد وإجابة نهائية سيئة. لديه عيبان بنيويان رخيصا التجاهل في الاختبار الخلفي ومكلفان جدا عند تجاهلهما برأس مال حقيقي. أولا، هو متماثل: يتفاعل النموذج مع يوم بمقدار +5%+5\% تماما كما يتفاعل مع يوم بمقدار 5%-5\%، لأن الصدمة تدخل معادلة التباين فقط عبر مربعها، εt12\varepsilon_{t-1}^2. التربيع يلغي الإشارة. ثانيا، يفترض ابتكارات غاوسية: حتى بعد أن يمتص GARCH تكتل التقلب، تظل البواقي المعيارية لـ BTC وETH ذات ذيول سميكة بوضوح، ودالة الإمكان الغاوسية تُقيّم الذيل بأقل من قيمته الحقيقية بشكل منهجي. نموذج GARCH(1,1)-Normal بمستوى ثقة 99% لقيمة معرضة للخطر سيُنتَهك أكثر بكثير من 1% من الوقت.

هذا المقال يعالج كلا العيبين. نضيف عدم التماثل عبر GJR-GARCH وEGARCH، والذيول السميكة عبر ابتكارات Student-tt وskewed-tt الخاصة بهانسن. ثم نقوم بما يدفع الفاتورة فعلا: تحويل التوزيع الشرطي الملائَم إلى تنبؤ بخطوة واحدة للقيمة المعرضة للخطر والعجز المتوقع، واختبار هذا التنبؤ خلفيا بصدق باستخدام اختباري Kupiec وChristoffersen. نموذج تقلب لا تختبر مخاطره أبدا ليس سوى ديكور.

أثر الرافعة المالية، ولماذا العملات الرقمية أكثر فوضى

في الأسهم، لعدم التماثل اسم وقصة. أثر الرافعة المالية (Black, 1976): عندما ينخفض سهم شركة ما، ترتفع نسبة دينها إلى حقوقها، وتصبح حقوق الملكية أكثر خطورة ميكانيكيا، ويرتفع التقلب. الأخبار السيئة ترفع التقلب المستقبلي أكثر من أخبار جيدة بنفس الحجم. تجريبيا، هذه واحدة من أكثر الحقائق النمطية رسوخا في أدبيات تقلب الأسهم.

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

التحذير المهم: العملات الرقمية أكثر فوضى، وينبغي معاملة عدم التماثل كمسألة تجريبية لا كقانون. الحركات الصاعدة العنيفة، مثل عصر المراكز القصيرة (short squeeze)، أو ارتفاع مدفوع بالرافعة المالية، أو فجوة ناتجة عن الموافقة على صندوق متداول، يمكن أن ترفع التقلب المحقق أيضا. حسب الأصل ونافذة العينة، يمكن أن يكون عدم التماثل المُقدَّر قويا أو ضعيفا أو أحيانا بالإشارة "الخاطئة". الانضباط الذي يصر عليه هذا المقال: لائم النموذج غير المتماثل، وانظر ما إذا كانت معلمة عدم التماثل ذات دلالة إحصائية وفي الاتجاه المتوقع، واحتفظ بالمعلمة الإضافية فقط إذا استحقت مكانها. لا تفترض أن قصة الأسهم تنتقل مباشرة؛ اختبرها.

اختبار عدم التماثل قبل نمذجته

الملخص أعلاه يقول "عامل عدم التماثل كأمر تجريبي"، فقبل ملاءمة نموذج غير متماثل، شغّل اختبارا رسميا رخيصا لمعرفة ما إذا كان عدم التماثل موجودا أصلا. اختبارات Engle-Ng لتحيز الإشارة (sign-bias) (1993) تفعل ذلك بالضبط. لائم أولا نموذج GARCH(1,1) متماثلا، خذ بواقيه المعيارية المربعة zt2z_t^2، وأجرِ انحدارا عليها باستخدام مؤشرات إشارة وحجم الصدمة السابقة:

zt2=a0+a1St1+a2St1εt1+a3St1+εt1+utz_t^2 = a_0 + a_1 S_{t-1}^- + a_2 S_{t-1}^- \varepsilon_{t-1} + a_3 S_{t-1}^+ \varepsilon_{t-1} + u_t

حيث St1=1{εt1<0}S_{t-1}^- = \mathbf{1}\{\varepsilon_{t-1} < 0\} و St1+=1St1S_{t-1}^+ = 1 - S_{t-1}^-. المنطق: إذا كان النموذج المتماثل قد التقط بالفعل كل شيء، فإن إشارة وحجم صدمة الأمس لا ينبغي أن يتنبآ بالبواقي المربعة اليوم، إذن a1=a2=a3=0a_1 = a_2 = a_3 = 0. اختبارات tt الفردية هي اختبارات تحيز الإشارة (a1a_1)، وتحيز الحجم السلبي (a2a_2)، وتحيز الحجم الإيجابي (a3a_3)؛ واختبار FF المشترك على الثلاثة معا هو الاختبار الشامل. قيمة a1a_1 أو a2a_2 ذات دلالة تعني أن الصدمات السلبية يُخطئ النموذج المتماثل في تسعيرها بشكل منهجي، وهذه إشارتك إلى أن GJR أو EGARCH سيساعدان.

import statsmodels.api as sm

def sign_bias_test(symmetric_res):
    """Engle-Ng sign-bias tests on a fitted symmetric GARCH result."""
    z = symmetric_res.std_resid.dropna()
    z2 = (z ** 2).values[1:]
    eps_lag = z.values[:-1]                      # standardized shock proxy
    neg = (eps_lag < 0).astype(float)
    X = np.column_stack([
        np.ones_like(eps_lag),                   # intercept
        neg,                                     # sign bias
        neg * eps_lag,                           # negative size bias
        (1 - neg) * eps_lag,                     # positive size bias
    ])
    ols = sm.OLS(z2, X).fit()
    names = ["const", "sign_bias", "neg_size_bias", "pos_size_bias"]
    for nm, coef, t, p in zip(names, ols.params, ols.tvalues, ols.pvalues):
        print(f"{nm:16s} coef={coef:+.4f}  t={t:+.2f}  p={p:.3f}")
    print(f"Joint F p-value: {ols.f_pvalue:.4f}")
    return ols

sign_bias_test(models["GARCH-N"])

إذا كان اختبار FF المشترك غير ذي دلالة، فلديك رخصة تجريبية للبقاء متماثلا وتوفير معلمتين. إذا كان ذا دلالة، وهو الناتج الشائع بالنسبة لـ BTC/ETH، فانتقل إلى GJR/EGARCH براحة ضمير، مدركا أنك تُنمذج سمة حقيقية لا تطارد ضجيجا. هذا هو الانضباط التجريبي الذي طالب به المدخل: لا تفترض قصة الرافعة المالية للأسهم، اختبرها.

GJR-GARCH: عدم التماثل عبر حد عتبة

نموذج Glosten-Jagannathan-Runkle (1993)، ويُسمى أحيانا TGARCH أو GARCH العتبي، هو أصغر تعديل ممكن على GARCH(1,1) يسمح للأخبار السيئة والجيدة بأن يكون لها تأثيرات مختلفة. تذكر معادلة التباين الشرطي المتماثلة من الجزء الأول:

σt2=ω+αεt12+βσt12\sigma_t^2 = \omega + \alpha\,\varepsilon_{t-1}^2 + \beta\,\sigma_{t-1}^2

يضيف GJR حد عتبة واحدا: جرعة إضافية من التباين تُفعَّل فقط بعد صدمة سلبية.

σt2=ω+αεt12+γIt1εt12+βσt12\sigma_t^2 = \omega + \alpha\,\varepsilon_{t-1}^2 + \gamma\,I_{t-1}\,\varepsilon_{t-1}^2 + \beta\,\sigma_{t-1}^2

حيث It1I_{t-1} هو المؤشر

It1={1if εt1<00if εt10I_{t-1} = \begin{cases} 1 & \text{if } \varepsilon_{t-1} < 0 \\ 0 & \text{if } \varepsilon_{t-1} \geq 0 \end{cases}

اقرأ المعادلة حسب الحالات. بعد صدمة إيجابية (εt10\varepsilon_{t-1} \geq 0)، يكون المؤشر صفرا وتأثير الصدمة المربعة على تباين الفترة التالية هو ببساطة α\alpha. بعد صدمة سلبية، يكون المؤشر واحدا والتأثير هو α+γ\alpha + \gamma. المعلمة γ\gamma هي كامل قصة عدم التماثل في رقم واحد:

  • γ>0\gamma > 0: الصدمات السلبية ترفع التقلب أكثر من الصدمات الإيجابية بنفس الحجم. هذا هو أثر الرافعة المالية، وهو ما تتوقع رصده في BTC/ETH في معظم الأحيان.
  • γ=0\gamma = 0: ينهار النموذج إلى GARCH(1,1) المتماثل. لذا فإن اختبار نسبة الإمكان أو اختبار tt على γ\gamma هو اختبار مباشر لـ ما إذا كان عدم التماثل موجودا أصلا.
  • γ<0\gamma < 0: الصدمات الإيجابية ترفع التقلب أكثر، وهو نظام الارتفاع الحاد النادر في العملات الرقمية. نادر، لكن لا تستبعده مسبقا.

الإيجابية والاستقرارية

بما أن σt2\sigma_t^2 لا يزال يُبنى جمعيا، نحتاج كل حد إلى البقاء غير سالب. شروط الإيجابية الكافية هي

ω>0,α0,α+γ0,β0.\omega > 0, \quad \alpha \geq 0, \quad \alpha + \gamma \geq 0, \quad \beta \geq 0.

لاحظ أن γ\gamma نفسها يُسمح لها بأن تكون سالبة طالما α+γ0\alpha + \gamma \geq 0، بحيث لا يصبح التأثير بعد الأخبار السيئة سالبا أبدا.

من أجل الاستقرارية التساوقية (covariance stationarity)، افترض أن الابتكارات zt=εt/σtz_t = \varepsilon_t/\sigma_t معيارية بتوزيع متماثل حول الصفر، بحيث P(εt1<0)=1/2P(\varepsilon_{t-1} < 0) = 1/2 ويساهم المؤشر بـ γ/2\gamma/2 في المتوسط. يصبح شرط الاستقرارية

α+β+12γ<1.\alpha + \beta + \tfrac{1}{2}\gamma < 1.

التباين غير الشرطي (طويل الأمد) عندئذ هو

σˉ2=ω1αβ12γ.\bar{\sigma}^2 = \frac{\omega}{1 - \alpha - \beta - \tfrac{1}{2}\gamma}.

هذا هو نظير GJR لنتيجة الجزء الأول σˉ2=ω/(1αβ)\bar{\sigma}^2 = \omega/(1-\alpha-\beta)، مع حد 12γ\tfrac{1}{2}\gamma الإضافي الذي يحسب متوسط مساهمة نصف عمر أثر الرافعة. إذا كان توزيع الابتكار لديك ملتويا (skew-tt الخاص بهانسن، أدناه)، يُستبدل الـ 1/21/2 بالاحتمال الفعلي أن zt<0z_t < 0، لكن 1/21/2 هو المرجع القياسي المستخدم للاستمرارية المُبلَّغ عنها.

EGARCH: نمذجة لوغاريتم التباين، بلا قيود إيجابية

يبقيك GJR داخل قيد صارم لإيجابية التباين: يجب فحص كل تركيبة معلمات مقابل قيود المتباينات، وهو أمر مزعج أثناء التحسين وأسوأ أثناء إعادة التقدير المتدحرج عندما تنحرف نافذة أحيانا إلى منطقة غير قابلة للتحقيق. نموذج Exponential GARCH لنيلسون (1991) يتجاوز هذا تماما بنمذجة لوغاريتم التباين الشرطي. لأن logσt2\log \sigma_t^2 يمكن أن يكون أي عدد حقيقي، فإن σt2=exp(logσt2)\sigma_t^2 = \exp(\log \sigma_t^2) إيجابي تلقائيا مهما كانت المعلمات. لا قيود لفرضها.

اكتب المعادلة التكرارية بدلالة الابتكار المعياري zt1=εt1/σt1z_{t-1} = \varepsilon_{t-1}/\sigma_{t-1}:

logσt2=ω+βlogσt12+α(zt1Ezt1)+γzt1\log \sigma_t^2 = \omega + \beta \log \sigma_{t-1}^2 + \alpha\bigl(|z_{t-1}| - \mathbb{E}|z_{t-1}|\bigr) + \gamma\, z_{t-1}

حدان يحملان الصدمة، وفصلهما هو الفكرة الكاملة:

  • حد الحجم α(zt1Ezt1)\alpha(|z_{t-1}| - \mathbb{E}|z_{t-1}|) يستجيب لـ حجم الصدمة، بعد إزالة الإشارة. طرح Ezt1\mathbb{E}|z_{t-1}| يُمركزه بحيث لا تساهم صدمة بحجم متوسط بشيء. بالنسبة لتوزيع طبيعي معياري، Ez=2/π0.7979\mathbb{E}|z| = \sqrt{2/\pi} \approx 0.7979؛ بالنسبة لـ Student-tt معياري، القيمة المطلقة المتوقعة أصغر وتعتمد على ν\nu، لكن arch تتعامل مع هذا داخليا.
  • حد الإشارة γzt1\gamma\, z_{t-1} هو عدم التماثل. إنه خطي في الابتكار الموقّع، فصدمة zt1z_{t-1} سلبية تدفع logσt2\log\sigma_t^2 في اتجاه معاكس لصدمة إيجابية.

اصطلاح الإشارة مهم ويوقع الناس في الخطأ. في هذا التمثيل المعلمي، أثر الرافعة المالية (الأخبار السيئة ترفع التقلب) يقابل γ<0\gamma < 0: صدمة سلبية zt1<0z_{t-1} < 0 تجعل عندئذ γzt1>0\gamma z_{t-1} > 0، مما يرفع لوغاريتم التباين. هذه إشارة معاكسة لإشارة γ>0\gamma > 0 في GJR. اقرأ دائما توثيق النموذج نفسه للاصطلاح بدلا من الافتراض؛ arch تُبلغ عن EGARCH بإشارتها الخاصة، ونحن نتحقق منها مقابل منحنى أثر الأخبار أدناه بدلا من الاعتماد على الذاكرة.

بما أن كل شيء جمعي في اللوغاريتمات، فإن استمرارية EGARCH(1,1) يحكمها معامل الانحدار الذاتي الواحد β\beta على logσt12\log\sigma_{t-1}^2؛ تتطلب الاستقرارية فقط β<1|\beta| < 1. هذا شرط أنظف بكثير من متباينة GJR، وهو ميزة عملية حقيقية عندما تعيد الملاءمة على نوافذ متدحرجة.

نقطة دقيقة تستحق الذكر: استجابة EGARCH للصدمات أُسّية في الابتكار (تُرفع للأس في النهاية)، بينما GJR تربيعية. لذا يتفاعل EGARCH بعنف أكبر مع الصدمات الكبيرة، وهي ميزة في العملات الرقمية حيث أحداث الذيل هي التي تهم، لكنها أيضا سبب يمكن أن يجعل EGARCH يُنتج أحيانا تنبؤات تباين كبيرة بشكل غير معقول بعد يوم شاذ. لا أحدهما أفضل عالميا؛ تختار حسب الملاءمة خارج العينة واختبارات المخاطر الخلفية، وهذه هي نقطة هذه السلسلة كلها.

منحنى أثر الأخبار

أنظف طريقة لرؤية الفرق بين GARCH المتماثل وGJR وEGARCH هي منحنى أثر الأخبار (Engle and Ng, 1993): ثبّت σt1\sigma_{t-1} عند مستواه طويل الأمد وارسم التباين الشرطي للفترة التالية σt2\sigma_t^2 كدالة لآخر صدمة εt1\varepsilon_{t-1}. يجيب هذا عن "بالنظر إلى صدمة بهذا الحجم والإشارة، كم يرفع النموذج تقلب الغد؟"

  • GARCH المتماثل ينتج قطعا مكافئا متماثلا متمركزا عند الصفر. صدمة 5%-5\% و+5%+5\% تقعان عند نفس الارتفاع. هذا بالضبط العيب الذي نعالجه.
  • GJR ينتج قطعا مكافئا بانعطاف عند الصفر، أكثر انحدارا على اليسار (الصدمات السلبية) منه على اليمين عندما γ>0\gamma > 0. النصفان لهما انحناء α+γ\alpha+\gamma و α\alpha على التوالي.
  • EGARCH ينتج شكل V غير متماثل وأُسي: الذراعان لهما ميلان مختلفان بسبب حد γz\gamma z، والكل ينحني للأعلى أسرع من قطع مكافئ بسبب الرفع للأس النهائي.

سنرسم الثلاثة من المعلمات الملائَمة لاحقا، في قسم التنفيذ؛ إنه التشخيص الأكثر فائدة لإيصال ما يمنحك إياه عدم التماثل.

الذيول السميكة: ابتكارات Student-t وskewed-t

عدم التماثل يعالج استجابة النموذج لـ إشارة الصدمات. لا يفعل شيئا حيال توزيع الصدمات نفسها. يفترض GARCH البسيط ztN(0,1)z_t \sim \mathcal{N}(0,1)، وهذا الافتراض خاطئ دائما تقريبا بالنسبة للعملات الرقمية. حتى بعد أن يُزيل GARCH تكتل التقلب، تحتفظ البواقي المعيارية zt=εt/σtz_t = \varepsilon_t / \sigma_t بتفلطح زائد؛ إنها ذات ذيول سميكة. دالة الإمكان الغاوسية، بملاءمتها لأكتاف التوزيع، تُقلل من تقدير مدى تكرار وقوع يوم معياري بـ 4 أو 5 أو 6 انحرافات معيارية فعليا.

النتيجة على المخاطر مباشرة. القيمة المعرضة للخطر الغاوسية بمستوى ثقة 99% تستخدم الكمية Φ1(0.01)2.326\Phi^{-1}(0.01) \approx -2.326، فتتنبأ بـ VaR0.992.326σt\text{VaR}_{0.99} \approx 2.326\,\sigma_t. إذا كان التوزيع المعياري الحقيقي هو Student-tt بدرجات حرية ν=5\nu = 5 مثلا، فإن كمية الـ 1% الحقيقية قريبة من 3.36-3.36؛ فتكون VaR الغاوسية متفائلة بحوالي 44%44\% عند مستوى الثقة ذاك. ستُنتهك أكثر بكثير من 1% من الوقت وستُفاجَأ منهجيا بأيام "مستحيلة". هذه ليست غرابة خاصة بالعملات الرقمية؛ فقد قدّم Bollerslev (1987) نموذج tt-GARCH بالضبط لأن بواقي الأسهم والفوركس أظهرت الذيول السميكة ذاتها. العملات الرقمية مجرد نسخة أكثر تطرفا من المشكلة ذاتها.

Student-t المعياري

كثافة Student-tt لها معلمة درجات حرية ν>2\nu > 2 تتحكم بسماكة الذيل: ν\nu صغيرة تعني ذيولا سميكة، وكلما ν\nu \to \infty يتقارب tt إلى التوزيع الغاوسي. المشكلة هي أن توزيع tνt_\nu الخام تباينه ν/(ν2)1\nu/(\nu-2) \neq 1، لذا يجب علينا تقييسه إلى تباين وحدوي قبل استخدامه كابتكار، وإلا فإن "σt\sigma_t" في معادلة GARCH لن تكون فعليا الانحراف المعياري الشرطي.

ابتكار Student-tt المعياري بتباين وحدوي كثافته

f(z;ν)=Γ ⁣(ν+12)π(ν2)  Γ ⁣(ν2)(1+z2ν2)ν+12,ν>2.f(z;\nu) = \frac{\Gamma\!\left(\frac{\nu+1}{2}\right)}{\sqrt{\pi(\nu-2)}\;\Gamma\!\left(\frac{\nu}{2}\right)}\left(1 + \frac{z^2}{\nu-2}\right)^{-\frac{\nu+1}{2}}, \qquad \nu > 2.

لاحظ (ν2)(\nu-2) في الداخل؛ هذا هو التقييس، الذي يُعاد قياسه بحيث Var(z)=1\mathrm{Var}(z)=1. مساهمة اللوغاريتم للإمكان لمشاهدة واحدة، بالنظر إلى تباين GARCH الشرطي σt2\sigma_t^2 و zt=εt/σtz_t = \varepsilon_t/\sigma_t، هي

t=logΓ ⁣(ν+12)logΓ ⁣(ν2)12log(π(ν2))12logσt2ν+12log ⁣(1+zt2ν2).\ell_t = \log\Gamma\!\left(\tfrac{\nu+1}{2}\right) - \log\Gamma\!\left(\tfrac{\nu}{2}\right) - \tfrac{1}{2}\log\bigl(\pi(\nu-2)\bigr) - \tfrac{1}{2}\log\sigma_t^2 - \frac{\nu+1}{2}\log\!\left(1 + \frac{z_t^2}{\nu-2}\right).

الحد 12logσt2-\tfrac{1}{2}\log\sigma_t^2 هو جاكوبيان التحويل من εt\varepsilon_t إلى ztz_t، وهو نفس الحد الذي رأيته في دالة الإمكان الغاوسية لـ GARCH في الجزء الأول. فقط الشكل يتغير. تعظيم tt\sum_t \ell_t معا على معلمات GARCH و ν\nu هو بالضبط ما تفعله arch عندما تمرر dist='t'.

قيمة ν\nu المُقدَّرة نفسها معلوماتية. بالنسبة لعوائد BTC/ETH اليومية، عادة ما تحط في نطاق ν36\nu \approx 3\text{–}6، أي ذيول سميكة، لكن بتباين محدود (يتطلب ν>2\nu > 2) وعادة تفلطح محدود (يتطلب ν>4\nu > 4). إذا انخفضت ν\nu المُلائَمة لديك تحت 4، انتبه إلى أن التفلطح العيني غير محدود تقنيا في النموذج وقد تصبح بعض المقدرات غير مستقرة؛ إنها إشارة للنظر بعناية في القيم الشاذة وجودة البيانات.

skew-t الخاص بهانسن

Student-tt ذو ذيل سميك لكنه لا يزال متماثلا؛ الذيل الأيسر والأيمن بنفس الثقل. بواقي عوائد العملات الرقمية غالبا ما تكون أيضا ملتوية: الذيل الأيسر (الانهيارات) أثقل من الأيمن. skew-tt الخاص بهانسن (1994) يُعمِّم tt المعياري بمعلمة التواء λ(1,1)\lambda \in (-1, 1) إلى جانب ν\nu:

f(z;ν,λ)={bc(1+1ν2(bz+a1λ)2)ν+12z<a/bbc(1+1ν2(bz+a1+λ)2)ν+12za/bf(z;\nu,\lambda) = \begin{cases} b\,c\left(1 + \dfrac{1}{\nu-2}\left(\dfrac{bz+a}{1-\lambda}\right)^2\right)^{-\frac{\nu+1}{2}} & z < -a/b \\[2mm] b\,c\left(1 + \dfrac{1}{\nu-2}\left(\dfrac{bz+a}{1+\lambda}\right)^2\right)^{-\frac{\nu+1}{2}} & z \geq -a/b \end{cases}

حيث الثوابت a=4λcν2ν1a = 4\lambda c\,\frac{\nu-2}{\nu-1}، و b2=1+3λ2a2b^2 = 1 + 3\lambda^2 - a^2، و c=Γ(ν+12)π(ν2)Γ(ν2)c = \frac{\Gamma(\frac{\nu+1}{2})}{\sqrt{\pi(\nu-2)}\,\Gamma(\frac{\nu}{2})} مُختارة بحيث يكون لـ zz متوسط صفري وتباين وحدوي لكل (ν,λ)(\nu,\lambda) صالحة. يتشعب التوزيع عند z=a/bz = -a/b، مستخدما قياسا مختلفا في كل جزء لينحني بكتلة أكبر نحو ذيل واحد.

التفسير: λ<0\lambda < 0 يعطي توزيعا ملتويا نحو اليسار (جانب سفلي أثقل)، وهو النتيجة المعتادة للعملات الرقمية وما تتوقع اقترانه بأثر الرافعة المالية. λ=0\lambda = 0 يستعيد Student-tt المتماثل، لذا اختبار λ=0\lambda = 0 يخبرك ما إذا كان حد الالتواء يشتري شيئا. في arch هذا هو dist='skewt'، الذي يُقدّر كلا من ν\nu و λ\lambda. المكسب هو VaR ذات كمية ذيل يسار أثقل بصدق من كمية ذيلها اليمين، وهو بالضبط ما تريده عندما تكون الخسائر التي تحاول النجاة منها غير متماثلة. هذا يرتبط مباشرة بـ عدم تماثل الخسارة مقابل الربح في نتائج المراكز: انخفاض بنسبة x%x\% يحتاج أكثر من x%x\% للتعافي، لذا فإن سوء نمذجة الذيل الأيسر أكثر تكلفة من سوء نمذجة الذيل الأيمن.

التنفيذ بلغة Python

سنُلائم الآن كل هذا باستخدام مكتبة arch. الإعداد يعكس الجزء الأول: اسحب العوائد اليومية، قِس بضرب 100 من أجل الاستقرار العددي (مُحسِّنات GARCH تتصرف بشكل سيء عندما تكون العوائد من رتبة O(0.01)O(0.01))، ولائم بمتوسط ثابت. إذا أردت بيانات داخل اليوم أو نموذج متوسط مختلف، الآلية مطابقة.

الإعداد والبيانات

import numpy as np
import pandas as pd
from arch import arch_model
from arch.univariate import GARCH, EGARCH, ConstantMean, StudentsT, SkewStudent
from scipy import stats

def fetch_returns(symbol="BTC-USD", start="2019-01-01", end="2025-12-31"):
    """Daily log returns, in percent (scaled x100 for the optimizer)."""
    import yfinance as yf
    px = yf.download(symbol, start=start, end=end)["Close"].dropna()
    ret = 100.0 * np.log(px / px.shift(1)).dropna()
    ret.name = symbol
    return ret

r = fetch_returns("BTC-USD")
print(f"{len(r)} daily observations, "
      f"annualized vol ~ {r.std() * np.sqrt(365):.0f}%")

العملات الرقمية تتداول على مدار الساعة طوال الأسبوع، لذا نُسنون بـ 365 لا 252، وهو مصدر التباس صغير لكنه متكرر عند مقارنة نسبة شارب أو التقلب في العملات الرقمية بأرقام مكتب أسهم.

ملاءمة أربعة نماذج

النمط في arch: vol='Garch' مع p=1, q=1 هو GARCH متماثل؛ إضافة o=1 تُفعّل حد عتبة GJR؛ vol='EGARCH' يُحوّل إلى نموذج لوغاريتم التباين. توزيع الابتكار يُحدَّد بـ dist: 'normal'، 't'، 'skewt'.

def fit(returns, vol="Garch", p=1, o=0, q=1, dist="normal"):
    am = arch_model(returns, mean="Constant",
                    vol=vol, p=p, o=o, q=q, dist=dist)
    res = am.fit(disp="off")
    return res

models = {
    "GARCH-N":    fit(r, vol="Garch",  o=0, dist="normal"),  # Part 1 baseline
    "GJR-t":      fit(r, vol="Garch",  o=1, dist="t"),        # asymmetry + fat tails
    "EGARCH-t":   fit(r, vol="EGARCH", o=1, dist="t"),        # log-variance asymmetry
    "GJR-skewt":  fit(r, vol="Garch",  o=1, dist="skewt"),    # + skew
}

for name, res in models.items():
    print(f"\n===== {name} =====")
    print(res.summary().tables[1])   # parameter table

بالنسبة لـ vol='EGARCH'، تتحكم وسيطة o بالحد غير المتماثل (γz\gamma z) بينما تتحكم p/q بحدي الحجم والتأخر؛ o=1, p=1, q=1 هو EGARCH(1,1) القياسي. فخ واحد: أسماء المعلمات في arch لـ EGARCH هي نفس الأحرف لكن اصطلاح الإشارة على حد عدم التماثل هو اصطلاح نيلسون، فالتقدير السالب هو أثر الرافعة المالية. نتحقق من هذا من منحنى أثر الأخبار بدلا من الاعتماد على الذاكرة.

قراءة ملاءمة GJR

جدول معلمات GJR-tt يبدو تقريبا هكذا (قيم توضيحية، ليست تجربة مُبلَّغ عنها؛ أعد الملاءمة على بياناتك):

                  coef    std err       t      P>|t|
omega           0.0480     0.017     2.82     0.005
alpha[1]        0.0620     0.018     3.44     0.001
gamma[1]        0.0910     0.028     3.25     0.001
beta[1]         0.8850     0.021    42.1      0.000
nu              4.30       0.55      7.82     0.000

كيفية قراءته:

  • gamma[1] = 0.091 بإحصائية tt فوق 3 هو أثر رافعة مالية ذو دلالة إحصائية. بعد صدمة سلبية، تأثير الصدمة المربعة هو α+γ=0.062+0.091=0.153\alpha + \gamma = 0.062 + 0.091 = 0.153؛ بعد صدمة إيجابية هو ببساطة α=0.062\alpha = 0.062. الأخبار السيئة تحرك تقلب هذا النموذج بحوالي 2.5×2.5\times مقارنة بأخبار جيدة بنفس الحجم.
  • nu = 4.3 تؤكد الذيول السميكة، بعيدا عن الغاوسي (ν\nu \to \infty)، ومنخفضة بما يكفي بحيث تكون العزم الرابع بالكاد محدودا. VaR غاوسية على هذه السلسلة ستكون متفائلة بشكل سيء.
  • الاستمرارية هي α+β+12γ=0.062+0.885+0.04550.993\alpha + \beta + \tfrac{1}{2}\gamma = 0.062 + 0.885 + 0.0455 \approx 0.993، عالية جدا، كالمعتاد للعملات الرقمية اليومية: الصدمات تتلاشى ببطء والتقلب متكتل بقوة.

السطر الأهم للتحقق منه هو سطر γ\gamma. إذا كانت قيمة pp الخاصة به كبيرة، فإن الحد غير المتماثل لا يستحق مكانه على هذا الأصل والنافذة، وينبغي تفضيل النموذج المتماثل الأبسط. هذا انضباط اختيار نموذج، لا زخرفة؛ المزيد عن ذلك أدناه.

مقارنة النماذج بمعايير المعلومات

إمكان اللوغاريتم يتحسن دائما عند إضافة معلمات، لذا لا يمكنك الاختيار بناء على إمكان اللوغاريتم وحده. استخدم AIC/BIC، اللذين يعاقبان عدد المعلمات (BIC بعدوانية أكبر):

def compare(models: dict) -> pd.DataFrame:
    rows = []
    for name, res in models.items():
        rows.append({
            "model": name,
            "n_params": len(res.params),
            "loglik": res.loglikelihood,
            "AIC": res.aic,
            "BIC": res.bic,
        })
    df = pd.DataFrame(rows).set_index("model")
    return df.sort_values("BIC")

print(compare(models))

قواعد تفسير تقريبية: تحسن في BIC بأكثر من ~6 نقاط مقارنة بخط الأساس دليل قوي على أن البنية الإضافية حقيقية؛ فرق 1-2 مجرد ضجيج. إذا تفوق GJR-t على GARCH-N بـ 30+ نقطة BIC لكن GJR-skewt تفوق على GJR-t بنقطة واحدة فقط، احتفظ بـ tt وأسقط الالتواء؛ معلمة الالتواء لا تُغطي تكلفتها على هذه البيانات. لا تقرأ AIC/BIC كبديل عن التحقق خارج العينة؛ فهما يكافئان الملاءمة داخل العينة معدَّلة بالتعقيد، وهو ضروري لكن غير كافٍ. الاختبار الحقيقي هو اختبار VaR الخلفي، وفي النهاية، التقييم بالتقدم المتدحرج.

رسم منحنى أثر الأخبار

هذا هو الرسم الحاسم؛ يجعل عدم التماثل مرئيا ويتحقق من اصطلاح إشارة EGARCH.

import matplotlib.pyplot as plt

def news_impact_curve(res, shock_grid):
    """
    Next-period conditional variance as a function of the last shock,
    holding sigma_{t-1} at the model's unconditional level.
    Works for symmetric GARCH, GJR (o=1), and EGARCH.
    """
    p = res.params
    vol_name = res.model.volatility.__class__.__name__
    sigma2_bar = np.mean(res.conditional_volatility ** 2)

    omega = p["omega"]
    alpha = p.get("alpha[1]", 0.0)
    gamma = p.get("gamma[1]", 0.0)
    beta  = p.get("beta[1]", 0.0)

    if vol_name == "EGARCH":
        sig_prev = np.sqrt(sigma2_bar)
        z = shock_grid / sig_prev
        E_abs = np.sqrt(2 / np.pi)   # approx; arch uses the fitted dist's E|z|
        log_s2 = (omega + beta * np.log(sigma2_bar)
                  + alpha * (np.abs(z) - E_abs) + gamma * z)
        return np.exp(log_s2)
    else:
        ind = (shock_grid < 0).astype(float)
        return omega + (alpha + gamma * ind) * shock_grid**2 + beta * sigma2_bar

shocks = np.linspace(-8, 8, 401)   # daily % shocks
plt.figure(figsize=(8, 5))
for name in ["GARCH-N", "GJR-t", "EGARCH-t"]:
    nic = news_impact_curve(models[name], shocks)
    plt.plot(shocks, nic, label=name, lw=2)
plt.axvline(0, color="gray", lw=0.8, ls="--")
plt.xlabel("Last shock  $\\varepsilon_{t-1}$  (daily %)")
plt.ylabel("Next-period conditional variance  $\\sigma_t^2$")
plt.title("News impact curve: symmetric vs GJR vs EGARCH (BTC)")
plt.legend()
plt.tight_layout()

عند تشغيل هذا، منحنى GARCH-N المتماثل قطع مكافئ نظيف متمركز عند الصفر؛ صدمة 6%-6\% و+6%+6\% تُعطيان نفس التباين. GJR-t قطع مكافئ بانعطاف عند الأصل، أعلى على الذراع اليسرى. EGARCH-t هو الشكل V الأُسي، وإذا كانت ذراعه اليسرى فوق ذراعه اليمنى فقد أكدت أثر الرافعة المالية واصطلاح الإشارة بنظرة واحدة. إذا كانت ذراع EGARCH اليسرى تحت اليمنى، فإما أن γ\gamma قُدِّرت إيجابية (نظام ارتفاع تقلب صاعد) أو أن لديك الإشارة معكوسة؛ الرسم يخبرك أيهما دون أي تخمين.

مقارنة جنبا إلى جنب للنماذج الأربعة

قبل أن ننتقل إلى المخاطر، من المفيد وضع النماذج الأربعة جنبا إلى جنب. كل صف قرار تصميم، والأعمدة تُظهر ما يكلفه ويمنحه ذلك القرار.

الخاصية GARCH-N GJR-t EGARCH-t GJR-skewt
عدم التماثل (إشارة الصدمة) لا يوجد عتبة γIε2\gamma I\varepsilon^2 موقّعة γz\gamma z عتبة γIε2\gamma I\varepsilon^2
شكل ذيل الابتكار غاوسي Student-tt Student-tt skewed-tt
الالتواء في الابتكار لا لا لا نعم (λ\lambda)
قيود الإيجابية نعم نعم (α+γ0\alpha+\gamma\ge0) لا يوجد (الصيغة اللوغاريتمية) نعم
شرط الاستقرارية α+β<1\alpha+\beta<1 α+β+12γ<1\alpha+\beta+\tfrac12\gamma<1 β<1\lvert\beta\rvert<1 α+β+P(z<0)γ<1\alpha+\beta+P(z<0)\gamma<1
معلمات إضافية مقارنة بخط الأساس 0 γ,ν\gamma,\nu γ,ν\gamma,\nu γ,ν,λ\gamma,\nu,\lambda
الحكم النموذجي على العملات الرقمية يفشل اختبار VaR الخلفي قوي، متين قوي، متين هامشي مقارنة بـ GJR-t

النمط الذي يجب استيعابه: القفزة من العمود 1 إلى العمود 2، إضافة عدم التماثل والذيول السميكة معا، هي حيث يعيش معظم تحسن معايرة المخاطر. التحسينات اللاحقة (الصيغة الوظيفية لـ EGARCH، حد الالتواء) حقيقية لكنها من الدرجة الثانية، وفي كثير من سلاسل العملات الرقمية تقع ضمن الضجيج. أنفق ميزانية النمذجة على القفزة الأولى وكن متشككا في البقية.

تطبيق المخاطر: VaR وExpected Shortfall

ملاءمة نموذج تقلب أكثر تعقيدا تستحق العناء فقط إذا حسّنت قرارا. أنظف قرار للتحسين هو تنبؤ مخاطر الذيل بخطوة واحدة: كم يمكن أن يكون الغد سيئا؟ نُنتج قيمة معرضة للخطر وعجزا متوقعا (Expected Shortfall، ويُعرف أيضا بـ Conditional VaR، الذي يستخدمه خط أنابيب المحفظة HRP/CVaR كهدف) ليوم واحد قادم مباشرة من التنبؤ الملائَم لـ GARCH-tt/skew-tt.

من التوزيع الشرطي إلى VaR

آلية GARCH تُعطي تنبؤا بخطوة واحدة للمتوسط الشرطي μt+1\mu_{t+1} والانحراف المعياري الشرطي σt+1\sigma_{t+1}. يُنمذج العائد كـ rt+1=μt+1+σt+1zt+1r_{t+1} = \mu_{t+1} + \sigma_{t+1} z_{t+1} مع zt+1z_{t+1} مسحوب من التوزيع المعياري الملائَم (غاوسي، tt، أو skew-tt). لذا فإن كمية-α\alpha لـ العائد هي مجرد تحويل تآلفي لكمية-α\alpha لـ التوزيع المعياري:

VaRα(t+1)=(μt+1+σt+1Fz1(1α))\text{VaR}_{\alpha}(t+1) = -\Bigl(\mu_{t+1} + \sigma_{t+1}\, F_z^{-1}(1-\alpha)\Bigr)

حيث Fz1F_z^{-1} هي دالة الكمية (معكوس دالة التوزيع التراكمي) للابتكار المعياري وإشارة الطرح الأولى تتبع الاصطلاح بأن VaR رقم خسارة موجب. لـ VaR بمستوى 99%، α=0.99\alpha = 0.99 وتُدخل Fz1(0.01)F_z^{-1}(0.01). الفائدة الكاملة لـ tt/skew-tt تظهر هنا: Fz1(0.01)F_z^{-1}(0.01) أكثر سلبية من 2.326-2.326 الغاوسية، فتكون VaR أكبر بصدق.

Expected Shortfall

تخبرك VaR بالعتبة؛ لا تقول شيئا عن مدى سوء الانتهاك عند حدوثه. Expected Shortfall، متوسط الخسارة بشرط تجاوز VaR، يفعل ذلك، وهو متماسك (تحت-جمعي subadditive)، ولهذا هو مقياس المخاطرة الكامن وراء تحسين CVaR والسبب في انتقال بازل إليه. بالنسبة لنموذج موقع-مقياس،

ESα(t+1)=(μt+1+σt+1E ⁣[zzFz1(1α)]).\text{ES}_{\alpha}(t+1) = -\Bigl(\mu_{t+1} + \sigma_{t+1}\, \mathbb{E}\!\left[z \mid z \leq F_z^{-1}(1-\alpha)\right]\Bigr).

حد التوقع الشرطي للذيل E[zzq]\mathbb{E}[z \mid z \le q] له صيغ مغلقة للتوزيعات القياسية. بالنسبة للتوزيع الغاوسي، مع q=Φ1(1α)q = \Phi^{-1}(1-\alpha),

E[zzq]=ϕ(q)1α,\mathbb{E}[z \mid z \le q] = -\frac{\phi(q)}{1-\alpha},

حيث ϕ\phi دالة الكثافة الاحتمالية الطبيعية المعيارية. بالنسبة لـ Student-tt المعياري بدرجات حرية ν\nu و q=tν1(1α)q = t_\nu^{-1}(1-\alpha) (على المقياس المعياري)، توقع الذيل هو

E[zzq]=ν+q2ν1gν(q)1α,\mathbb{E}[z \mid z \le q] = -\frac{\nu + q^2}{\nu - 1}\cdot\frac{g_\nu(q)}{1-\alpha},

حيث gνg_\nu دالة الكثافة الاحتمالية المعيارية لـ tt. الـ Expected Shortfall لـ tt يتجاوز نظيره الغاوسي بأكثر مما تتجاوزه VaR، لأن ذيل tt ليس فقط أبعد، بل أسمك، فمتوسط الخسارة وراء العتبة كبير بشكل غير متناسب. تلك الفجوة الإضافية هي الرقم الذي يخفيه عنك النموذج الغاوسي.

حساب VaR وES من نموذج arch ملائَم

توزيعات arch تُتيح طريقة ppf (الكمية)، فيمكننا الحصول على الكمية المعيارية مباشرة وتجنب إعادة اشتقاق أي شيء. بالنسبة لـ ES نُكامل عدديا، وهو متين ويعمل بشكل موحد عبر normal/t/skewt.

from scipy import integrate

def var_es_forecast(res, alpha=0.99):
    """
    One-step-ahead VaR and ES at level alpha, on the same (x100) scale
    as the returns fed to the model. Divide by 100 for fractional units.
    """
    fc = res.forecast(horizon=1, reindex=False)
    mu = fc.mean.iloc[-1, 0]
    sigma = np.sqrt(fc.variance.iloc[-1, 0])

    dist = res.model.distribution          # StudentsT / SkewStudent / Normal
    dp = [res.params[k] for k in res.params.index
          if k in ("nu", "eta", "lambda", "lam")]

    z_q = dist.ppf(1 - alpha, dp) if dp else dist.ppf(1 - alpha)
    z_q = float(np.atleast_1d(z_q)[0])

    def pdf(z):
        arr = np.atleast_1d(z).astype(float)
        lp = dist.loglikelihood(dp, arr, np.ones_like(arr), individual=True) \
             if dp else dist.loglikelihood([], arr, np.ones_like(arr),
                                           individual=True)
        return np.exp(lp)

    num, _ = integrate.quad(lambda z: z * pdf(z), -30, z_q, limit=200)
    es_z = num / (1 - alpha)               # E[z | z <= z_q]

    var = -(mu + sigma * z_q)
    es  = -(mu + sigma * es_z)
    return {"mu": mu, "sigma": sigma, "z_q": z_q,
            "VaR": var, "ES": es}

for name in ["GARCH-N", "GJR-t", "GJR-skewt"]:
    out = var_es_forecast(models[name], alpha=0.99)
    print(f"{name:11s}  sigma={out['sigma']:.2f}%  "
          f"z_q={out['z_q']:+.2f}  "
          f"VaR99={out['VaR']:.2f}%  ES99={out['ES']:.2f}%")

عمود z_q هو القصة كلها في رقم واحد. النموذج الغاوسي يستخدم zq2.33z_q \approx -2.33؛ الـ tt بـ ν4.3\nu \approx 4.3 يستخدم رقما قريبا من 3.3-3.3؛ الـ skew-tt يدفع كمية اليسار أبعد بينما يسحب اليمين للداخل. نفس σt+1\sigma_{t+1}، VaR أكبر ماديا. إذا كنت تُشغّل VaR غاوسية على العملات الرقمية، هذه هي الفجوة التي كنت تمتصها بصمت.

خطوة واحدة مقابل خطوات متعددة: تحذير

كل ما سبق تنبؤ بخطوة يوم واحد قادم، وهذا حيث تكون VaR الخاصة بـ GARCH أنظف ما تكون. أمران يُعقّدان الآفاق الأطول وينبغي معرفتهما قبل الاستقراء.

أولا، تنبؤات التباين تعود إلى المتوسط. تباين الخطوة الـ hh القادمة الشرطي من GARCH مستقر يتقارب نحو المستوى غير الشرطي σˉ2\bar\sigma^2 كلما ازدادت hh، والتباين التراكمي لـ hh يوما هو مجموع التنبؤات لكل خطوة؛ وهو ليس h×σt+12h\times\sigma_{t+1}^2 إلا إذا كان التقلب عند متوسطه طويل الأمد. التحجيم الساذج بـ "الجذر التربيعي للزمن" VaR(h)=hVaR(1)\text{VaR}(h) = \sqrt{h}\,\text{VaR}(1) يتجاهل هذا العودة إلى المتوسط ويكون خاطئا تحديدا بعد صدمة، عندما تحتاج الرقم أكثر ما تحتاجه. استخدم مسار التباين متعدد الخطوات الخاص بالنموذج نفسه.

ثانيا، توزيع عائد متعدد الأيام ليس بنفس شكل ابتكار اليوم الواحد. جمع عدة صدمات يومية موزعة بـ tt (عبر معادلة GARCH غير الخطية) لا يُعطي توزيع tt على أفق hh يوما؛ لا توجد صيغة مغلقة نظيفة. بالنسبة لـ VaR متعدد الأيام، الطريق الصادق هو المحاكاة: اسحب مسارات ابتكار من التوزيع المعياري الملائَم، شغّلها عبر معادلة GARCH التكرارية للحصول على مسارات عائد مُحاكاة، اجمعها إلى عوائد hh يوما، واقرأ الكمية العينية. هذا يتعامل بشكل طبيعي أيضا مع حالة skew-tt، حيث لا توجد كمية تحليلية متعددة الآفاق على الإطلاق. الصيغ التحليلية بخطوة واحدة في هذا المقال دقيقة؛ عامل أي اختصار متعدد الخطوات كتقريب يحتاج للتحقق منه.

اختبار VaR الخلفي: Kupiec وChristoffersen

تنبؤ VaR هو ادعاء احتمالي: "الخسارة ستتجاوز هذه العتبة فقط في (1α)(1-\alpha) من الأيام." تختبره بعد الانتهاكات (الأيام التي تجاوزت فيها الخسارة المحققة تنبؤ VaR) على مدى تقييم بالتقدم المتدحرج والتحقق من أمرين. أولا، هل معدل الانتهاك صحيح؟ ثانيا، هل الانتهاكات مستقلة، أم أنها تتكتل (مما يعني فشل النموذج بالضبط عندما يهم، أثناء طفرات التقلب)؟

ليكن It=1{losst>VaRt}I_t = \mathbf{1}\{\text{loss}_t > \text{VaR}_t\} متتالية الانتهاك، و N=ItN = \sum I_t عدد الانتهاكات على مدى TT يوما، و π^=N/T\hat{\pi} = N/T المعدل المُلاحَظ. المعدل المستهدف p=1αp = 1-\alpha.

اختبار التغطية غير الشرطية لكوبيك (Kupiec, 1995) يتحقق من π^p\hat\pi \approx p عبر نسبة إمكان:

LRuc=2log ⁣[pN(1p)TNπ^N(1π^)TN]    χ12.LR_{uc} = -2\log\!\left[\frac{p^{N}(1-p)^{T-N}}{\hat\pi^{N}(1-\hat\pi)^{T-N}}\right] \;\sim\; \chi^2_1.

اختبار استقلالية كريستوفرسن (Christoffersen, 1998) يتحقق من أن انتهاكا اليوم لا يُتنبأ به انتهاك الأمس. ليكن nijn_{ij} عدد الانتقالات من الحالة ii إلى الحالة jj في متتالية الانتهاك، π01=n01/(n00+n01)\pi_{01} = n_{01}/(n_{00}+n_{01})، π11=n11/(n10+n11)\pi_{11} = n_{11}/(n_{10}+n_{11})، و π=(n01+n11)/T\pi = (n_{01}+n_{11})/T. عندئذ

LRind=2log ⁣[(1π)n00+n10πn01+n11(1π01)n00π01n01(1π11)n10π11n11]    χ12.LR_{ind} = -2\log\!\left[\frac{(1-\pi)^{n_{00}+n_{10}}\,\pi^{\,n_{01}+n_{11}}}{(1-\pi_{01})^{n_{00}}\pi_{01}^{n_{01}}(1-\pi_{11})^{n_{10}}\pi_{11}^{n_{11}}}\right] \;\sim\; \chi^2_1.

يجتمع الاختباران في اختبار التغطية الشرطية LRcc=LRuc+LRindχ22LR_{cc} = LR_{uc} + LR_{ind} \sim \chi^2_2، الذي يتحقق في آن واحد من المعدل الصحيح والاستقلالية. يمكن لنموذج أن يجتاز Kupiec (عدد صحيح من الانتهاكات) لكنه يفشل في Christoffersen (كلها تجمعت في أسبوع انهيار واحد)؛ وهذا وضع الفشل الذي تريد أكثر ما تريد رصده، لأن الانتهاكات المتكتلة هي التي تُفجّر حسابا.

from scipy.stats import chi2

def var_backtest(losses, var, p):
    """
    losses, var: 1D arrays, same length; loss>0 is a loss, var>0 threshold.
    p = 1 - alpha (target violation rate, e.g. 0.01 for 99% VaR).
    Returns Kupiec, Christoffersen-independence, and conditional-coverage LR.
    """
    losses = np.asarray(losses)
    var = np.asarray(var)
    I = (losses > var).astype(int)          # violation indicators
    T = len(I)
    N = int(I.sum())
    pi_hat = N / T

    eps = 1e-12
    ll_null = N * np.log(p + eps) + (T - N) * np.log(1 - p + eps)
    ll_alt  = N * np.log(pi_hat + eps) + (T - N) * np.log(1 - pi_hat + eps)
    LR_uc = -2 * (ll_null - ll_alt)
    p_uc = 1 - chi2.cdf(LR_uc, df=1)

    n00 = np.sum((I[:-1] == 0) & (I[1:] == 0))
    n01 = np.sum((I[:-1] == 0) & (I[1:] == 1))
    n10 = np.sum((I[:-1] == 1) & (I[1:] == 0))
    n11 = np.sum((I[:-1] == 1) & (I[1:] == 1))
    pi01 = n01 / (n00 + n01) if (n00 + n01) else 0.0
    pi11 = n11 / (n10 + n11) if (n10 + n11) else 0.0
    pi   = (n01 + n11) / (n00 + n01 + n10 + n11)

    def _ll(pi01, pi11, pi_pooled, use_pooled):
        if use_pooled:
            a = (n00 + n10) * np.log(1 - pi_pooled + eps)
            b = (n01 + n11) * np.log(pi_pooled + eps)
            return a + b
        return (n00 * np.log(1 - pi01 + eps) + n01 * np.log(pi01 + eps)
                + n10 * np.log(1 - pi11 + eps) + n11 * np.log(pi11 + eps))

    LR_ind = -2 * (_ll(pi01, pi11, pi, True) - _ll(pi01, pi11, pi, False))
    p_ind = 1 - chi2.cdf(LR_ind, df=1)

    LR_cc = LR_uc + LR_ind
    p_cc = 1 - chi2.cdf(LR_cc, df=2)

    return {
        "T": T, "violations": N,
        "obs_rate": pi_hat, "target_rate": p,
        "LR_uc": LR_uc, "p_uc": p_uc,
        "LR_ind": LR_ind, "p_ind": p_ind,
        "LR_cc": LR_cc, "p_cc": p_cc,
    }

لتوليد مُدخلات losses/var بصدق، تُعيد الملاءمة (أو على الأقل إعادة التنبؤ) على نافذة متوسّعة أو متدحرجة وتُسجّل VaR بخطوة واحدة قادمة لكل يوم خارج العينة، ثم تُقارنها بالخسارة المحققة لذلك اليوم. لا تختبر VaR خلفيا داخل العينة أبدا؛ نموذج مُلائَم على نفس الانهيار المطلوب منه التنبؤ به سيبدو أفضل بكثير مما هو عليه. هذا نفس الانضباط الموجود في تطابق الاختبار الخلفي مع البيئة الحية: يجب أن يستخدم التقييم فقط المعلومات المتاحة وقت اتخاذ القرار.

def walk_forward_var(returns, alpha=0.99, start=750, refit_every=25,
                     vol="Garch", o=1, dist="t"):
    """
    Expanding-window one-step VaR. Refit every `refit_every` days
    (refitting daily is correct but slow; every ~25 days is a common
    compromise -- validate the shortcut on your data).
    """
    losses, vars_ = [], []
    res = None
    for t in range(start, len(returns)):
        if res is None or (t - start) % refit_every == 0:
            am = arch_model(returns.iloc[:t], mean="Constant",
                            vol=vol, p=1, o=o, q=1, dist=dist)
            res = am.fit(disp="off")
        fc = res.forecast(horizon=1, reindex=False)
        mu = fc.mean.iloc[-1, 0]
        sig = np.sqrt(fc.variance.iloc[-1, 0])
        dp = [res.params[k] for k in res.params.index
              if k in ("nu", "eta", "lambda", "lam")]
        z_q = float(np.atleast_1d(
            res.model.distribution.ppf(1 - alpha, dp) if dp
            else res.model.distribution.ppf(1 - alpha))[0])
        var_t = -(mu + sig * z_q)
        vars_.append(var_t)
        losses.append(-returns.iloc[t])     # realized loss for that day
    return np.array(losses), np.array(vars_)

losses, vars_ = walk_forward_var(r, alpha=0.99, dist="t")
print(var_backtest(losses, vars_, p=0.01))

القراءة: VaR بمستوى 99% معايرة جيدا تُظهر معدلا مُلاحَظا قريبا من 1%، وKupiec غير ذي دلالة (قيمة p_uc كبيرة)، وChristoffersen غير ذي دلالة (قيمة p_ind كبيرة)، أي بلا تكتل. عمليا، النتيجة الصادقة على العملات الرقمية هي أن GARCH-Normal يفشل في Kupiec (انتهاكات كثيرة جدا، p_uc ضئيلة) بينما GJR-tt أو EGARCH-tt ينجح أو يقترب من النجاح. هذا التباين هو حجة هذا المقال بأكملها مُقدَّمة كاختبار فرضية. إذا أظهر حتى نموذج tt انتهاكات متكتلة (p_ind صغيرة)، فديناميكيات التقلب لديك لا تزال غير مُحدَّدة النموذج بشكل صحيح؛ وغالبا ما تكون إشارة إلى حاجتك لذاكرة أطول (component/FIGARCH) أو طبقة أنظمة، وهذا يرتبط بـ كشف الأنظمة باستخدام HMM.

ترتيب النماذج حسب خسارة الذيل، لا مجرد نجاح/فشل

يُعطيك Kupiec وChristoffersen حكما ثنائيا؛ النموذج إما مرفوض أو غير مرفوض. هذا ضروري لكنه خشن: يمكن لنموذجين أن "ينجحا" كلاهما بينما أحدهما أدق فعليا بشكل ملموس. لترتيب تنبؤات VaR المتنافسة، سجّلها بدالة خسارة متسقة بشدة للكمية، خسارة pinball (الكمية):

Lτ(r,q)=(τ1{r<q})(rq),τ=1α,L_\tau(r, q) = \bigl(\tau - \mathbf{1}\{r < q\}\bigr)\,(r - q), \qquad \tau = 1-\alpha,

حيث qq هي كمية VaR (الموقّعة) و rr العائد المحقق. بالمتوسط عبر أيام خارج العينة، متوسط خسارة pinball أقل يعني كمية أفضل معايرة وأكثر حدة؛ ولأن الخسارة متسقة لكمية-τ\tau، تقليلها لا يكافئ نموذجا لكونه واسعا بتكاسل. لمقارنة نموذجين رسميا، غذِّ فروق خسارتهما اليومية إلى اختبار Diebold-Mariano.

def pinball_loss(returns, var, alpha=0.99):
    tau = 1 - alpha
    q = -np.asarray(var)               # VaR is a positive loss; quantile is negative
    r = np.asarray(returns)
    hit = (r < q).astype(float)
    return np.mean((tau - hit) * (r - q))

بالنسبة لـ Expected Shortfall تحديدا، لاحظ أن ES ليست قابلة للاستخراج (elicitable) بمفردها (لا توجد دالة خسارة يكون مُصغِّرها ES وحدها)، وهذه تعقيدة نظرية حقيقية: تُقيِّم ES بالاشتراك مع VaR باستخدام قواعد تسجيل Fissler-Ziggel، أو تعود إلى الممارسة الأبسط بالتحقق من أن متوسط حجم الانتهاك يطابق ES المتوقعة للنموذج. فحص ES خشن لكنه مفيد: بين أيام انتهاك VaR، قارن متوسط الخسارة المحققة بمتوسط ES المتوقعة في تلك الأيام؛ ينبغي أن يكونا قريبين.

الإطار التنظيمي هو نهج إشارة المرور لبازل: على مدى 250 يوم تداول، 0-4 انتهاكات لـ VaR بمستوى 99% "أخضر" (مقبول)، 5-9 "أصفر" (تدقيق)، 10+ "أحمر" (النموذج مرفوض وتزيد مُضاعِفات رأس المال). إنه ابن عم أخشن لـ Kupiec، لكنه اللغة التي تتحدثها لجان المخاطر فعليا، ويستحق الإبلاغ عنه إلى جانب إحصائيات LR.

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

عندما لا تُجدي المعلمات الإضافية

الافتراضي الصادق هو الشك تجاه التعقيد. كل معلمة تُضيفها هي مقبض يمكن للمُحسِّن أن يُفرط في ملاءمته، ولنموذج GARCH غير المتماثل ذي الذيل السميك عدة معلمات منها. إرشادات محددة:

  • العينات غير السائلة أو القصيرة. مع بضع مئات من المشاهدات اليومية، سيكون الخطأ المعياري لـ γ\gamma و λ\lambda كبيرا، وستُ"كتشف" عدم تماثل هو مجرد ضجيج عيني. على عملة بديلة جديدة أو رقيقة، غالبا ما يكون GARCH-tt المتماثل أكثر النماذج تعقيدا الذي تدعمه البيانات. ملاءمة skew-tt EGARCH على 200 يوم خداع لنفسك.
  • حد الالتواء غالبا لا يُغطي تكلفته. عمليا، الانتقال من الغاوسي إلى tt تحسن كبير وموثوق (الذيول السميكة حقيقية وقوية). الانتقال من tt إلى skew-tt غالبا هامشي، ربح BIC بمقدار 1 أو 2 نقطة، أحيانا سلبي. أضف الالتواء فقط عندما تطلبه البيانات بوضوح.
  • EGARCH مقابل GJR عادة تعادل على البيانات اليومية. يُشفّران القصة النوعية ذاتها بصيغ وظيفية مختلفة. اختر حسب اختبار VaR الخلفي خارج العينة، لا حسب أيهما لديه إمكان لوغاريتم أجمل داخل العينة.
  • التردد الأعلى يُغيّر الإجابة. على أشرطة ساعية أو دقيقية، تهيمن الموسمية داخل اليوم وبنية السوق الدقيقة، وGARCH بنمط يومي بسيط يكون سيئ التحديد بغض النظر عن عدم التماثل. مشكلة مختلفة، أدوات مختلفة.

هذا نفس درس التقييم الصادق بلا ميزة متينة: نموذج أكثر تعقيدا لا ينجو من الاختبار خارج العينة أسوأ من النموذج البسيط الذي استبدله، لأنه يحمل وهم الدقة. أبلغ عن النتيجة السلبية، "الالتواء لم يساعد على ETH"، كنتيجة حقيقية، واستخدم التحسين بالتقدم المتدحرج كحَكَم، لا AIC داخل العينة.

هذه هي التوزيعات الهامشية التي يبني عليها الجميع

النماذج هنا ليست نقطة نهاية؛ إنها لبنة البناء أحادية المتغير للآلية المشتركة للمخاطر. يستخدم مقال نماذج الكوبولا للمخاطر المشتركة للعملات الرقمية بالضبط EGARCH/GJR-tt كتوزيعات هامشية GARCH-EVT قبل ملاءمة كوبولا كرمية؛ تُلائم GARCH غير متماثل ذا ذيل سميك لكل أصل، تستخرج البواقي المعيارية، وعندها فقط تُنمذج التبعية عبر الأصول. إذا كانت توزيعتك الهامشية GARCH غاوسي متماثل، ترث الكوبولا أخطاء ذيلها بغض النظر عن جودة نموذج التبعية. توزيعات هامشية رديئة، VaR مشتركة رديئة.

بالنسبة لمشكلة التقلب متعدد المتغيرات، أي الارتباطات المتغيرة بالزمن بدلا من تباينات كل أصل، انظر الجزء الثالث، DCC-GARCH، الذي يُضيف طبقة نموذج ارتباط ديناميكي فوق هذه الملاءمات أحادية المتغير. ولتحويل تنبؤ التقلب إلى حجم مركز واختبار تداول خلفي، الجزء الرابع حول استهداف التقلب يستخدم تنبؤات σt+1\sigma_{t+1} من هذه النماذج بالضبط لتحجيم التعرض عكسيا مع المخاطر المتوقعة.

بديل خالٍ من افتراض التوزيع

كل شيء في قسم المخاطر يستند إلى افتراض معلمي: أن البواقي المعيارية تتبع tt أو skew-tt. هذا الافتراض قابل للاختبار وعادة معقول، لكنه يمكن أن يفشل. إذا كنت تفضل عدم الالتزام بشكل ذيل على الإطلاق، فإن التنبؤ المطابق (conformal prediction) يُعطي فترات تنبؤ خالية من افتراض التوزيع بضمانات تغطية للعينة المحدودة، فلسفة مختلفة حقا لا تدّعي شيئا عن توزيع الابتكار. النهجان متكاملان: GARCH-tt المعلمي يُعطيك كثافة شرطية كاملة (وبالتالي ES، التي لا تُقدّمها فترات المطابقة مباشرة)، بينما المطابقة تُعطيك تغطية تصمد حتى عندما تكون كثافتك خاطئة. في الإنتاج، استخدام الاثنين كفحص متبادل تأمين رخيص.

نظافة عددية وسير عمل

  • قِس العوائد بضرب 100. مُحسِّنات GARCH تتقارب بشكل أكثر موثوقية على عوائد بالنسبة المئوية منها على عوائد كسرية خام. تذكّر إلغاء القياس لـ VaR/ES إذا أبلغت بوحدات كسرية.
  • راقب الاستمرارية. إذا قُدِّرت α+β+12γ\alpha + \beta + \tfrac12\gamma فوق ~0.999، فالنموذج شبه متكامل (شبيه بـ IGARCH)؛ التنبؤات تعود إلى المتوسط ببطء شديد وتنبؤات التباين طويل الأفق تصبح غير موثوقة. ليس خاطئا بالضرورة، لكن ضع علامة عليه.
  • فشل التقارب على النوافذ المتدحرجة. صيغة EGARCH اللوغاريتمية تتجنب قيود الإيجابية لكنها لا تزال يمكن أن تفشل في التقارب على نافذة شاذة. غلّف fit() في try/except وارجع إلى معلمات النافذة السابقة بدلا من تعطيل اختبار خلفي حي.
  • نموذج المتوسط. استخدمنا متوسطا ثابتا طوال المقال. بالنسبة لمعظم العملات الرقمية اليومية، المتوسط الشرطي قريب من الصفر ويطغى عليه التقلب؛ لا تُنفق تعقيد نموذج في محاولة التنبؤ به إلا إذا كان لديك سبب حقيقي.

الخلاصة

  • لنموذج GARCH(1,1) البسيط عيبان بنيويان: متماثل (يتفاعل مع +x%+x\% وx%-x\% بشكل متطابق لأن الصدمات تدخل كـ ε2\varepsilon^2) ويفترض ابتكارات غاوسية (يُقلل من تقييم ذيول العملات الرقمية السميكة). كلاهما يُكلّف مالا حقيقيا عبر VaR متفائلة.
  • GJR-GARCH يُضيف حد عتبة γI(εt1<0)εt12\gamma\,I(\varepsilon_{t-1}<0)\,\varepsilon_{t-1}^2. γ>0\gamma > 0 ذات دلالة هي أثر الرافعة المالية: الأخبار السيئة ترفع التقلب أكثر. الإيجابية تتطلب α+γ0\alpha+\gamma\ge0؛ الاستمرارية هي α+β+12γ\alpha+\beta+\tfrac12\gamma.
  • EGARCH يُنمذج logσt2\log\sigma_t^2، فلا قيود إيجابية والاستقرارية هي ببساطة β<1|\beta|<1. عدم التماثل يدخل عبر حد موقّع γzt1\gamma z_{t-1} (الرافعة المالية هي γ<0\gamma<0 في هذا الاصطلاح) منفصل عن حد الحجم zt1|z_{t-1}|.
  • منحنى أثر الأخبار، تباين الفترة التالية مقابل آخر صدمة، يجعل عدم التماثل مرئيا ويتحقق من اصطلاح إشارة EGARCH بنظرة واحدة.
  • ابتكارات Student-tt (dist='t') تُصلح الذيول عبر درجات حرية ν\nu (عادة 3-6 للعملات الرقمية)؛ skew-tt الخاص بهانسن (dist='skewt') يُضيف التواء λ\lambda لذيل أيسر أثقل. الانتقال من الغاوسي إلى tt مكسب كبير موثوق؛ tt إلى skew-tt غالبا هامشي.
  • VaR وES تُشتقان من التوزيع الشرطي الملائَم: VaRα=(μt+1+σt+1Fz1(1α))\text{VaR}_\alpha = -(\mu_{t+1} + \sigma_{t+1}F_z^{-1}(1-\alpha))، مع كمية الذيل السميك التي تجعل المخاطرة أكبر بصدق من الغاوسية. ES (متماسكة، تقريبا CVaR) تلتقط متوسط الخسارة وراء VaR.
  • اختبر خلفيا بـ Kupiec وChristoffersen. Kupiec يتحقق من معدل الانتهاك؛ Christoffersen يتحقق من أن الانتهاكات غير متكتلة. يمكن لنموذج أن ينجح في أحدهما ويفشل في الآخر؛ الانتهاكات المتكتلة هي وضع الفشل الخطير. اختبر خلفيا خارج العينة بصرامة.
  • الانضباط فوق التعقيد. أضف عدم التماثل/الالتواء فقط عندما ينجو من BIC و اختبار VaR خلفي خارج العينة. على السلاسل القصيرة أو غير السائلة، النموذج الأبسط عادة يفوز.

References:

  • Nelson, D. B. (1991). Conditional heteroskedasticity in asset returns: A new approach. Econometrica, 59(2), 347-370. DOI
  • Glosten, L. R., Jagannathan, R., & Runkle, D. E. (1993). On the relation between the expected value and the volatility of the nominal excess return on stocks. Journal of Finance, 48(5), 1779-1801. DOI
  • Bollerslev, T. (1987). A conditionally heteroskedastic time series model for speculative prices and rates of return. Review of Economics and Statistics, 69(3), 542-547. DOI
  • Hansen, B. E. (1994). Autoregressive conditional density estimation. International Economic Review, 35(3), 705-730. DOI
  • Engle, R. F., & Ng, V. K. (1993). Measuring and testing the impact of news on volatility. Journal of Finance, 48(5), 1749-1778. DOI
  • Christoffersen, P. F. (1998). Evaluating interval forecasts. International Economic Review, 39(4), 841-862. DOI
  • Kupiec, P. H. (1995). Techniques for verifying the accuracy of risk measurement models. Journal of Derivatives, 3(2), 73-84. DOI
  • Black, F. (1976). Studies of stock price volatility changes. Proceedings of the American Statistical Association, Business and Economic Statistics Section, 177-181.
  • McNeil, A. J., Frey, R., & Embrechts, P. (2015). Quantitative Risk Management: Concepts, Techniques and Tools (2nd ed.). Princeton University Press.
  • Sheppard, K. (2023). arch: Autoregressive conditional heteroskedasticity models in Python. GitHub.
blog.disclaimer

MarketMaker.cc Team

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

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

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

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

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