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

استهداف التقلب والتداول باستخدام توقعات GARCH

#volatility
#GARCH
#volatility-targeting
#backtesting
#risk
#crypto
#algorithmic-trading

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

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

يدور هذا الجزء الأخير حول إغلاق تلك الحلقة. نأخذ التوقعات من الأجزاء 1-3 ونضعها في العمل في أنظف قرار ممكن: استهداف التقلب — تحجيم المركز بحيث يصل التقلب المحقق للمحفظة إلى هدف ثابت. ثم نفعل الشيء الذي تهتم به هذه المدونة أكثر من أي نموذج مفرد: نقيّم بأمانة. نقارن GARCH بمعايير مرجعية بسيطة لكنها قوية (التقلب المحقق المتدحرج، EWMA)، ونستخدم دوال خسارة متينة أمام حقيقة أننا لا نستطيع أبدًا رصد التقلب الحقيقي، ونجري اختبارًا خلفيًا walk-forward مع التكاليف وبلا نظر مستقبلي، ونذكر بوضوح ما يشتريه لك استهداف التقلب وما لا يشتريه. للتلخيص: إنه يحسّن العوائد المعدّلة بالمخاطر ويروّض عمليات السحب (drawdowns) بموثوقية أكبر بكثير مما يصنع به ألفا.

لماذا يُعد استهداف التقلب هو الاختبار الصحيح

توجد طرق أكثر تعقيدًا لاستخدام توقع التقلب — تسعير الخيارات، وحدود VaR، والتحوّط الديناميكي — لكن استهداف التقلب هو الطريقة التي تعزل قيمة التوقع بأقل تلوّث من الرهانات الأخرى. الفكرة معادلة واحدة.

احتفظ بأصل محفوف بالمخاطر باتجاه تمليه إشارة (لنبقَ الآن على "شراء" فحسب). بدلًا من مركز ثابت، حجّم الانكشاف عكسيًا مع التقلب المتوقع:

wt=σtargetσ^t(then capped)w_t = \frac{\sigma_{\text{target}}}{\hat{\sigma}_{t}} \quad \text{(then capped)}

حيث σ^t\hat{\sigma}_t هو توقعك لتقلب الفترة التالية (مصنوع باستخدام البيانات حتى tt فقط)، و σtarget\sigma_{\text{target}} هو التقلب السنوي الذي تريد أن تعمل عنده الاستراتيجية — لنقل 15% أو 20%. عندما يتوقع النموذج سوقًا هادئة، ترفع الرافعة نحو (أو تتجاوز) 1.0؛ وعندما يتوقع عاصفة، تنكمش. التقلب المحقق للمركز المحجَّم هو، في الترتيب الأول،

Vol(wtrt+1)=wtσt+1=σtargetσ^tσt+1σtarget\text{Vol}(w_t r_{t+1}) = w_t \, \sigma_{t+1} = \frac{\sigma_{\text{target}}}{\hat\sigma_t}\, \sigma_{t+1} \approx \sigma_{\text{target}}

كلما كان σ^tσt+1\hat\sigma_t \approx \sigma_{t+1}. إذًا تتوقف جودة التمرين كلها على شيء واحد: مدى قرب توقعك σ^t\hat\sigma_t من التقلب الفعلي للفترة التالية σt+1\sigma_{t+1}. يُنتج التوقع الأفضل مخطط تقلب محقق أكثر استواءً و — كما سنرى — نسبة شارب أفضل. لهذا السبب هذا هو الاختبار الصحيح. التوقع ليس زينة؛ إنه المقام.

لماذا يرفع هذا نسبة شارب ويضبط عمليات السحب

حقيقتان تجريبيتان تقومان بالعمل هنا.

التقلب أكثر قابلية للتوقع بكثير من العوائد. اتجاه عائد BTC للغد قريب من رمي عملة معدنية على التردد اليومي؛ أما المقدار فلا. يتجمّع التقلب في عناقيد — تتبع الحركات الكبيرة الحركات الكبيرة — وهو السبب الكامل لوجود GARCH (اشتقّ الجزء الأول بنية AR(1)-في-التباين التي تُشفّر ذلك). قيمة R2R^2 بمقدار 0.4-0.6 للتباين ليوم واحد قدمًا أمر روتيني؛ نفس الرقم للعوائد سيكون إشارة من طراز Renaissance. يستغل استهداف التقلب الكمية القابلة للتوقع ويبقى محايدًا حيال غير القابلة للتوقع.

نسب شارب ليست ثابتة عبر الزمن؛ إنها تنخفض عندما يقفز التقلب. أنظمة التقلب العالي في العملات المشفرة — سلاسل تصفية الرافعة، وإخفاقات المنصات، والأيام التي يقفز فيها كل شيء 30% — تميل إلى أن يكون عائدها لكل وحدة مخاطرة أسوأ، لا أفضل. بقطع الانكشاف آليًا بالضبط عندما يكون التقلب المتوقع عاليًا، فإنك تقلّل وزن الفترات التي تساهم أكثر ما تساهم في عمليات السحب وأقل ما تساهم في العائد المركّب. أظهر Moreira و Muir (2017) للأسهم أن المحافظ المُدارة بالتقلب — هذا التحجيم بالضبط بمقدار 1/σ21/\sigma^2 — ترفع نسب شارب وتنتج ألفا موجبة أمام العامل غير المُدار. الآلية ليست سحرًا؛ إنها رفض الاحتفاظ بمركز دولاري ثابت في نوافذ مضطربة بشكل متوقّع.

فائدة السحب أكثر مباشرة. يهيمن على السحب الأقصى ذيل توزيع عائد المركز. بما أن wtrt+1w_t r_{t+1} له تقلب مثبّت قرب σtarget\sigma_{\text{target}}، فإن الذيل الأيسر السمين الذي تعانيه استراتيجية ذات قيمة اسمية ثابتة أثناء انفجار التقلب يُضغط: كنت صغيرًا أصلًا عند الدخول. لا يتنبأ استهداف التقلب بالانهيارات، لكنه دومًا منخفض الانكشاف عندما يكون السوق مضطربًا، والاضطراب هو وقت حدوث الانهيارات.

العلاقة مع Kelly والتحجيم الجزئي

استهداف التقلب هو ابن عمّ قريب لمعيار Kelly. لأصل مفرد بعائد فائض متوقع μ\mu وتباين σ2\sigma^2، فإن الكسر الأمثل للنمو (Kelly الكامل) هو

f=μσ2.f^\star = \frac{\mu}{\sigma^2}.

إذا افترضت أن نسبة شارب μ/σ\mu/\sigma ثابتة تقريبًا — افتراض قوي، لكنه الافتراض الضمني في "السوق يدفع سعرًا مستقرًا مقابل المخاطرة" — فإن μ=Sσ\mu = S\sigma و f=S/σf^\star = S/\sigma، وهو بالضبط استهداف التقلب مع σtarget=S(Kelly fraction)\sigma_{\text{target}} = S \cdot (\text{Kelly fraction}). بعبارة أخرى، استهداف التقلب هو تحجيم Kelly تحت افتراض أن العائد المتوقع يتناسب مع التقلب. نعمل خلال Kelly الكامل والجزئي، ولماذا لا يتداول أي عاقل عند Kelly الكامل، في معيار Kelly وتحجيم الاستراتيجية. الدرس العملي من هناك ينتقل إلى هنا: استخدم كسرًا من الحجم النظري، لأن خطأ التقدير في المقام (توقع تقلبك) وخصوصًا في البسط (العائد المتوقع) يجعل التحجيم الكامل عدوانيًا بشكل خطير.

