← Maqolalarga qaytish
July 13, 2026
5 daqiqa o'qish

Volatillikni maqsad qilish va GARCH prognozlari bilan savdo qilish

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

Ushbu turkumning dastlabki uch qismi sizga volatillikni prognoz qilishni o'rgatdi. Biz 1-qismda bir o'lchovli GARCH(1,1) qurdik, 2-qismda GJR va Student-t innovatsiyalari bilan leveraj hamda og'ir dumlarni qo'shdik va 3-qismda DCC-GARCH orqali butun kovariatsiya matritsasini vaqt bo'ylab modellashtirdik. Har birining oxirida biz bitta sonni chop etdik: ertangi kutilayotgan volatillik. Va keyin, agar halol bo'lsak, to'xtadik — go'yo prognozni ishlab chiqarishning o'zi maqsad edi.

Bu unday emas. Volatillik prognozi P&L emas. Hech kimga past QLIKE ko'rsatkichi uchun pul to'lanmagan. Prognoz aynan siz boshqacha qabul qilgan bo'lardingiz degan qarorni o'zgartirgan lahzada qadrga ega bo'ladi — qancha sotib olish, qachon kesish, qancha kapital ajratish. Agar sizning prognozingiz pozitsiyani harakatlantirmasa, uning statistik aniqligi shaxsiy sevimli mashg'ulotdan boshqa narsa emas.

Ushbu yakuniy qism o'sha sikllni yopish haqida. Biz 1-3 qismlardagi prognozlarni olamiz va ularni mumkin bo'lgan eng toza qarorda ishga solamiz: volatillikni maqsad qilish — portfelning realized volatilligi doimiy maqsadga tegishi uchun pozitsiyani o'lchamlash. Keyin biz ushbu blog har qanday alohida modeldan ko'ra ko'proq qadrlaydigan narsani qilamiz: halol baholaymiz. Biz GARCHni ahmoq, ammo kuchli bazaviy modellarga (rolling realized vol, EWMA) qarshi qo'yamiz, biz haqiqiy volatillikni hech qachon kuzata olmasligimiz haqiqatiga chidamli bo'lgan zarar funksiyalarini ishlatamiz, xarajatlar bilan va look-ahead siz walk-forward backtest o'tkazamiz va volatillikni maqsad qilish sizga nima berishini va nima bermasligini oddiy tilda aytamiz. Spoiler: bu risk-korrektirovkalangan daromadlarni yaxshilaydi va drawdownlarni alfa yaratishdan ko'ra ancha ishonchli tarzda jilovlaydi.

Nima uchun volatillikni maqsad qilish to'g'ri test

Volatillik prognozidan foydalanishning yanada murakkab usullari bor — optsion narxlash, VaR chegaralari, dinamik hejlash — ammo volatillikni maqsad qilish boshqa garovlardan eng kam ifloslanish bilan prognozning qiymatini ajratib turadigan usuldir. G'oya bitta tenglama.

Signal orqali ko'rsatilgan yo'nalishga ega xavfli aktivni ushlab turing (hozircha faqat "long"). Belgilangan pozitsiya o'rniga ta'sirni prognoz volatilligiga teskari mutanosib ravishda o'lchamlang:

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

bu yerda σ^t\hat{\sigma}_t — keyingi davr volatilligining prognozingiz (faqat tt gacha bo'lgan ma'lumotlardan foydalanib tuzilgan), σtarget\sigma_{\text{target}} esa siz strategiya ishlashini xohlagan yillik volatillik — masalan, 15% yoki 20%. Model tinch bozorni prognoz qilganda, siz 1.0 tomon (yoki undan oshib) leveraj oshirasiz; bo'ron prognoz qilganda esa kichraytirasiz. O'lchamlangan pozitsiyaning realized volatilligi, birinchi tartibda,

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} bo'lgan har qanday holatda. Shunday qilib, mashqning butun sifati bitta narsaga bog'liq: sizning σ^t\hat\sigma_t prognozingiz keyingi davrning haqiqiy volatilligi σt+1\sigma_{t+1} ga qanchalik yaqin. Yaxshiroq prognoz tekisroq realized-volatillik profilini va — ko'rib turganimizdek — yaxshiroq Sharpe koeffitsiyentini beradi. Shu sababli bu to'g'ri test. Prognoz bezak emas; u maxrajdir.

Nima uchun bu Sharpeni oshiradi va drawdownlarni nazorat qiladi

Bu yerda ikkita empirik fakt ish qiladi.

Volatillik daromadlardan ancha ko'proq prognoz qilinadi. Ertangi BTC daromadining yo'nalishi kunlik chastotada tanga tashlashga yaqin; kattaligi esa emas. Volatillik klasterlanadi — katta harakatlar katta harakatlardan keyin keladi — bu GARCH mavjud bo'lishining butun sababi (1-qism buni kodlashtiradigan AR(1)-in-variance strukturasini keltirib chiqargan). Bir kun oldinga variance uchun 0.4-0.6 lik R2R^2 oddiy holat; daromadlar uchun bir xil son Renaissance darajasidagi signal bo'lardi. Volatillikni maqsad qilish prognoz qilinadigan miqdordan foydalanadi va prognoz qilinmaydigani haqida agnostik bo'lib qoladi.

Sharpe koeffitsiyentlari vaqt bo'ylab doimiy emas; volatillik keskin oshganda tushadi. Kriptodagi yuqori volatillik rejimlari — deleverajing kaskadlari, birja qulashlari, hamma narsa 30% gap qiladigan kunlar — yaxshiroq emas, balki yomonroq risk birligiga to'g'ri keladigan daromadga ega bo'ladi. Prognoz voli yuqori bo'lganda aynan ta'sirni mexanik ravishda kesish orqali siz drawdownlarga eng ko'p va kompaundlangan daromadga eng kam hissa qo'shadigan davrlarni kam vaznlaysiz. Moreira va Muir (2017) aktsiyalar uchun volatillik boshqariladigan portfellar — aynan shu 1/σ21/\sigma^2 o'lchamlash — Sharpe koeffitsiyentlarini oshirishini va boshqarilmagan omilga qarshi ijobiy alfa ishlab chiqarishini ko'rsatdi. Mexanizm sehr emas; u oldindan ma'lum bo'lgan notinch oynalarga doimiy dollar pozitsiyasini ushlab turishdan bosh tortishdir.