رابطان آخران جديران بالإبقاء في الذهن. أولًا، يحجّم استهداف التقلب على التشتت المتماثل للعوائد، لكن مردودات العملات المشفرة ليست متماثلة — تكلفة يوم هبوط 20% ليست انعكاسًا ليوم صعود 20% بمجرد أن يدخل الرفع والتصفية في المعادلة. نعالج هذا اللاتماثل مباشرة في لاتماثل الخسارة-الربح، وتوقع GJR/EGARCH (الجزء الثاني) يخبز بعضه أصلًا في σ^t\hat\sigma_t بالتفاعل أكثر مع الصدمات السلبية. ثانيًا، توقع التقلب تقدير نقطي؛ ورؤية مخاطر أكثر اكتمالًا تُرفق به فترة. يبيّن التنبؤ المطابق للتداول كيف تحوّل مخرجات النموذج إلى فترات خالية من التوزيع يمكنك التحجيم أمامها، وهو ما يقترن طبيعيًا بموضوع التقييم الأمين في هذا المقال.

المنافسون: ما على GARCH أن يهزمه

هذا هو الانضباط الذي يفصل التقييم الحقيقي عن العرض التوضيحي. قبل أن تتوّج GARCH، يجب أن تعطيه خصومًا رخيصين وواضحين ويصعب هزيمتهم بشكل مفاجئ. إذا لم يستطع نموذجك GJR-t المتقن أن يتفوق على EWMA من خمسة أسطر، فقد تعلّمت شيئًا قيّمًا ووفّرت على نفسك كثيرًا من تعقيد الإنتاج.

نقارن أربعة متنبّئين بتقلب الفترة التالية.

(أ) التقلب المحقق المتأخّر (الانحراف المعياري المتدحرج)

أكثر التوقعات سذاجة: تقلب الغد يساوي الانحراف المعياري للعينة لآخر nn عائد يومي.

σ^tRV=1n1i=1n(rti+1rˉ)2\hat\sigma_{t}^{\text{RV}} = \sqrt{\frac{1}{n-1}\sum_{i=1}^{n}\bigl(r_{t-i+1}-\bar r\bigr)^2}

لديه معامل فائق واحد (النافذة nn، عادة 20-60 يومًا) ولا نموذج. عيبه أن كل مشاهدة في النافذة تنال وزنًا متساويًا ثم تسقط فجأة عن حافة الجرف عند خروجها — أثر "الشبح" أو "الصدى"، حيث يضخّم يوم انهيار واحد التوقع طوال nn يومًا بالضبط ثم يتلاشى بين عشية وضحاها، سواء هدأ السوق فعلًا أم لا.

(ب) EWMA / RiskMetrics (λ=0.94\lambda = 0.94)

المتوسط المتحرك المرجّح أُسّيًا يصلح مشكلة الصدى بإعطاء وزن يتضاءل هندسيًا للعوائد المربّعة الأقدم:

σ^t2=λσ^t12+(1λ)rt2\hat\sigma_{t}^{2} = \lambda\,\hat\sigma_{t-1}^{2} + (1-\lambda)\,r_{t}^{2}

هذا هو مقدّر RiskMetrics (J.P. Morgan, 1996). مع القيمة القانونية λ=0.94\lambda = 0.94 للبيانات اليومية، تكون الذاكرة الفعّالة نحو 1/(1λ)171/(1-\lambda) \approx 17 يومًا، لكن الاضمحلال سلس — بلا جرف. لاحظ ما هو EWMA فعليًا: إنه GARCH(1,1) متكامل مع ω=0\omega = 0 و α+β=1\alpha + \beta = 1، أي GARCH بلا ارتداد للمتوسط وبلا تباين طويل الأجل. لديه صفر معامل حر إذا قبلت λ=0.94\lambda = 0.94، وهو أقسى معيار مرجعي مفرد في هذا المقال بأكمله. جزء كبير من أوراق "GARCH يهزم X" تفشل بهدوء في هزيمة EWMA خارج العينة.

import numpy as np
import pandas as pd

def ewma_vol(returns: pd.Series, lam: float = 0.94, sigma0: float | None = None) -> pd.Series:
    """RiskMetrics EWMA conditional volatility (returns in decimal, e.g. 0.03).

    sigma2_t = lam * sigma2_{t-1} + (1 - lam) * r_t^2
    Returns a series aligned to `returns` where value at t uses info up to t.
    """
    r2 = np.square(returns.values)
    var = np.empty_like(r2)
    var[0] = sigma0**2 if sigma0 is not None else r2[0]
    for t in range(1, len(r2)):
        var[t] = lam * var[t - 1] + (1.0 - lam) * r2[t - 1]  # note: r_{t-1}, no look-ahead
    return pd.Series(np.sqrt(var), index=returns.index, name="ewma_vol")

الدقيقة الوحيدة التي تُعثِر الناس: التوقع لأجل الفترة tt (القابل للاستخدام في تحجيم مركز يُحتفظ به على مدى tt) يجب أن يُبنى من العوائد المرصودة قبل tt. في التكرار أعلاه، تستخدم var[t] القيمة r2[t-1]، فتكون السلسلة توقعًا حقيقيًا بخطوة واحدة إلى الأمام. ضبط هذا الفهرس بشكل صحيح هو الفرق بين اختبار خلفي وفانتازيا — المزيد عن ذلك في قسم walk-forward.

(ج) GARCH(1,1) و GJR-t (الأجزاء 1-2)

بطلانا. GARCH(1,1) القياسي:

σt2=ω+αϵt12+βσt12,ω>0, α,β0, α+β<1\sigma_t^2 = \omega + \alpha\, \epsilon_{t-1}^2 + \beta\,\sigma_{t-1}^2, \qquad \omega>0,\ \alpha,\beta\ge0,\ \alpha+\beta<1

مع التباين طويل الأجل σˉ2=ω/(1αβ)\bar\sigma^2 = \omega/(1-\alpha-\beta) وتوقع الخطوة الواحدة يخرج مباشرة من التكرار (الجزء الأول). يضيف امتداد GJR-GARCH حدّ رفع بحيث ترفع الصدمات السلبية التباين أكثر من الإيجابية:

σt2=ω+(α+γ1[ϵt1<0])ϵt12+βσt12\sigma_t^2 = \omega + (\alpha + \gamma\, \mathbb{1}[\epsilon_{t-1}<0])\,\epsilon_{t-1}^2 + \beta\,\sigma_{t-1}^2

ومقرونًا بابتكارات Student-t لمعالجة الذيول السمينة للعملات المشفرة، هذا هو GJR-t من الجزء الثاني. السبب في أن GARCH يستطيع هزيمة EWMA هو الارتداد للمتوسط: بعد صدمة، يسحب GARCH التوقع عائدًا نحو σˉ2\bar\sigma^2 بمعدل يحكمه α+β\alpha+\beta، بينما EWMA (كونه متكاملًا) لا يرتد أبدًا. عندما يقفز التقلب ثم يعود للطبيعي — الحالة الشائعة — يضمحل توقع GARCH عائدًا أسرع وأدق. عندما يكون التقلب مستمرًا بحق، يكاد الاثنان لا يتمايزان.

(د) HAR-RV على التباين المحقق (إن كان لديك بيانات داخل اليوم)

إذا كان لديك أشرطة داخل اليوم — وفي أسواق العملات المشفرة العاملة 24/7 يكون ذلك متاحًا دائمًا تقريبًا — يمكنك بناء وكيل تقلب أقل ضجيجًا بكثير من العوائد المربّعة اليومية: التباين المحقق، مجموع العوائد المربّعة داخل اليوم على مدى اليوم.

RVt=i=1Mrt,i2(e.g. M=288 five-minute bars)RV_t = \sum_{i=1}^{M} r_{t,i}^2 \qquad (\text{e.g. } M = 288 \text{ five-minute bars})

يتنبأ نموذج Heterogeneous Autoregressive لـ Corsi (2009) بالتباين المحقق للغد من المتوسطات اليومية والأسبوعية والشهرية لـ RVRV الماضية — طريقة خام لكنها فعّالة بشكل لافت لالتقاط الاستمرارية طويلة الذاكرة بثلاثة مُنحدرات:

RVt+1=β0+βdRVt+βwRVt(5)+βmRVt(22)+ut+1RV_{t+1} = \beta_0 + \beta_d\, RV_t + \beta_w\, \overline{RV}_t^{(5)} + \beta_m\, \overline{RV}_t^{(22)} + u_{t+1}

حيث RVt(5)\overline{RV}_t^{(5)} و RVt(22)\overline{RV}_t^{(22)} هما المتوسطان المتأخران على 5 أيام و22 يومًا لـ RVRV اليومي. إنه انحدار OLS عادي، ويستغل الوكيل داخل اليوم الأعلى جودة، وكثيرًا ما يكون أفضل متنبّئ بالتقلب اليومي من الأربعة — يهزم GARCH غالبًا لأن RVRV هدف أنظف من r2r^2.

import numpy as np
import pandas as pd

def realized_variance(intraday_returns: pd.Series, day_index) -> pd.Series:
    """Daily realized variance = sum of squared intraday (log) returns per day.
    `intraday_returns` indexed by timestamp; `day_index` maps to calendar day.
    """
    return intraday_returns.pow(2).groupby(day_index).sum()

def har_features(rv: pd.Series) -> pd.DataFrame:
    """Build HAR regressors from a daily realized-variance series."""
    df = pd.DataFrame({"rv": rv})
    df["rv_d"] = df["rv"].shift(1)                          # yesterday
    df["rv_w"] = df["rv"].shift(1).rolling(5).mean()        # trailing week
    df["rv_m"] = df["rv"].shift(1).rolling(22).mean()       # trailing month
    df["target"] = df["rv"]                                 # predict today's RV
    return df.dropna()

def fit_har(rv: pd.Series):
    """Fit HAR-RV by OLS. Returns (coef_dict, predict_fn)."""
    df = har_features(rv)
    X = np.column_stack([np.ones(len(df)), df["rv_d"], df["rv_w"], df["rv_m"]])
    y = df["target"].values
    beta, *_ = np.linalg.lstsq(X, y, rcond=None)
    names = ["const", "rv_d", "rv_w", "rv_m"]

    def predict(rv_d, rv_w, rv_m):
        return float(beta @ np.array([1.0, rv_d, rv_w, rv_m]))

    return dict(zip(names, beta)), predict

ملاحظة عن log-HAR: لأن RVRV ملتوٍ يمينًا وموجب تمامًا، يُخضع كثير من الممارسين logRVt+1\log RV_{t+1} لانحدار على سمات HAR اللوغاريتمية، ما يحسّن الملاءمة ويضمن توقعات موجبة. عند أخذ الأس للرجوع ينبغي أن تضيف تصحيح Jensen بنصف التباين، RV^=exp(y^+12σ^u2)\widehat{RV} = \exp(\hat{y} + \tfrac{1}{2}\hat\sigma_u^2)، وإلا فستنقص توقعك بشكل منهجي.

مع أربعة متنبّئين في اليد — RV و EWMA و GARCH/GJR-t و HAR — يصبح السؤال: كيف نقرّر أيها الأفضل، ونحن لا نستطيع أبدًا رؤية الشيء الذي يحاولون جميعًا التنبؤ به؟

تقييم توقع التقلب بأمانة

هذا هو التعليم الجوهري للمقال، فتمهّل هنا.

تريد مقارنة توقعات σ^t2\hat\sigma_t^2 بالتباين الشرطي الحقيقي σt2\sigma_t^2. لكن σt2\sigma_t^2 كمية كامنة — إنها معلمة لعملية توليد البيانات، لا تُرصد مباشرة أبدًا. كل ما تحصل عليه عائد محقق واحد في اليوم. لذا فإن كل تقييم للتقلب هو في الواقع مقارنة لتوقعك أمام وكيل مشوّش بالضجيج للحقيقة. الوكيلان القياسيان:

  • العوائد المربّعة rt2r_t^2. غير متحيّز لـ σt2\sigma_t^2 تحت نموذج متوسطه صفر (E[rt2Ft1]=σt2\mathbb{E}[r_t^2 \mid \mathcal{F}_{t-1}] = \sigma_t^2)، لكنه مشوّش للغاية: عائد يومي واحد هو تقدير بمشاهدة واحدة لانحراف معياري. يمكن أن يكون الوكيل rt2r_t^2 صفرًا (يوم مسطّح) حتى عندما يكون التقلب الحقيقي عاليًا، أو ضخمًا في يوم ذيلي محظوظ.
  • التباين المحقق RVtRV_t من بيانات داخل اليوم. أقل ضجيجًا بكثير — تُوسّط أخذ العينات داخل اليوم ضجيج العائد المفرد الخاص — وهو بالضبط سبب نجاح HAR-RV وسبب وجوب استخدامك RVRV وكيلًا إن كان لديك أي بيانات داخل اليوم على الإطلاق.

الدقيقة التي توقع الجميع تقريبًا: لأن الوكيل مشوّش، فإن اختيار دالة الخسارة ليس بريئًا. رتّب توقعين بالخسارة الخاطئة، وقد يقلب الوكيل المشوّش الترتيب، فيخبرك أن التوقع الأسوأ هو الأفضل. حدّد Patton (2011) بدقة أي دوال الخسارة "متينة" بمعنى أن ترتيب التوقعات بالخسارة المتوقعة على الوكيل المشوّش يعطي نفس الترتيب الذي ستحصل عليه على التباين الحقيقي (غير القابل للرصد). تتأهل عائلة محددة فقط. عضوان يهمّان عمليًا.

MSE مقابل QLIKE

متوسط مربع الخطأ على التباين:

LMSE(σ2,h)=(σ2h)2L_{\text{MSE}}(\sigma^2, h) = (\sigma^2 - h)^2