Drawdown foydasi yanada bevosita. Maksimal drawdown pozitsiya-daromad taqsimotining dumi bilan hukmronlik qiladi. wtrt+1w_t r_{t+1} volatilligi σtarget\sigma_{\text{target}} atrofida mahkamlangani uchun, belgilangan notional strategiya vol portlashi paytida boshdan kechiradigan og'ir chap dum siqiladi: siz kirishda allaqachon kichik edingiz. Volatillikni maqsad qilish qulashlarni prognoz qilmaydi, ammo bozor bezovta bo'lganda tizimli ravishda kam ta'sirlangan bo'ladi va bezovtalik — bu qulashlar sodir bo'ladigan payt.

Kelly va fraksion o'lchamlash bilan aloqasi

Volatillikni maqsad qilish Kelly mezonining birinchi qarindoshi. Kutilayotgan ortiqcha daromadi μ\mu va varianse σ2\sigma^2 ga ega bo'lgan bitta aktiv uchun o'sish-optimal (to'liq-Kelly) fraksiya

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

Agar siz Sharpe koeffitsiyenti μ/σ\mu/\sigma taxminan doimiy deb faraz qilsangiz — kuchli faraz, ammo "bozor risk uchun barqaror narx to'laydi" degan gapdagi yashirin faraz — u holda μ=Sσ\mu = S\sigma va f=S/σf^\star = S/\sigma bo'ladi, bu esa aynan σtarget=S(Kelly fraction)\sigma_{\text{target}} = S \cdot (\text{Kelly fraction}) bilan volatillikni maqsad qilishdir. Boshqacha qilib aytganda, volatillikni maqsad qilish — bu kutilayotgan daromad volatillik bilan miqyoslashadi degan faraz ostidagi Kelly o'lchamlashi. Biz to'liq va fraksion Kellyni va nima uchun aqli joyida hech kim to'liq Kelly savdo qilmasligini Kelly mezoni va strategiya o'lchamlash da ko'rib chiqamiz. U yerdagi amaliy saboq bu yerga o'tadi: nazariy o'lchamning bir qismidan foydalaning, chunki maxrajdagi (sizning vol prognozingiz) va ayniqsa suratdagi (kutilayotgan daromad) baholash xatosi to'liq o'lchamlashni xavfli darajada agressiv qiladi.

Yodda tutish uchun yana ikkita aloqa. Birinchidan, volatillikni maqsad qilish daromadlarning simmetrik tarqalishiga qarab o'lchamlaydi, ammo kripto to'lovlari simmetrik emas — 20% tushish kunining narxi leveraj va likvidatsiya jalb qilinganda 20% ko'tarilish kunining ko'zgu aksi emas. Biz bu asimmetriyani zarar-foyda asimmetriyasi da bevosita ko'rib chiqamiz va GJR/EGARCH prognozi (2-qism) allaqachon uning bir qismini σ^t\hat\sigma_t ga singdiradi, salbiy shoklarga ko'proq javob berish orqali. Ikkinchidan, vol prognozi nuqta bahosi; to'liqroq risk ko'rinishi unga interval biriktiradi. Savdo uchun konformal prognozlash model chiqishlarini siz ularga qarshi o'lchamlashingiz mumkin bo'lgan taqsimotdan mustaqil intervallarga aylantirishni ko'rsatadi, bu esa ushbu maqolaning halol-baholash mavzusiga tabiiy ravishda mos keladi.

Raqobatchilar: GARCH nimani mag'lub etishi kerak

Mana haqiqiy baholashni demodan ajratib turadigan intizom. GARCHni toj kiygizishdan oldin, siz unga arzon, aniq va ajablanarli darajada mag'lub etish qiyin bo'lgan raqiblarni berishingiz kerak. Agar sizning murakkab GJR-t modelingiz besh qatorli EWMAdan yaxshiroq ishlay olmasa, siz qimmatli narsani o'rgandingiz va o'zingizni ko'plab ishlab chiqarish murakkabliklaridan qutqardingiz.

Biz keyingi davr volatilligining to'rtta prognozchisini bazaviy sifatida qo'yamiz.

(a) Orqadagi realized volatillik (rolling standart chetlanish)

Eng sodda prognoz: ertangi volatillik oxirgi nn kunlik daromadlarning tanlanma standart chetlanishiga teng.

σ^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}

Uning bitta giperparametri bor (oyna nn, odatda 20-60 kun) va hech qanday modeli yo'q. Uning kamchiligi shundaki, oynadagi har bir kuzatuv teng vazn oladi va keyin oynadan chiqib ketganda to'satdan qoyadan tushib ketadi — "ghosting" yoki "echo" effekti, bu yerda bitta qulash kuni prognozni aynan nn kun davomida shishiradi va keyin bir kechada yo'qoladi, bozor haqiqatan tinchlanganmi yoki yo'qmi, farqi yo'q.

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

Eksponensial vaznlangan harakatlanuvchi o'rtacha echo muammosini eskiroq kvadrat daromadlarga geometrik ravishda susayadigan vazn berish orqali tuzatadi:

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

Bu RiskMetrics (J.P. Morgan, 1996) baholovchisi. Kunlik ma'lumotlar uchun kanonik λ=0.94\lambda = 0.94 bilan samarali xotira taxminan 1/(1λ)171/(1-\lambda) \approx 17 kun, ammo susayish silliq — qoya yo'q. E'tibor bering, EWMA aslida nima: bu ω=0\omega = 0 va α+β=1\alpha + \beta = 1 bilan integrallashgan GARCH(1,1), ya'ni o'rtachaga qaytishsiz va uzoq muddatli variansesiz GARCH. Agar λ=0.94\lambda = 0.94 ni qabul qilsangiz, uning nol erkin parametrlari bor va u ushbu butun maqoladagi eng qiyin yagona bazaviy model. "GARCH X ni mag'lub etadi" degan maqolalarning katta qismi tanlama tashqarisida EWMAni mag'lub eta olmaydi.

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")