حيث h=σ^2h = \hat\sigma^2 هو التوقع و σ2\sigma^2 يُمثَّل بوكيل r2r^2 أو RVRV. MSE متينة بمعنى Patton (ترتيبها متسق مع الوكيل)، لكنها متماثلة ومعتمدة على المقياس: تعاقب على التوقع الزائد والتوقع الناقص من نفس الحجم المطلق بالتساوي، وتزن الأخطاء أثناء فترات التقلب العالي أكثر بكثير من الأخطاء أثناء الفترات الهادئة. نموذج يصيب الـ 95% الهادئة من الأيام لكنه يفجّر توقعات التباين في أيام الأزمة الثلاثة سيبدو مروّعًا تحت MSE، حتى لو كان سلوكه في الأزمة هو بالضبط ما تريده.

خسارة QLIKE (شبه الأرجحية) هي حصان العمل:

LQLIKE(σ2,h)=σ2hlogσ2h1L_{\text{QLIKE}}(\sigma^2, h) = \frac{\sigma^2}{h} - \log\frac{\sigma^2}{h} - 1

إنها الخسارة التي تتضمّنها أرجحية غاوسية على التباين، وهي أيضًا متينة بمعنى Patton، ولها خاصيتان تجعلانها الخيار المفضّل للتقلب. أولًا، إنها لامتماثلة في الاتجاه الصحيح: تعاقب على التنبؤ الناقص للتباين أكثر من التنبؤ الزائد. لمدير مخاطر أو لمُستهدِف تقلب، هذا هو اللاتماثل الصحيح — التنبؤ الناقص للتقلب يعني أنك أخذت حجمًا كبيرًا جدًا قبل أن يهمّ مباشرة، وهو الخطأ المكلف. ثانيًا، إنها (تقريبًا) ثابتة على المقياس: لأنها تعتمد على النسبة σ2/h\sigma^2/h، فإن خطأ توقع بنسبة 10% يكلّف نحو نفس القدر سواء وقع في يوم هادئ أو يوم أزمة، فلا يُختطف التقييم بحفنة من مشاهدات التباين العالي كما تُختطف MSE. تلك المتانة أمام عدم تجانس تباين الوكيل هي بالضبط ما تريده عندما يكون كل الموضوع أن التقلب يتغير بعنف.

لاحظ أن LQLIKE0L_{\text{QLIKE}} \ge 0، مع المساواة إذا وفقط إذا h=σ2h = \sigma^2. الأقل أفضل، مثل MSE.

import numpy as np

def qlike(proxy: np.ndarray, forecast_var: np.ndarray) -> np.ndarray:
    """Per-observation QLIKE loss. `proxy` is r^2 or RV (a variance proxy),
    `forecast_var` is h = sigma_hat^2. Both strictly positive, same units.
    """
    ratio = proxy / forecast_var
    return ratio - np.log(ratio) - 1.0

def mse_var(proxy: np.ndarray, forecast_var: np.ndarray) -> np.ndarray:
    """Per-observation MSE on the variance scale."""
    return np.square(proxy - forecast_var)

تحذيران تشغيليان. أبقِ الوكيل والتوقع بوحدات متطابقة (كلاهما تباينات يومية، أو كلاهما مُسنوَن) وإلا فالنسبة بلا معنى. ولا تدع forecast_var تصل إلى الصفر أبدًا — قصّها إلى أرضية صغيرة، لأن log0\log 0 سيسمّم المتوسط بأكمله.

انحدار Mincer-Zarnowitz

رقم خسارة واحد يخبرك أي توقع أفضل؛ لا يخبرك كيف يخطئ التوقع. انحدار Mincer-Zarnowitz (1969) يفعل. أخضِع الوكيل لانحدار على التوقع:

rt2  =  a+bσ^t2+ut.r_t^2 \;=\; a + b\,\hat\sigma_t^2 + u_t.

تحت توقع أمثل غير متحيّز، a=0a = 0 و b=1b = 1: في المتوسط يساوي التباين المحقق التوقع. الانحرافات تشخّص العلّة:

  • b<1b < 1 مع a>0a > 0: التوقيع الكلاسيكي لتوقع مفرط التقلب — يبالغ في التفاعل، متنبئًا بأطراف قصوى لا تتحقق كاملة. شائع جدًا للنماذج الخام المدفوعة بالعائد المربّع.
  • b>1b > 1: التوقع يفتر في تفاعله، متمقيسًا بقدر أقل من اللازم مع التباين الحقيقي.
  • R2R^2 الانحدار منخفض: حتى لو بدا a,ba,b جيّدين في المتوسط، يتتبع التوقع التباين بشكل سيّئ يومًا بيوم. لأن الوكيل مشوّش جدًا، لا تنزعج من أن R2R^2 لـ MZ أمام r2r^2 كثيرًا ما يكون 0.05-0.20 فقط؛ أمام RVRV سيكون أعلى بكثير. R2R^2 أمام r2r^2 محدود جيدًا دون 1 مهما كان التوقع جيدًا، لمجرد ضجيج الوكيل.

اختبار FF مشترك لـ H0:(a,b)=(0,1)H_0: (a,b) = (0,1) يعطي فحص معايرة رسميًا. عمليًا، استخدم MZ كتشخيص لفهم توقع، و QLIKE لترتيب التوقعات.

Diebold-Mariano: هل الفرق حقيقي؟

افترض أن QLIKE المتوسط لـ GARCH يساوي 0.183 وأن EWMA يساوي 0.191. GARCH "يفوز". لكن هل 0.008 ميزة حقيقية أم ضجيج أخذ العينات؟ يجيب اختبار Diebold-Mariano (1995) على هذا بالضبط. عرّف فرق الخسارة لكل فترة

dt=L(proxyt,htA)L(proxyt,htB)d_t = L(\text{proxy}_t, h^A_t) - L(\text{proxy}_t, h^B_t)

لتوقعين AA و BB (هنا LL = QLIKE). الفرضية الصفرية هي تساوي الدقة التنبؤية، H0:E[dt]=0H_0: \mathbb{E}[d_t] = 0. الإحصاءة هي الفرق المتوسط المعياري بخطئه المعياري طويل الأجل (HAC)، لأن dtd_t مترابط تسلسليًا:

DM=dˉLRV^(dt)/T  d  N(0,1)\text{DM} = \frac{\bar d}{\sqrt{\widehat{\mathrm{LRV}}(d_t)/T}} \;\xrightarrow{d}\; \mathcal{N}(0,1)

حيث LRV^\widehat{\mathrm{LRV}} تقدير للتباين طويل الأجل من نمط Newey-West. إحصاءة DM تتجاوز ±1.96\pm 1.96 ترفض تساوي الدقة عند 5%. بشكل حاسم، DM اختبار عن التوقعات، لا عن نماذج متداخلة، ويتعامل مع التبعية التسلسلية في سلسلة الخسارة التي يتجاهلها اختبار tt ساذج على dtd_t.

import numpy as np
from scipy import stats

def diebold_mariano(loss_a: np.ndarray, loss_b: np.ndarray, h: int = 1):
    """Diebold-Mariano test of equal predictive accuracy.
    loss_a, loss_b: per-period losses (e.g. QLIKE) for forecasts A and B.
    h: forecast horizon; Newey-West lag = h - 1 (>=0), plus a small-sample buffer.
    Returns (DM_stat, p_value). Negative DM => A has lower loss (A better).
    """
    d = np.asarray(loss_a) - np.asarray(loss_b)
    T = len(d)
    d_bar = d.mean()

    lag = max(h - 1, 0)
    gamma0 = np.mean((d - d_bar) ** 2)
    lrv = gamma0
    for k in range(1, lag + 1):
        w = 1.0 - k / (lag + 1)
        cov = np.mean((d[k:] - d_bar) * (d[:-k] - d_bar))
        lrv += 2.0 * w * cov

    dm = d_bar / np.sqrt(lrv / T)

    adj = np.sqrt((T + 1 - 2 * h + h * (h - 1) / T) / T)
    dm *= adj
    p = 2.0 * (1.0 - stats.t.cdf(abs(dm), df=T - 1))
    return float(dm), float(p)

النتيجة التوضيحية في ذلك التعليق هي المحصلة الأمينة والشائعة، وهي كل سبب وجود هذا القسم: كثيرًا ما يسجّل GARCH خسارة متوسطة أدنى قليلًا من EWMA، وبنفس التكرار تفشل تلك الميزة في تخطي عتبة دلالة DM. إذا لم تُبلغ إلا عن QLIKE المتوسط، فستقنع نفسك بميزات كان اختبار DM سينقضها. أبلغ عن إحصاءة DM. هذا نفس الانضباط الذي نطبّقه على عوائد الاستراتيجية في التقييم الأمين بلا ميزة متينة — تقدير نقطي يهزم معيارًا مرجعيًا ليس ميزة حتى تستبعد أنه ضجيج.

الاختبار الخلفي: استراتيجية walk-forward تستهدف التقلب

الآن نجمع النصفين — متنبّئ وقاعدة تحجيم — في استراتيجية ونقيّمها بالطريقة الوحيدة ذات المعنى: walk-forward، خارج العينة، مع التكاليف.

الاستراتيجية بسيطة عمدًا، لأن البساطة هي ما يتيح لنا عزو النتيجة إلى توقع التقلب لا إلى إشارة ذكية. BTC للشراء فقط، مستهدِف للتقلب. كل يوم، توقّع تقلب اليوم التالي، اضبط المركز على wt=min(σtarget/σ^t, wmax)w_t = \min(\sigma_{\text{target}}/\hat\sigma_t,\ w_{\max})، احتفظ بين عشية وضحاها، وكرّر. متغيّر شراء/محايد يطفئ المركز عندما يكون مرشّح الاتجاه سالبًا؛ ومتغيّر محفظة صغيرة يحجّم على مصفوفة التباين المشترك DCC من الجزء الثالث بدلًا من تباين أصل مفرد. نصف حالة الشراء فقط بالكامل ونذكر الامتدادات.

آلية walk-forward وعقد اللانظر المستقبلي

أهم خاصية مفردة لهذا الاختبار الخلفي هي أن كل كمية تُستخدم لتحجيم المركز في اليوم t+1t+1 قابلة للحساب باستخدام البيانات المتاحة عند إغلاق اليوم tt فقط. تُعاد تقدير معاملات GARCH على نافذة متدحرجة تنتهي عند tt؛ والتوقع هو σ^t+1\hat\sigma_{t+1} بخطوة واحدة إلى الأمام من تلك الملاءمة؛ ويُضبط المركز من ذلك التوقع؛ والعائد المكتسب هو wt+1rt+1w_{t+1} r_{t+1}، حيث rt+1r_{t+1} عائد اليوم التالي، الذي لم يره النموذج قط. إعادة ملاءمة GARCH على العينة الكاملة ثم "توقع" الماضي هو أكثر طريقة شائعة يختلق بها الناس اختبارًا خلفيًا رائعًا بالصدفة. نعالج فخ النظر المستقبلي والمنهجية العامة في تحسين walk-forward.

import numpy as np
import pandas as pd
from arch import arch_model

def walk_forward_voltarget(
    returns: pd.Series,          # daily log returns in decimal (e.g. 0.021)
    proxy_var: pd.Series,        # variance proxy aligned to returns (RV or r^2)
    target_vol_annual: float = 0.20,
    window: int = 750,           # rolling estimation window (days)
    refit_every: int = 5,        # refit GARCH weekly, forecast daily (cost saver)
    w_max: float = 3.0,          # leverage cap
    cost_bps: float = 5.0,       # per-unit-turnover cost in basis points
    ann: int = 365,              # crypto trades 365 days/yr
):
    """Long-only vol-targeted BTC, GARCH(1,1)-t forecasts, strictly walk-forward.
    Returns a DataFrame with position, forecast vol, net returns, and turnover.
    """
    idx = returns.index
    target_daily = target_vol_annual / np.sqrt(ann)

    fcast_vol = pd.Series(index=idx, dtype=float, name="fcast_vol")
    last_res = None

    for i in range(window, len(returns) - 1):
        if (i - window) % refit_every == 0 or last_res is None:
            train = returns.iloc[i - window:i + 1] * 100.0   # scale for the optimizer
            am = arch_model(train, mean="Constant", vol="GARCH",
                            p=1, o=1, q=1, dist="t")           # GJR-t, Part 2
            last_res = am.fit(disp="off")

        f = last_res.forecast(horizon=1, reindex=False)
        var_next = f.variance.values[-1, 0] / (100.0 ** 2)    # unscale
        fcast_vol.iloc[i + 1] = np.sqrt(var_next)

    raw_w = (target_daily / fcast_vol).clip(upper=w_max)
    position = raw_w.shift(0)                                  # w_{i+1} known at close i
    gross_ret = position * returns                            # earned on day i+1

    turnover = position.diff().abs().fillna(0.0)
    cost = turnover * (cost_bps / 1e4)
    net_ret = (gross_ret - cost).dropna()

    out = pd.DataFrame({
        "position": position,
        "fcast_vol": fcast_vol,
        "gross_ret": gross_ret,
        "turnover": turnover,
        "net_ret": net_ret,
    }).dropna()
    return out

def performance_stats(net_ret: pd.Series, ann: int = 365) -> dict:
    """Sharpe, realized vol, max drawdown, CAGR, annual turnover."""
    mu = net_ret.mean() * ann
    sigma = net_ret.std() * np.sqrt(ann)
    sharpe = mu / sigma if sigma > 0 else np.nan
    equity = (1.0 + net_ret).cumprod()
    peak = equity.cummax()
    max_dd = (equity / peak - 1.0).min()
    cagr = equity.iloc[-1] ** (ann / len(net_ret)) - 1.0
    return {
        "sharpe": round(sharpe, 2),
        "realized_vol": round(sigma, 3),
        "max_drawdown": round(max_dd, 3),
        "cagr": round(cagr, 3),
    }