Odamlarni chalg'itadigan bitta nozik jihat: tt davri uchun prognoz (tt ustida ushlab turilgan pozitsiyani o'lchamlash uchun ishlatiladigan) tt dan oldin kuzatilgan daromadlardan tuzilishi kerak. Yuqoridagi rekursiyada var[t] r2[t-1] dan foydalanadi, shuning uchun seriya haqiqiy bir qadam oldinga prognozdir. Bu indeksni to'g'ri olish backtest bilan fantaziya o'rtasidagi farqdir — bu haqda walk-forward bo'limida ko'proq.

(c) GARCH(1,1) va GJR-t (1-2 qismlar)

Bizning bosh qahramonlarimiz. Standart 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

uzoq muddatli varianse σˉ2=ω/(1αβ)\bar\sigma^2 = \omega/(1-\alpha-\beta) bilan va bir qadamli prognoz rekursiyadan to'g'ridan-to'g'ri kelib chiqadi (1-qism). GJR-GARCH kengaytmasi leveraj hadini qo'shadi, shunda salbiy shoklar variansni ijobiylardan ko'ra ko'proq oshiradi:

σ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

va kriptoning og'ir dumlarini boshqarish uchun Student-t innovatsiyalari bilan juftlashtirilgan, bu 2-qismning GJR-t si. GARCH EWMAni mag'lub eta olishining sababi — o'rtachaga qaytish: shokdan keyin GARCH prognozni α+β\alpha+\beta tomonidan boshqariladigan tezlikda σˉ2\bar\sigma^2 tomon qaytaradi, EWMA esa (integrallashgan bo'lgani uchun) hech qachon qaytmaydi. Volatillik keskin oshib, keyin normallashganda — keng tarqalgan holat — GARCH prognozi tezroq va aniqroq susayadi. Volatillik haqiqatan doimiy bo'lganda, ikkalasi deyarli farqlanmaydi.

(d) Realized variance bo'yicha HAR-RV (agar sizda intraday ma'lumot bo'lsa)

Agar sizda intraday barlar bo'lsa — va 24/7 kripto bozorlarida deyarli har doim bor — siz kunlik kvadrat daromadlarga qaraganda ancha kam shovqinli volatillik proksisini qura olasiz: realized variance, kun davomida intraday daromadlar kvadratlarining yig'indisi.

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})

Corsi (2009) ning Heterogeneous Autoregressive modeli ertangi realized variansni o'tmishdagi RVRV ning kunlik, haftalik va oylik o'rtachalaridan prognoz qiladi — uch regressor bilan uzoq xotirali barqarorlikni ushlab qolishning qo'pol, ammo hayratlanarli darajada samarali usuli:

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}

bu yerda RVt(5)\overline{RV}_t^{(5)} va RVt(22)\overline{RV}_t^{(22)} — kunlik RVRV ning orqadagi 5 kunlik va 22 kunlik o'rtachalari. Bu oddiy OLS regressiya, u yuqori sifatli intraday proksidan foydalanadi va u tez-tez to'rttadan eng yaxshi kunlik-vol prognozchisidir — ko'pincha GARCHni aynan RVRV r2r^2 dan tozaroq maqsad bo'lgani uchun mag'lub etadi.

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 haqida eslatma: RVRV o'ngga qiya va qat'iy musbat bo'lgani uchun, ko'plab amaliyotchilar logRVt+1\log RV_{t+1} ni log HAR belgilariga regressiya qiladi, bu esa mos kelishni yaxshilaydi va musbat prognozlarni kafolatlaydi. Orqaga eksponentlaganda siz yarim-varianse Jensen tuzatishini qo'shishingiz kerak, RV^=exp(y^+12σ^u2)\widehat{RV} = \exp(\hat{y} + \tfrac{1}{2}\hat\sigma_u^2), aks holda siz tizimli ravishda kam prognoz qilasiz.

Qo'lda to'rtta prognozchi bilan — RV, EWMA, GARCH/GJR-t, HAR — savol shu bo'ladi: ular barchasi prognoz qilishga urinayotgan narsani hech qachon ko'ra olmaganimizda, qaysi biri eng yaxshi ekanini qanday hal qilamiz?

Volatillik prognozini halol baholash

Bu maqolaning asosiy o'rgatuvi, shuning uchun bu yerda sekinlashing.

Siz σ^t2\hat\sigma_t^2 prognozlarini haqiqiy shartli varianse σt2\sigma_t^2 ga qarshi solishtirmoqchisiz. Ammo σt2\sigma_t^2 — bu yashirin miqdor — u ma'lumot yaratuvchi jarayonning parametri, hech qachon to'g'ridan-to'g'ri kuzatilmaydi. Siz olgan narsangiz — kuniga bitta realized daromad. Shuning uchun har bir volatillik baholash aslida sizning prognozingizni haqiqat uchun shovqinli proksi ga qarshi solishtirishdir. Ikkita standart proksi:

  • Kvadrat daromadlar rt2r_t^2. Nol-o'rtacha model ostida σt2\sigma_t^2 uchun tarafkash emas (E[rt2Ft1]=σt2\mathbb{E}[r_t^2 \mid \mathcal{F}_{t-1}] = \sigma_t^2), ammo o'ta shovqinli: bitta kunlik daromad — standart chetlanishning bir-kuzatuvli bahosi. rt2r_t^2 proksisi haqiqiy vol yuqori bo'lganda ham 0 (tekis kun) bo'lishi mumkin yoki omadli dum kunida ulkan bo'lishi mumkin.
  • Intraday ma'lumotdan realized variance RVtRV_t. Ancha kam shovqinli — intraday tanlab olish o'ziga xos bir-daromad shovqinini o'rtachalaydi — bu esa aynan HAR-RV ishlashining va agar sizda umuman intraday ma'lumot bo'lsa, RVRV ni proksi sifatida ishlatishingiz kerakligining sababi.