بعض ملاحظات التنفيذ التي تهمّ أكثر مما تبدو:

  • المقايسة للمُحسِّن. ملاءمات arch أسعد عدديًا عندما تكون العوائد بالنسبة المئوية، ومن هنا * 100 و/ 100**2 المقابل عند إلغاء مقايسة التباين. انسَ إلغاء المقايسة فيصبح تقلبك المستهدف خاطئًا بمعامل 10,000.
  • إيقاع إعادة الملاءمة. إعادة تقدير معاملات GARCH كل يوم مكلفة ولا تضيف تقريبًا شيئًا — المعاملات مستقرة من أسبوع لأسبوع. إعادة الملاءمة أسبوعيًا (refit_every=5) مع التوقع يوميًا (يحدّث التكرار σt2\sigma_t^2 من العوائد الجديدة حتى بلا إعادة ملاءمة) هو التسوية القياسية. يعكس هذا نصيحة التخزين المؤقت من خط أنابيب الروابط (copula) في نماذج الروابط للمخاطر المشتركة.
  • السقف wmaxw_{\max} ليس تجميليًا. عندما ينهار التقلب المتوقع في نظام هدوء ميت، يمكن أن ينفجر σtarget/σ^t\sigma_{\text{target}}/\hat\sigma_t إلى رافعة 5x، 10x. استهداف التقلب بلا سقف سيسلّمك بسرور رافعة كارثية قبل تغيّر نظام تقلب مباشرة — اللحظة الدقيقة التي يوشك فيها التوقع أن يكون الأكثر خطأً. ضع له سقفًا (3x هنا) واعلم أن السقف سيقيّد بالضبط في الفترات الأهدأ والأخطر بأثر رجعي.
  • تتناسب التكاليف مع الدوران، واستهداف التقلب آلة دوران. كل تأرجح في التوقع يعيد تحجيم المركز. على أصل منخفض التقلب بتوقع متوتر يمكنك تقليب الدفتر يوميًا. حدّ cost_bps ليس تفصيل تقريب؛ لاستهداف تقلب عالي الدوران يمكنه التهام جزء معتبر من تحسّن شارب الإجمالي.

كيف يبدو الخرج (توضيحي)

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

توقع التحجيم Sharpe التقلب المحقق التقلب المستهدف السحب الأقصى الدوران السنوي
قيمة اسمية ثابتة (بلا استهداف) 0.71 0.68 -0.78 0.1x
RV متدحرج (60 يومًا) 0.94 0.24 0.20 -0.41 12x
EWMA (λ=0.94\lambda=0.94) 1.02 0.21 0.20 -0.35 19x
GARCH(1,1)-t 1.05 0.21 0.20 -0.33 22x
HAR-RV (وكيل داخل اليوم) 1.09 0.20 0.20 -0.31 20x

متغيّران يستحقان البناء

تعزل حالة الشراء فقط التوقع، لكن امتدادين شائعان بما يكفي لعرضهما صراحة.

شراء/محايد مع بوابة اتجاه. يحجّم استهداف التقلب المركز لكنه لا يتخذ رؤية اتجاهية — إنه دائمًا شراء. تحسين رخيص وأمين هو بوابة إطفاء المركز عندما يتحوّل مرشّح اتجاه بطيء إلى سالب، فتحتفظ بالشراء المستهدَف للتقلب فقط في الاتجاهات الصاعدة وتجلس محايدًا خلاف ذلك. يُبقي هذا منطق التحجيم مطابقًا ويطبّق مرشّح نظام خامًا فوقه؛ لا يدّعي توقيت الدخول، بل تجنّب الاحتفاظ عبر الاتجاهات الهابطة الواضحة فقط.

def apply_trend_gate(position: pd.Series, price: pd.Series, fast: int = 20, slow: int = 100):
    """Zero out the (already vol-targeted) position when the fast SMA is below
    the slow SMA. Both SMAs use only past prices, so no look-ahead is introduced.
    """
    fast_ma = price.rolling(fast).mean().shift(1)   # shift: known at prior close
    slow_ma = price.rolling(slow).mean().shift(1)
    gate = (fast_ma > slow_ma).astype(float)        # 1.0 in uptrend, 0.0 otherwise
    return position * gate.reindex(position.index).fillna(0.0)

تقلّص بوابة الاتجاه الدوران في الهبوط (تتوقف عن تقليب مركز يتقلّص في سوق هابطة) لكنها تضيف مخاطر نظامها الخاصة — تتأرجح ذهابًا وإيابًا في الأسواق الجانبية المتقطّعة وتتأخر عند نقاط التحوّل. هل تساعد؟ سؤال تجريبي يجب أن تجيب عنه بنفس صرامة walk-forward والمختبَرة بـ DM كقاعدة التحجيم نفسها؛ مرشّح الاتجاه هو بالضبط نوع الإضافة التي تبدو رائعة داخل العينة وتتبخر خارجها.

استهداف تقلب المحفظة على تباين DCC المشترك. لدفتر من عدة أصول، يصبح التوقع القياسي σ^t\hat\sigma_t تقلب المحفظة wΣtw\sqrt{w^\top \Sigma_t w}، حيث Σt\Sigma_t مصفوفة التباين المشترك المتغيّرة زمنيًا من DCC-GARCH لـ الجزء الثالث. تختار أوزانًا أساسية w0w_0 (وزن متساوٍ، أو القيمة السوقية، أو ميل متوسط-تباين)، وتحسب تقلب المحفظة المتوقع تحت Σt\Sigma_t، وتقايس متجه الأوزان بأكمله لبلوغ هدف المحفظة.

def portfolio_voltarget_weights(base_w, cov_forecast, target_vol_daily, w_gross_max=3.0):
    """Scale a base weight vector so forecast portfolio vol hits the target.
    base_w:        (n,) base allocation (need not sum to 1).
    cov_forecast:  (n, n) one-step-ahead covariance from DCC-GARCH (daily units).
    """
    base_w = np.asarray(base_w, dtype=float)
    port_var = float(base_w @ cov_forecast @ base_w)
    port_vol = np.sqrt(max(port_var, 1e-12))
    scale = min(target_vol_daily / port_vol, w_gross_max / np.abs(base_w).sum())
    return scale * base_w

هذا هو الجسر الطبيعي إلى أدبيات بناء المحفظة: يمكن أن تأتي الأوزان الأساسية w0w_0 من متوسط-تباين Markowitz أو من طريقة قائمة على المخاطر مثل HRP/CVaR، ثم يجلس استهداف التقلب فوقها كطبقة تغطية تقايس المخاطر الإجمالية إلى ثابت. تهمّ مصفوفة DCC لأن الارتباطات تقفز في الانهيارات (الجزء الثالث) — محفظة تبدو متنوّعة في الأسواق الهادئة قد يكون تقلبها المتوقع أعلى بكثير مما يوحي به تباين ساكن بالضبط عندما يهمّ، وتقطع طبقة التغطية الانكشاف الإجمالي استجابة لذلك.

تشخيصات ينبغي أن ترسمها دائمًا