Deyarli hammani tutib qoladigan nozik jihat: proksi shovqinli bo'lgani uchun, zarar funksiyasini tanlash begunoh emas. Ikkita prognozni noto'g'ri zarar bilan reytinglang va shovqinli proksi reytingni ag'darib, sizga yomonroq prognoz yaxshiroq deb aytishi mumkin. Patton (2011) shovqinli proksidagi kutilayotgan zarar bo'yicha prognozlarni reytinglash sizga haqiqiy (kuzatib bo'lmaydigan) variansda oladigan bir xil reytingni beradigan ma'noda qaysi zarar funksiyalari "chidamli" ekanini aniq ishlab chiqdi. Faqat ma'lum bir oila mos keladi. Amaliyotda ikkita a'zo muhim.

MSE va QLIKE

Varianse bo'yicha o'rtacha kvadratik xato:

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

bu yerda h=σ^2h = \hat\sigma^2 — prognoz va σ2\sigma^2 r2r^2 yoki RVRV tomonidan proksi qilinadi. MSE Patton ma'nosida chidamli (uning reytingi proksiga mos), ammo u simmetrik va masshtabga bog'liq: u bir xil mutlaq o'lchamdagi ortiqcha-prognoz va kam-prognozni teng jazolaydi va u yuqori volatillik davrlaridagi xatolarni tinch davrlardagi xatolarga qaraganda beqiyos ko'proq vaznlaydi. Tinch 95% kunlarni aniq bajaradigan, ammo uch inqiroz kunida variance prognozlarini portlatadigan model MSE ostida dahshatli ko'rinadi, hatto uning inqiroz xatti-harakati aynan siz xohlagan narsa bo'lsa ham.

QLIKE (kvazi-ehtimollik) zarari ish oti:

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

Bu varianse bo'yicha Gauss ehtimolligi tomonidan ko'zda tutilgan zarar, u ham Patton ma'nosida chidamli va uni volatillik uchun afzal tanlov qiladigan ikkita xususiyati bor. Birinchidan, u to'g'ri yo'nalishda asimmetrik: u variansning kam-bashoratini ortiqcha-bashoratdan ko'ra ko'proq jazolaydi. Risk-menejer yoki vol-maqsad qiluvchi uchun bu to'g'ri asimmetriya — volni kam prognoz qilish siz muhim bo'lishidan oldin juda katta o'lcham oldingiz degani, bu esa qimmat xato. Ikkinchidan, u (taxminan) masshtabdan mustaqil: chunki u σ2/h\sigma^2/h nisbatiga bog'liq, 10% lik prognoz xatosi tinch kunda yoki inqiroz kunida sodir bo'lishidan qat'i nazar taxminan bir xilga tushadi, shuning uchun baholash MSE kabi bir hovuch yuqori-varianse kuzatuvlari tomonidan bosib olinmaydi. Proksining geteroskedastikligiga bu chidamlilik — bu aynan volatillik yovvoyi darajada o'zgarishi butun maqsad bo'lganda siz xohlagan narsa.

E'tibor bering, LQLIKE0L_{\text{QLIKE}} \ge 0, tenglik faqat h=σ2h = \sigma^2 bo'lganda. Pastroq yaxshiroq, MSE bilan bir xil.

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)

Ikkita operatsion ogohlantirish. Proksi va prognozni bir xil birliklarda saqlang (ikkalasi ham kunlik variance yoki ikkalasi ham yillik) aks holda nisbat ma'nosizdir. Va forecast_var ni hech qachon nolga tegdirmang — uni kichik pollga qisqartiring, chunki log0\log 0 butun o'rtachani zaharlaydi.

Mincer-Zarnowitz regressiyasi

Bitta zarar soni sizga qaysi prognoz yaxshiroq ekanini aytadi; u sizga prognoz qanday xato ekanini aytmaydi. Mincer-Zarnowitz (1969) regressiyasi buni qiladi. Proksini prognozga regressiya qiling:

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

Optimal, tarafkash bo'lmagan prognoz ostida a=0a = 0 va b=1b = 1: o'rtacha hisobda realized variance prognozga teng. Chetlanishlar patologiyani tashxislaydi:

  • b<1b < 1 va a>0a > 0: juda volatil bo'lgan prognozning klassik imzosi — u ortiqcha reaksiya qiladi, to'liq amalga oshmaydigan ekstremallarni prognoz qiladi. Xom kvadrat-daromad boshqariladigan modellar uchun juda keng tarqalgan.
  • b>1b > 1: prognoz kam reaksiya qiladi, haqiqiy variance bilan juda kam masshtablanadi.
  • Past regressiya R2R^2: hatto a,ba,b o'rtacha yaxshi ko'rinsa ham, prognoz variansni kundan-kunga yomon kuzatadi. Proksi juda shovqinli bo'lgani uchun, r2r^2 ga qarshi MZ R2R^2 ko'pincha faqat 0.05-0.20 bo'lishidan xavotirlanmang; RVRV ga qarshi u ancha yuqori bo'ladi. r2r^2 ga qarshi R2R^2 prognoz qanchalik yaxshi bo'lishidan qat'i nazar 1 dan ancha past chegaralangan, sof proksi shovqini tufayli.

H0:(a,b)=(0,1)H_0: (a,b) = (0,1) ning birgalikdagi FF-testi rasmiy kalibrlash tekshiruvini beradi. Amaliyotda MZ ni prognozni tushunish uchun diagnostika sifatida va QLIKE ni prognozlarni reytinglash uchun ishlating.

Diebold-Mariano: farq haqiqiymi?

Aytaylik, GARCHning o'rtacha QLIKE si 0.183 va EWMAniki 0.191. GARCH "yutadi". Ammo 0.008 haqiqiy ustunlikmi yoki tanlab olish shovqinimi? Diebold-Mariano (1995) testi aynan shunga javob beradi. Har-davr zarar farqini aniqlang

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

ikkita AA va BB prognozi uchun (bu yerda LL = QLIKE). Nol farazi teng prognoz aniqligi, H0:E[dt]=0H_0: \mathbb{E}[d_t] = 0. Statistika o'rtacha farqning uning uzoq muddatli (HAC) standart xatosi bilan standartlashtirilgani, chunki dtd_t ketma-ket korrelyatsiyalangan:

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)

bu yerda LRV^\widehat{\mathrm{LRV}} — Newey-West turidagi uzoq muddatli varianse bahosi. ±1.96\pm 1.96 dan tashqaridagi DM statistikasi teng aniqlikni 5% da rad etadi. Muhimi, DM — bu ichma-ich modellar emas, prognozlar haqidagi test va u sodda tt-test dtd_t da e'tiborsiz qoldiradigan zarar seriyasidagi ketma-ket bog'liqlikni boshqaradi.

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)

O'sha izohdagi illyustrativ natija halol va keng tarqalgan natija va bu bo'lim mavjud bo'lishining butun sababi: GARCH ko'pincha EWMAdan bir oz pastroq o'rtacha zarar chop etadi va ko'pincha o'sha ustunlik DM ahamiyatlilik chegarasidan o'ta olmaydi. Agar siz faqat o'rtacha QLIKE ni xabar qilsangiz, DM testi veto qo'ygan bo'lardi ustunliklariga o'zingizni ishontirasiz. DM statistikasini xabar qiling. Bu biz strategiya daromadlariga chidamli ustunliksiz halol baholash da qo'llaydigan bir xil intizom — bazaviy modelni mag'lub etadigan nuqta bahosi shovqin emasligini istisno qilmaguningizcha ustunlik emas.

Backtest: walk-forward vol-maqsadli strategiya

Endi biz ikki yarimni — prognozchi va o'lchamlash qoidasini — strategiyaga birlashtiramiz va uni ma'noga ega yagona usulda baholaymiz: walk-forward, tanlama tashqarisida, xarajatlar bilan.

Strategiya ataylab sodda, chunki soddalik natijani aqlli signalga emas, balki vol prognoziga bog'lashimizga imkon beradigan narsa. Faqat-long, vol-maqsadli BTC. Har kuni keyingi kun volatilligini prognoz qiling, pozitsiyani wt=min(σtarget/σ^t, wmax)w_t = \min(\sigma_{\text{target}}/\hat\sigma_t,\ w_{\max}) ga o'rnating, kechasi ushlab turing va takrorlang. Long/flat varianti trend filtri salbiy bo'lganda pozitsiyani o'chiradi; kichik portfel varianti bitta aktivning varianse o'rniga 3-qism dagi DCC kovariatsiya matritsasiga o'lchamlaydi. Biz faqat-long holatni to'liq tasvirlaymiz va kengaytmalarni qayd etamiz.

Walk-forward mexanikasi va no-look-ahead shartnomasi

Ushbu backtestning eng muhim yagona xususiyati shundaki, t+1t+1 kunida pozitsiyani o'lchamlash uchun ishlatiladigan har bir miqdor faqat tt kunining yopilishida mavjud bo'lgan ma'lumotlardan foydalanib hisoblanadi. GARCH parametrlari tt da tugaydigan rolling oynada qayta baholanadi; prognoz — o'sha moslashuvdan bir qadam oldinga σ^t+1\hat\sigma_{t+1}; pozitsiya o'sha prognozdan o'rnatiladi; va olingan daromad wt+1rt+1w_{t+1} r_{t+1}, bu yerda rt+1r_{t+1} — model hech qachon ko'rmagan keyingi kunning daromadi. GARCHni to'liq tanlamaga qayta moslash va keyin o'tmishni "prognoz qilish" odamlar tasodifan ajoyib backtest ishlab chiqarishining eng keng tarqalgan usuli. Biz bu look-ahead tuzog'ini va umumiy metodologiyani walk-forward optimallashtirish da ko'rib chiqamiz.

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),
    }

Ko'rinishidan muhimroq bo'lgan bir nechta amalga oshirish eslatmalari:

  • Optimizer uchun masshtablash. arch moslashuvlari daromadlar foizda bo'lganda raqamli jihatdan baxtliroq, shuning uchun * 100 va variansni masshtabsizlashda mos keladigan / 100**2. Masshtabsizlashni unutsangiz, sizning maqsad volingiz 10,000x noto'g'ri bo'ladi.
  • Qayta moslash kadensi. GARCH parametrlarini har bir kun qayta baholash qimmat va deyarli hech narsa qo'shmaydi — parametrlar haftadan-haftaga barqaror. Kunlik prognoz qilish bilan (rekursiya qayta moslashsiz ham yangi daromadlardan σt2\sigma_t^2 ni yangilaydi) haftalik qayta moslash (refit_every=5) standart murosa. Bu birgalikdagi risk uchun kopula modellari dagi kopula quvurdan keshlash maslahatini aks ettiradi.
  • wmaxw_{\max} cheklovi kosmetik emas. Prognoz voli o'lik-tinch rejimda qulaganida, σtarget/σ^t\sigma_{\text{target}}/\hat\sigma_t 5x, 10x leverajga portlashi mumkin. Cheklanmagan volatillikni maqsad qilish sizga volatillik rejimi o'zgarishidan oldin — prognoz eng noto'g'ri bo'lishga tayyor bo'lgan aynan o'sha lahzada — halokatli leverajni mamnuniyat bilan beradi. Uni cheklang (bu yerda 3x) va cheklov eng tinch, ortga qarab eng xavfli davrlarda aynan bog'lanishini tan oling.
  • Xarajatlar turnover bilan masshtablanadi va volatillikni maqsad qilish — bu turnover mashinasi. Prognozdagi har bir chayqalish pozitsiyani qayta o'lchamlaydi. Sakrovchi prognozga ega past-vol aktivda siz kitobni kunlik aylantirasiz. cost_bps hadi yaxlitlash tafsiloti emas; yuqori-turnoverli vol-maqsad uchun u yalpi Sharpe yaxshilanishining muhim qismini yeb qo'yishi mumkin.

Chiqish qanday ko'rinishga ega (illyustrativ)