لا تثق أبدًا بجدول الملخص وحده. لأي استهداف تقلب، ارسم ثلاثة أشياء وتفحّصها بعينك قبل أن تصدّق أي رقم شارب. أولًا، التقلب المتدحرج المحقق للاستراتيجية أمام خط الهدف — ينبغي أن يعانق الهدف؛ الانجراف المنهجي فوقه يعني أن توقعك متحيّز نحو الانخفاض (الاتجاه المكلف). ثانيًا، سلسلة المركز/الرافعة — ابحث عن السقف يقيّد وعن قفزات الرافعة قبل عمليات السحب مباشرة، توقيع توقع أوقعه تغيّر نظام. ثالثًا، مخطط التشتت توقع-مقابل-وكيل (صورة Mincer-Zarnowitz) — سحابة بميل بعيد عن 1 تخبرك أن التوقع مُقاس خطأً بطريقة يمكن أن يخفيها متوسط QLIKE. هذه الرسوم الثلاثة تصطاد أخطاء برمجية وخداعًا ذاتيًا أكثر من أي إحصاءة مفردة.

اقرأ هذا الجدول كما ينبغي أن تقرأ كل جدول اختبار خلفي: انظر إلى ما هو متين وما هو هامشي. الحقائق المتينة تقفز للعيان. كل متغيّر يستهدف التقلب يسحق القيمة الاسمية الثابتة على شارب و، بشكل أكثر دراماتيكية، على السحب واستقرار التقلب المحقق — تعمل استراتيجية القيمة الاسمية الثابتة عند 68% تقلب سنوي مع سحب 68% بمقدار 78%، وهو ببساطة غير قابل للاستثمار. وكل طريقة استهداف تسلّم تقلبًا محققًا قريبًا من هدف الـ 20%، وهو كل وعد الآلية التي تعمل. الحقائق الهامشية هي الفروق بين المتنبّئين: HAR يتقدّم على GARCH يتقدّم على EWMA يتقدّم على RV المتدحرج، لكن الفجوات صغيرة — عُشر نقطة شارب — و، إذا اختُبرت بـ Diebold-Mariano على التوقعات أو bootstrap على العوائد، لفشلت كثيرًا في تخطي الدلالة. تلك الفجوة الصغيرة الهشة المعتمدة على النظام بين المتنبّئ المتطوّر والساذج هي العنوان الأمين لهذه السلسلة بأكملها.

أن تكون أمينًا بشأن ما يشتريه لك هذا

لهذه المدونة مجموعة كاملة عن الاختبار الخلفي دون خداع النفس، فلنطبّقها على نتيجتنا نحن بدلًا من أن نأمل بهدوء ألا تفعل.

استهداف التقلب يحسّن العائد المعدّل بالمخاطر وعمليات السحب. لا يصنع ألفا من العدم. انظر إلى الجدول ثانية. تحسّن شارب من الاستهداف حقيقي ويستحق الاقتناء — لكن فكّكه وستجد أن معظمه يأتي من عدم الاحتفاظ بمركز ثابت في أنظمة التقلب العالي، ما يتجنّب آليًا أسوأ عمليات السحب ويثبّت مسار التركيب. لا تزال الاستراتيجية شراء BTC؛ ليس لديها رؤية لا يمنحها السوق. إذا كان لـ BTC شارب سالب على عيّنتك، فإن استهداف التقلب سيسلّمك شارب سالبًا أقل سوءًا، لا موجبًا. إنه يعيد تشكيل توزيع العوائد — ذيول أرفع، تقلب أثبت، تركيب هندسي أفضل — لكن الميزة الاتجاهية الخام هي مهما كان الشراء الأساسي. لا تدع منحنى حقوق ملكية جميلًا يخدعك لتصدّق أنك وجدت ألفا بينما وجدت إدارة مخاطر. وجد Moreira-Muir ألفا حقيقيًا في عوامل الأسهم من إدارة التقلب، لكن تلك النتيجة عن مقايضة العامل بين المخاطرة والعائد المتغيّرة زمنيًا، ولا تنتقل تلقائيًا إلى أصل عملة مشفرة مفرد على عيّنة مختلفة.

ميزة جودة توقع GARCH على EWMA كثيرًا ما تكون صغيرة ومعتمدة على النظام. هذا هو المردود غير المريح للأجزاء 1-3. بنيت نماذج متزايدة التطوّر — حدود رفع، ذيول Student-t، ارتباطات ديناميكية — والمساهمة الهامشية لكلٍ منها في ربح/خسارة استهداف التقلب، فوق EWMA ساذج، كثيرًا ما تكون داخل نطاق الضجيج. تظهر ميزة GARCH (الارتداد للمتوسط بعد الصدمات) أساسًا في أنظمة محددة: قفزات حادة تعود بعدها للطبيعي. في الاتجاهات الطاحنة أو أنظمة التقلب العالي المستمر بالكاد يختلف عن EWMA. هذا لا يجعل GARCH عديم الفائدة — بنية الارتداد للمتوسط، والمعاملات القابلة للتفسير، والقدرة على محاكاة مسارات إلى الأمام وتسعير الخيارات أمام التوقع، كلها ذات قيمة يفتقرها EWMA — لكن إن كان استخدامك الوحيد هو التحجيم، فأجرِ اختبار DM قبل أن تدفع تكلفة التعقيد، واعلم أن كشف النظام يخبرك بنفس الشيء من زاوية مختلفة: النموذج الفائز يعتمد على النظام.

شارب الاختبار الخلفي حدّ أعلى لشارب الحيّ، واستهداف التقلب يوسّع الفجوة. لأن الاستراتيجية كثيفة الدوران ومُقاسة بالرافعة، فهي حساسة على نحو غير معتاد للاحتكاكات التي يغفلها اختبار خلفي ساذج: تنفيذاتك أسوأ من الإغلاق الذي حجّمت عنده، وتتراكم تكاليف التمويل على مراكز perp المرفوعة باستمرار، ويتفاعل سقف الرافعة مع آليات الهامش والتصفية التي يتجاهلها w * return بسيط. كل واحدة من هذه تجعل الحيّ أسوأ من الاختبار الخلفي. نعالج هذه الفجوة منهجيًا في تكافؤ الاختبار الخلفي-الحيّ؛ ولاستهداف التقلب تحديدًا، خصّص ميزانية له باستخدام تكاليف محافظة، وسقف رافعة واقعي (منخفض)، وبالتنفيذ عند افتتاح الشريط التالي بدلًا من الإغلاق الذي حسبت منه الإشارة.

استطراد عن علاوة مخاطر التقلب. كل ما سبق يتوقّع التقلب المحقق. يوجد كائن مواز قابل للتداول: التقلب الضمني، المسعّر في الخيارات، الذي يقع في المتوسط فوق التقلب المحقق اللاحق — علاوة مخاطر التقلب، تعويض عن تحمّل مخاطر قفزة تقلب. تلك الفجوة نفسها مصدر عائد (بيع التباين يحصده، وشراؤه يتحوّط ضد مخاطر الذيل)، وهي لعبة مختلفة حقًا عن استهداف التقلب: إنها رهان على سعر التقلب بدلًا من استخدام توقع للتقلب. لا نتابعها هنا، لكن الآلية تبدأ بنموذج التسعير في تسعير خيارات Black-Scholes، وتوقع تقلب محقق جيّد (الأجزاء 1-2) هو بالضبط المدخل الذي تحتاجه للحكم على ما إذا كان التقلب الضمني غاليًا أم رخيصًا. مقارنة توقع GARCH بالتقلب الضمني لسوق الخيارات هي من أكثر الاستخدامات أمانة لكل ما بنيته في هذه السلسلة.

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

مجموعة متنوعة من الأشياء التي تفصل استهداف تقلب يعمل عن آخر هشّ.

  • قدّر على الأفق الصحيح. إذا حجّمت مركزًا يُحتفظ به ليوم، توقّع تقلب يوم واحد. إذا أعدت الموازنة أسبوعيًا، توقّع (واستهدف) التقلب الأسبوعي، أو اجمع توقع GARCH اليومي على الأفق — يرتد توقع GARCH متعدد الخطوات نحو σˉ2\bar\sigma^2، وهو ما تتجاهله مقايسة "hdaily\sqrt{h}\cdot\text{daily}" الساذجة. يغطّي الجزء الأول توقع GARCH متعدد الخطوات.
  • السنونة في أسواق 24/7. تتداول العملات المشفرة 365 يومًا في السنة بلا عطل نهاية أسبوع أو أعياد، فسنون التقلب اليومي بـ 365\sqrt{365}، لا 252\sqrt{252} الخاصة بالأسهم. الخطأ في هذا يخطئ مقايسة هدفك بصمت بنحو 20%.
  • يمكن أن يكون المقام مصفوفة تباين مشترك. لدفتر متعدد الأصول، استبدل الكمية القياسية σ^t\hat\sigma_t بتقلب المحفظة wΣtw\sqrt{w^\top \Sigma_t w} من DCC-GARCH لـ الجزء الثالث، وقايس متجه الأوزان بأكمله لبلوغ تقلب المحفظة المستهدف. يربط هذا استهداف التقلب بتحجيم متوسط-تباين (Markowitz للعملات المشفرة) والتخصيص القائم على المخاطر (خطوط أنابيب HRP و CVaR) — استهداف التقلب هو الحالة الخاصة أحادية الأصل للمقايسة إلى ميزانية مخاطر محفظة.
  • استهداف التقلب مساير للدورة بطريقة دقيقة. عندما يشغّل الجميع نفس قاعدة 1/σ1/\sigma، تفرض قفزة تقلب تصفية رافعة متزامنة، تدفع الأسعار للأسفل، ما يرفع التقلب المحقق، ما يفرض مزيدًا من تصفية الرافعة. هذه التغذية الراجعة (الموثّقة جيدًا في "volmageddon" 2018 وسلاسل تصفية رافعة عملات مشفرة متنوعة) تعني أن القاعدة تعمل بشكل أقل جودة بالضبط عندما يستخدمها كثير من اللاعبين. ليس هذا سببًا لهجرها، لكنه سبب لوضع سقف للرافعة ولعدم افتراض أن تنفيذاتك أثناء قفزة تقلب ستشبه تنفيذات السوق الهادئة.
  • ضع أرضية وقصّ التوقع. توقع تقلب صفري أو شبه صفري ينتج رافعة لانهائية. ضع دائمًا أرضية لـ σ^t\hat\sigma_t عند حد أدنى عاقل وسقفًا للمركز، وسجّل كم مرة يقيّد كلٌ منهما — إن قيّد السقف معظم الوقت، فهدفك عدواني جدًا للأصل.

الخلاصة

  • توقع التقلب لا قيمة له حتى يغيّر قرارًا. استهداف التقلب — تحجيم الانكشاف كـ wt=σtarget/σ^tw_t = \sigma_{\text{target}}/\hat\sigma_t (بسقف) — هو أنظف اختبار لقيمة توقع، لأن جودة التوقع تنعكس مباشرة على مخطط تقلب محقق أكثر استواءً وشارب أعلى.
  • يرفع استهداف التقلب العائد المعدّل بالمخاطر و، خصوصًا، يضبط عمليات السحب، لأن التقلب قابل للتوقع (يتجمّع في عناقيد) بينما الاتجاه ليس كذلك، ولأن نسب شارب تنخفض في أنظمة التقلب العالي التي تقلّل القاعدة وزنها تلقائيًا. إنه تحجيم Kelly تحت افتراض أن العائد المتوقع يتناسب مع التقلب.
  • قارن GARCH بأمانة بمعايير قوية: التقلب المحقق المتدحرج، وEWMA/RiskMetrics (λ=0.94\lambda=0.94، وهو IGARCH بصفر معامل حر)، وHAR-RV على وكيل تباين محقق داخل اليوم. EWMA و HAR يصعب هزيمتهما.
  • لا يمكنك رصد التقلب الحقيقي، فقيّم أمام وكيل (r2r^2 أو، أفضل بكثير، RVRV) باستخدام دوال خسارة متينة أمام ضجيج الوكيل. فضّل QLIKE على MSE: تعاقب على التنبؤ الناقص أكثر (الخطأ المكلف) وهي ثابتة على المقياس، فلا تُختطف بحفنة أيام تقلب عالٍ. استخدم Mincer-Zarnowitz لتشخيص التحيّز واختبار Diebold-Mariano لتقرير ما إذا كانت ميزة توقع حقيقية أم ضجيجًا.
  • في اختبار خلفي walk-forward واعٍ بالتكاليف، يهزم استهداف التقلب القيمة الاسمية الثابتة بموثوقية على شارب والسحب، ويتجمّع المتنبّئون الأربعة قريبين معًا — ميزة GARCH على EWMA صغيرة، ومعتمدة على النظام، وكثيرًا ما تكون غير دالة إحصائيًا. أبلغ عن اختبار DM، لا عن الخسارة المتوسطة فقط.
  • كن أمينًا: استهداف التقلب إدارة مخاطر، لا ألفا. يعيد تشكيل توزيع عوائد أي رهان اتجاهي كان لديك أصلًا؛ لا يصنع ميزة من العدم. وهو كثيف الدوران ومُقاس بالرافعة، فالنتائج الحيّة تتخلّف عن الاختبار الخلفي أكثر من المعتاد.

المراجع:

  • Patton, A. J. (2011). Volatility forecast comparison using imperfect volatility proxies. Journal of Econometrics, 160(1), 246-256. DOI
  • Corsi, F. (2009). A simple approximate long-memory model of realized volatility. Journal of Financial Econometrics, 7(2), 174-196. DOI
  • Diebold, F. X., & Mariano, R. S. (1995). Comparing predictive accuracy. Journal of Business & Economic Statistics, 13(3), 253-263. DOI
  • Mincer, J., & Zarnowitz, V. (1969). The evaluation of economic forecasts. In Economic Forecasts and Expectations, NBER.
  • Moreira, A., & Muir, T. (2017). Volatility-managed portfolios. Journal of Finance, 72(4), 1611-1644. DOI
  • J.P. Morgan / Reuters (1996). RiskMetrics Technical Document, 4th ed.
  • Bollerslev, T. (1986). Generalized autoregressive conditional heteroskedasticity. Journal of Econometrics, 31(3), 307-327. 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
  • Harvey, D., Leybourne, S., & Newbold, P. (1997). Testing the equality of prediction mean squared errors. International Journal of Forecasting, 13(2), 281-291. DOI
blog.disclaimer

MarketMaker.cc Team

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

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

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

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

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