Buni BTC kunlik ma'lumotlarida ko'p yillik oyna davomida ishga tushirish, to'rtta prognozchini o'lchamlash maxraji sifatida solishtirish, quyidagi shaklga ega jadval hosil qilishga moyil. Quyidagi raqamlar illyustrativ — odatiy shaklni ko'rsatish uchun qo'lda tanlangan, haqiqiy backtest chiqishi emas — ammo tartib va kattaliklar amaliyotchilar xabar qiladigan narsalarni ifodalaydi.

O'lchamlash prognozi Sharpe Realized vol Maqsad vol Maks drawdown Yillik turnover
Belgilangan notional (maqsadsiz) 0.71 0.68 -0.78 0.1x
Rolling RV (60d) 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 (intraday proksi) 1.09 0.20 0.20 -0.31 20x

Qurishga arziydigan ikkita variant

Faqat-long holat prognozni ajratadi, ammo ikkita kengaytma aniq ko'rsatishga yetarlicha keng tarqalgan.

Trend darvozasi bilan long/flat. Volatillikni maqsad qilish pozitsiyani o'lchamlaydi, ammo yo'nalish ko'rinishini olmaydi — u har doim long. Arzon, halol yaxshilanish — sekin trend filtri salbiy bo'lganda pozitsiyani o'chirish, shunda siz vol-maqsadli longni faqat o'sish trendlarida ushlaysiz va aks holda flat o'tirasiz. Bu o'lchamlash mantiqini bir xil saqlaydi va tepasiga qo'pol rejim filtrini qatlaydi; u kirishlarni vaqtlashtiradi deb ko'rsatmaydi, faqat aniq tushish trendlari orqali ushlab turishdan qochadi.

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)

Trend darvozasi tushishdagi turnoverni kesadi (siz ayiq bozorida qisqarayotgan pozitsiyani aylantirishni to'xtatasiz) ammo o'z rejim riskini qo'shadi — u to'lqinsimon yon bozorlarda whipsaw qiladi va burilishlarda kechikadi. U yordam beradimi — bu empirik savol bo'lib, siz uni o'lchamlash qoidasining o'zi kabi bir xil walk-forward, DM-testlangan qat'iylik bilan javob berishingiz kerak; trend filtri — bu aynan tanlamada ajoyib ko'rinadigan va tanlama tashqarisida bug'lanib ketadigan qo'shimcha turi.

DCC kovariatsiyada portfel vol-maqsadi. Bir nechta aktivlar kitobi uchun skalyar prognoz σ^t\hat\sigma_t portfel volatilligiga wΣtw\sqrt{w^\top \Sigma_t w} aylanadi, bu yerda Σt\Sigma_t3-qism dagi DCC-GARCHdan vaqt bo'ylab o'zgaruvchi kovariatsiya matritsasi. Siz bazaviy vaznlarni w0w_0 tanlaysiz (teng vazn, bozor kapitali yoki o'rtacha-varianse egilishi), Σt\Sigma_t ostida portfelning prognoz volini hisoblaysiz va portfel maqsadiga tegishi uchun butun vazn vektorini masshtablaysiz.

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

Bu portfel-qurish adabiyotiga tabiiy ko'prik: bazaviy vaznlar w0w_0 Markowitz o'rtacha-varianse dan yoki HRP/CVaR kabi risk-asosli usuldan kelishi mumkin va keyin volatillikni maqsad qilish jami riskni doimiyga masshtablaydigan overlay sifatida tepada o'tiradi. DCC matritsasi muhim, chunki korrelyatsiyalar qulashlarda keskin oshadi (3-qism) — tinch bozorlarda diversifikatsiyalangan ko'rinadigan portfel aynan muhim bo'lganda statik kovariatsiya nazarda tutgandan ancha yuqori prognoz voliga ega bo'lishi mumkin va overlay javob sifatida yalpi ta'sirni kesadi.

Siz doim chizishingiz kerak bo'lgan diagnostikalar

Hech qachon faqat xulosa jadvaliga ishonmang. Har qanday vol-maqsad uchun uch narsani chizing va biror Sharpe soniga ishonishdan oldin ularni ko'z bilan tekshiring. Birinchidan, strategiyaning realized rolling voli maqsad chizig'iga qarshi — u maqsadga yopishishi kerak; undan tizimli ravishda yuqoriga drift sizning prognozingiz past tarafkash ekanini bildiradi (qimmat yo'nalish). Ikkinchidan, pozitsiya/leveraj seriyasi — cheklov bog'lanishini va drawdownlardan oldin leveraj sakrashlarini qidiring, bu rejim o'zgarishida ushlanib qolgan prognozning imzosi. Uchinchidan, prognoz-va-proksi tarqoqlik grafigi (Mincer-Zarnowitz surati) — 1 dan uzoq nishabli bulut sizga prognoz QLIKE o'rtachasi yashira oladigan usulda noto'g'ri masshtablangani aytadi. Bu uch grafik har qanday yagona statistikadan ko'ra ko'proq xatolar va o'z-o'zini aldashni ushlaydi.

Bu jadvalni siz har bir backtest jadvalini o'qishingiz kerak bo'lgan usulda o'qing: nima chidamli va nima marjinalligiga qarang. Chidamli faktlar ko'zga tashlanadi. Har bir vol-maqsadli variant Sharpe bo'yicha va yanada dramatik ravishda drawdown hamda realized-vol barqarorligi bo'yicha belgilangan notionalni ezib tashlaydi — belgilangan-notional strategiya 78% drawdown bilan 68% yillik volda ishlaydi, bu esa shunchaki sarmoyalab bo'lmaydi. Va har bir maqsad qilish usuli 20% maqsadga yaqin realized vol beradi, bu esa mexanika ishlashining butun va'dasi. Marjinal faktlar — prognozchilar orasidagi farqlar: HAR GARCHni, GARCH EWMAni, EWMA rolling RV ni ustun turadi, ammo bo'shliqlar kichik — Sharpe nuqtasining o'ndan biri — va prognozlarda Diebold-Mariano yoki daromadlarda bootstrap bilan testlanganda ko'pincha ahamiyatlilikdan o'ta olmaydi. Murakkab va sodda prognozchi o'rtasidagi o'sha kichik, mo'rt, rejimga bog'liq bo'shliq butun ushbu turkumning halol sarlavhasidir.

Bu sizga nima berishini halol qabul qilish

Ushbu blog o'zingizni aldamasdan backtest qilish bo'yicha butun to'plamga ega, shuning uchun uni o'z natijamizga jimgina umid qilish o'rniga qo'llaylik.

Volatillikni maqsad qilish risk-korrektirovkalangan daromad va drawdownlarni yaxshilaydi. U yo'qdan alfa yaratmaydi. Jadvalga yana qarang. Maqsad qilishdan Sharpe yaxshilanishi haqiqiy va u ega bo'lishga arziydi — ammo uni dekompozitsiya qiling va uning ko'p qismi yuqori-vol rejimlarga doimiy pozitsiya ushlab turmaslikdan keladi, bu esa mexanik ravishda eng yomon drawdownlardan qochadi va kompaundlash yo'lini barqarorlashtiradi. Strategiya hali ham BTC longi; unda bozor bermagan ko'rinish yo'q. Agar BTC sizning tanlamangizda salbiy Sharpega ega bo'lsa, volatillikni maqsad qilish sizga ijobiy emas, kamroq yomon salbiy Sharpe beradi. U daromad taqsimotini qayta shakllantiradi — nozikroq dumlar, barqarorroq vol, yaxshiroq geometrik kompaundlash — ammo xom yo'nalish ustunligi asosdagi long qanday bo'lsa, shu. Chiroyli aksiya egri chizig'i sizni risk-menejmentni topganingizda alfani topdim deb ishontirishga aldashiga yo'l qo'ymang. Moreira-Muir vol menejmentidan aktsiya omillarida haqiqiy alfa topdi, ammo bu natija omilning vaqt bo'ylab o'zgaruvchi risk-daromad savdosi haqida va u avtomatik ravishda boshqa tanlamada bitta kripto aktiviga o'tmaydi.

GARCHning EWMA ustidagi prognoz-sifat ustunligi ko'pincha kichik va rejimga bog'liq. Bu 1-3 qismlarning noqulay to'lovi. Siz tobora murakkab modellar qurdingiz — leveraj hadlari, Student-t dumlar, dinamik korrelyatsiyalar — va har birining vol-maqsad qilish P&L ga marjinal hissasi, sodda EWMA ustidan, ko'pincha shovqin diapazoni ichida. GARCHning ustunligi (shoklardan keyin o'rtachaga qaytish) asosan aniq rejimlarda ko'rinadi: keskin sakrashlar keyin normallashadigan. Uzoq davom etuvchi trendlarda yoki doimiy yuqori-vol rejimlarida u EWMAdan deyarli farqlanmaydi. Bu GARCHni foydasiz qilmaydi — o'rtachaga qaytish strukturasi, izohlanuvchi parametrlar, oldinga yo'llarni simulyatsiya qilish va prognozga qarshi optsionlarni narxlash qobiliyati — bularning barchasi EWMAda yo'q qadrga ega — ammo agar sizning yagona ishlatishingiz o'lchamlash bo'lsa, murakkablik xarajatini to'lashdan oldin DM testini ishga tushiring va biling, rejim aniqlash sizga boshqa burchakdan bir xil narsani aytadi: g'olib model rejimga bog'liq.

Backtest Sharpe jonli Sharpe uchun yuqori chegaradir va volatillikni maqsad qilish bo'shliqni kengaytiradi. Strategiya turnover-og'ir va leveraj-masshtablangani uchun, u sodda backtest qoldiradigan ishqalanishlarga g'ayrioddiy sezgir: sizning fillslaringiz o'lchamlagan yopilishdan yomonroq, levarajlangan perp pozitsiyalarida funding xarajatlari doimiy hisoblanadi va leveraj cheklovi sodda w * return e'tiborsiz qoldiradigan marja va likvidatsiya mexanikasi bilan o'zaro ta'sir qiladi. Bularning har biri jonlini backtestdan yomonroq qiladi. Biz bu bo'shliqni backtest-jonli parallik da tizimli ravishda ko'rib chiqamiz; xususan volatillikni maqsad qilish uchun, konservativ xarajatlar, realistik (past) leveraj cheklovi ishlatib va siz signalni hisoblagan yopilish o'rniga keyingi barning ochilishida bajarib buni byudjetlang.

Volatillik risk premiyasi haqida eslatma. Yuqoridagilarning barchasi realized volatillikni prognoz qiladi. Parallel, savdo qilinadigan ob'ekt bor: optsionlarga narxlangan implied volatillik, u o'rtacha keyingi realized voldan yuqori turadi — volatillik risk premiyasi, vol sakrashi riskini ko'tarish uchun kompensatsiya. O'sha bo'shliqning o'zi daromad manbai (variansni sotish uni yig'adi, sotib olish dum riskini hejlaydi) va u volatillikni maqsad qilishdan haqiqatan boshqa o'yin: bu volatillik prognozidan foydalanish emas, balki volatillik narxiga garov. Biz uni bu yerda ko'zlamaymiz, ammo mashina Black-Scholes optsion narxlash dagi narxlash modelidan boshlanadi va yaxshi realized-vol prognozi (1-2 qismlar) — implied vol qimmatmi yoki arzonmi baholash uchun kerak bo'lgan aynan kirish. Sizning GARCH prognozingizni optsion bozorining implied voliga solishtirish ushbu turkumda qurgan barcha narsangizning halolroq ishlatishlaridan biridir.

Amaliy mulohazalar

Ishlaydigan vol-maqsadni mo'rtidan ajratib turadigan narsalar to'plami.

  • To'g'ri gorizontda baholang. Agar bir kun ushlab turilgan pozitsiyani o'lchamlasangiz, bir kunlik volni prognoz qiling. Agar haftalik qayta muvozanatlasangiz, haftalik volni prognoz qiling (va maqsad qiling) yoki kunlik GARCH prognozini gorizont bo'ylab agregatlang — ko'p-qadamli GARCH prognozi σˉ2\bar\sigma^2 tomon o'rtachaga qaytadi, buni sodda "hdaily\sqrt{h}\cdot\text{daily}" masshtablash e'tiborsiz qoldiradi. 1-qism ko'p-qadamli GARCH prognozlashni qamrab oladi.
  • 24/7 bozorlarda yillashtirish. Kripto yiliga 365 kun dam olish kunlari yoki bayramlarsiz savdo qiladi, shuning uchun kunlik volni aktsiyalardagi 252\sqrt{252} emas, 365\sqrt{365} bilan yillashtiring. Buni noto'g'ri qilish maqsadingizni jimgina ~20% ga noto'g'ri masshtablaydi.
  • Maxraj kovariatsiya matritsasi bo'lishi mumkin. Ko'p-aktivli kitob uchun skalyar σ^t\hat\sigma_t ni 3-qism dagi DCC-GARCHdan portfel voli wΣtw\sqrt{w^\top \Sigma_t w} bilan almashtiring va butun vaznlar vektorini portfel maqsad voliga tegishi uchun masshtablang. Bu volatillikni maqsad qilishni o'rtacha-varianse o'lchamlashiga (kripto uchun Markowitz) va risk-asosli taqsimotga (HRP va CVaR quvurlar) bog'laydi — volatillikni maqsad qilish — bu portfel risk byudjetiga masshtablashning bitta-aktivli maxsus holati.
  • Volatillikni maqsad qilish nozik tarzda protsiklik. Hamma bir xil 1/σ1/\sigma qoidasini ishga tushirganda, vol sakrashi sinxronlashgan deleverajingni majbur qiladi, bu narxlarni pastga suradi, bu realized volni oshiradi, bu ko'proq deleverajingni majbur qiladi. Bu qayta aloqa (2018 "volmageddon" va turli kripto deleverajing kaskadlarida yaxshi hujjatlashtirilgan) qoidaning ko'p o'yinchilar ishlatganda aynan kamroq yaxshi ishlashini bildiradi. Bu uni tark etish sababi emas, ammo leverajni cheklash va vol sakrashi paytidagi fillslaringiz tinch-bozor fillslariga o'xshaydi deb faraz qilmaslik uchun sababdir.
  • Prognozni pollang va qisqartiring. Nol yoki nolga yaqin prognoz voli cheksiz leveraj hosil qiladi. σ^t\hat\sigma_t ni doim aqli joyida minimumda pollang va pozitsiyani cheklang va har birining qanchalik tez-tez bog'lanishini logga yozing — agar cheklov ko'p vaqt bog'lansa, sizning maqsadingiz aktiv uchun juda agressiv.

Xulosa

  • Volatillik prognozi qarorni o'zgartirmaguncha qadrga ega emas. Volatillikni maqsad qilish — ta'sirni wt=σtarget/σ^tw_t = \sigma_{\text{target}}/\hat\sigma_t (cheklangan) sifatida o'lchamlash — prognozning qadrini eng toza testi, chunki prognoz sifati tekisroq realized-vol profiliga va yuqoriroq Sharpega bevosita xaritalanadi.
  • Volatillikni maqsad qilish risk-korrektirovkalangan daromadni va ayniqsa drawdownlarni nazorat qiladi, chunki volatillik prognoz qilinadi (u klasterlanadi) yo'nalish esa yo'q va chunki Sharpe koeffitsiyentlari qoida avtomatik ravishda kam vaznlaydigan yuqori-vol rejimlarida tushadi. Bu kutilayotgan daromad volatillik bilan miqyoslashadi degan faraz ostidagi Kelly o'lchamlashi.
  • GARCHni kuchli bazaviy modellarga qarshi halol baholang: rolling realized vol, EWMA/RiskMetrics (λ=0.94\lambda=0.94, nol erkin parametrli IGARCH) va intraday realized-variance proksisida HAR-RV. EWMA va HAR ni mag'lub etish qiyin.
  • Siz haqiqiy volatillikni kuzata olmaysiz, shuning uchun proksiga (r2r^2 yoki ancha yaxshiroq RVRV) qarshi proksi shovqiniga chidamli zarar funksiyalari ishlatib baholang. MSE ustidan QLIKE ni afzal ko'ring: u kam-prognozlashni ko'proq jazolaydi (qimmat xato) va masshtabdan mustaqil, shuning uchun u bir nechta yuqori-vol kunlar tomonidan bosib olinmaydi. Tarafkashlikni tashxislash uchun Mincer-Zarnowitz ni va bitta prognozning ustunligi haqiqiymi yoki shovqinmi hal qilish uchun Diebold-Mariano testini ishlating.
  • Walk-forward, xarajatga-ehtiyot backtestda volatillikni maqsad qilish Sharpe va drawdown bo'yicha belgilangan notionalni ishonchli mag'lub etadi va to'rtta prognozchi bir-biriga yaqin klasterlanadi — GARCH-ustidan-EWMA ustunligi kichik, rejimga bog'liq va ko'pincha statistik ahamiyatga ega emas. Faqat o'rtacha zararni emas, DM testini xabar qiling.
  • Halol bo'ling: volatillikni maqsad qilish — bu risk-menejment, alfa emas. U sizda allaqachon bo'lgan har qanday yo'nalish garovining daromad taqsimotini qayta shakllantiradi; u yo'qdan ustunlik yaratmaydi. Va u turnover-og'ir va leveraj-masshtablangan, shuning uchun jonli natijalar backtestdan odatdagidan ko'proq kechikadi.

Adabiyotlar:

  • 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

Miqdoriy tadqiqotlar va strategiya

Telegramda muhokama qilish
Newsletter

Bozordan bir qadam oldinda bo'ling

Sun'iy intellekt savdo tahlillari, bozor tahlili va platforma yangiliklari uchun bizning xabarnomaga obuna bo'ling.

Biz sizning maxfiyligingizni hurmat qilamiz. Istalgan vaqtda obunadan chiqishingiz mumkin.