← Kembali ke artikel
July 10, 2026
Bacaan 5 minit

GARCH(1,1): Meramal Volatiliti Kripto

#volatility
#GARCH
#risk
#forecasting
#crypto
#algorithmic-trading

Buka carta pulangan harian BTC dan anda akan perasan sesuatu yang tidak pernah disediakan oleh buku teks tentang jalan rawak: ketenangan dan kekacauan datang secara berkelompok. Satu hari turun 6% jarang berdiri sendiri. Ia berada dalam seminggu ayunan 4-8%, kemudian pasaran menghela nafas dan hanyut melalui sebulan sesi 1% yang lena sebelum ribut seterusnya. Pulangan itu sendiri kelihatan hampir tidak dapat diramal — anda tidak boleh dengan yakin mengatakan sama ada esok naik atau turun — tetapi magnitudnya sangat boleh diramal. Pergolakan hari ini memberitahu banyak tentang pergolakan esok.

Hampir setiap alat risiko yang digunakan peniaga secara senyap mengandaikan ini tidak benar. Black-Scholes menetapkan harga opsyen dengan satu σ\sigma tetap. Angka Value-at-Risk statik mendarabkan satu anggaran volatiliti dengan kuantil normal. Stop-loss tetap 3% melayan hari Selasa yang sunyi sepi dan jam-jam sekitar pengumuman FOMC atau de-peg bursa besar seolah-olah kedua-duanya membawa risiko yang sama. Setiap satu ini rosak dengan cara yang sama: ia meruntuhkan kuantiti yang berubah mengikut masa menjadi pemalar, lalu terkejut apabila pemalar itu ternyata bergerak.

Artikel ini ialah Bahagian 1 daripada siri empat bahagian tentang pemodelan volatiliti untuk kripto. Ia membina asas: model GARCH(1,1), sebab ia sesuai dengan pulangan kripto dengan begitu baik, cara menganggarkannya secara jujur melalui kemungkinan maksimum dengan pustaka arch, dan cara menukar ramalan varians bersyarat menjadi dua perkara yang segera berguna — saiz kedudukan dan lebar stop yang kedua-duanya "bernafas" bersama pasaran. Bahagian 2 menambah asimetri dan ekor tebal, Bahagian 3 beralih kepada multivariat, dan Bahagian 4 menyusun ujian belakang penyasaran-volatiliti secara penuh. Kami sengaja mengekalkan aplikasi di sini secara ringkas; strategi yang disahkan secara walk-forward dengan jujur adalah subjek Bahagian 4.

Fakta Berstruktur Pulangan Kripto

Sebelum memodelkan apa-apa, elok untuk tepat tentang apa yang cuba kita hasilkan semula. Pulangan kewangan empirikal — ekuiti, FX, dan kripto khususnya — berkongsi sekumpulan kecil keteraturan statistik teguh yang telah didokumenkan selama berpuluh tahun. Ia biasanya dipanggil fakta berstruktur (stylized facts), dan tiga daripadanya menggerakkan segala yang berikut.

1. Pengelompokan volatiliti. Pergerakan besar cenderung diikuti oleh pergerakan besar (tanda mana-mana pun), dan pergerakan kecil oleh pergerakan kecil. Mandelbrot perasan ini dalam harga kapas pada 1963. Secara formal, walaupun pulangan rtr_t hampir tidak berkorelasi bersiri, pulangan yang disquarekan rt2r_t^2 (proksi untuk varians terealisasi) menunjukkan autokorelasi positif yang kuat dan reput perlahan.

2. Ekor tebal (leptokurtosis). Taburan pulangan tanpa syarat mempunyai jauh lebih banyak jisim pada ekstrem berbanding Gaussian. Jika taburan normal mempunyai kurtosis 3, pulangan log harian BTC sentiasa berada di atas 8-10, dan pulangan kripto frekuensi lebih tinggi boleh lebih teruk lagi. Hari enam-sigma, yang menurut model normal sepatutnya berlaku kira-kira sekali setiap sejuta tahun, muncul beberapa kali setiap dekad.

3. Tiada autokorelasi linear dalam pulangan, autokorelasi kuat dalam pulangan disquarekan. Inilah cap jari yang membezakan proses volatiliti yang tulen daripada trend remeh. Jika anda regres rtr_t ke atas lat dirinya sendiri, anda tidak dapat apa-apa yang boleh dieksploitasi. Jika anda regres rt2r_t^2 ke atas latnya, anda temui isyarat yang jelas dan berterusan. Inilah tepat struktur yang sepatutnya ditangkap oleh model varians — dan tepat apa yang dibuang oleh model σ\sigma-tetap.

Kita boleh melihat ketiga-tiganya dalam beberapa baris. Tiada apa di sini memerlukan sumber data khas; gunakan ccxt dalam pengeluaran, tetapi untuk cebisan boleh diulang semula yfinance sudah memadai.

import numpy as np
import pandas as pd
import yfinance as yf
from statsmodels.graphics.tsaplots import plot_acf
from statsmodels.stats.diagnostic import acorr_ljungbox
from scipy import stats

px = yf.download("BTC-USD", start="2021-01-01", end="2025-12-31")["Close"]
ret = np.log(px / px.shift(1)).dropna()          # log returns
ret = ret.rename("btc")

print(f"Observations:     {len(ret)}")
print(f"Ann. volatility:  {ret.std() * np.sqrt(365):.2%}")
print(f"Skewness:         {stats.skew(ret):.2f}")
print(f"Excess kurtosis:  {stats.kurtosis(ret):.2f}")   # 0 == Gaussian

lb_ret  = acorr_ljungbox(ret,        lags=[10], return_df=True)
lb_ret2 = acorr_ljungbox(ret ** 2,   lags=[10], return_df=True)
print("\nLjung-Box p-value, returns   (lag 10):", float(lb_ret["lb_pvalue"].iloc[0]))
print("Ljung-Box p-value, squared   (lag 10):", float(lb_ret2["lb_pvalue"].iloc[0]))

Bacaan tipikal (ilustratif — tetingkap anda akan berbeza): kurtosis lebihan jauh melebihi 3, nilai-p Ljung-Box pada pulangan mentah yang gagal menolak "tiada autokorelasi," dan nilai-p pada pulangan disquarekan yang secara berkesan sifar. Kontras terakhir itu ialah keseluruhan permainan. Tiada apa untuk didagang dalam tanda pulangan pada ufuk harian, tetapi terdapat banyak struktur dalam variansnya, dan struktur itu boleh diramal.

Nota tentang sifat 24/7 kripto. Tidak seperti ekuiti, tiada jurang semalaman dan tiada penutupan hujung minggu, jadi "hari" adalah bar 24-jam yang bersih dan faktor penahunan ialah 365\sqrt{365}, bukan 252\sqrt{252}. Pengelompokan volatiliti juga bertahan pada skala intra-hari, yang penting jika anda menjalankan GARCH pada bar sejam — pertukaran kadar pembiayaan dan lonjakan likuidasi menyuntik ledakan varians berkelompok yang tajam yang diratakan oleh model harian.

Daripada ARCH kepada GARCH

Masalahnya kini dinyatakan dengan tajam: memodelkan varians yang bukan tetap tetapi bergantung pada masa lalu terkini. Model pertama yang melakukan ini dengan betul ialah ARCH Engle (Autoregressive Conditional Heteroskedasticity, 1982), yang memenangi Hadiah Nobel pada 2003.

Tulis pulangan sebagai min bersyarat tambah kejutan:

rt=μt+εt,εt=σtzt,zti.i.d. (0,1)r_t = \mu_t + \varepsilon_t, \qquad \varepsilon_t = \sigma_t z_t, \qquad z_t \sim \text{i.i.d. } (0, 1)

Di sini σt2\sigma_t^2 ialah varians bersyarat — varians rtr_t diberi segala yang diketahui hingga masa t1t-1 — dan ztz_t ialah inovasi piawai (normal piawai dalam kes paling ringkas). Perkataan "bersyarat" melakukan semua kerja: tanpa syarat varians mungkin tetap, tetapi bersyarat pada semalam ia bergerak.

ARCH(qq) Engle menjadikan varians hari ini sebagai jumlah wajaran daripada qq kejutan disquarekan terakhir:

σt2=ω+i=1qαiεti2\sigma_t^2 = \omega + \sum_{i=1}^{q} \alpha_i \, \varepsilon_{t-i}^2

dengan ω>0\omega > 0 dan αi0\alpha_i \ge 0 untuk mengekalkan varians positif. Ini menangkap pengelompokan secara langsung: kejutan besar εt12\varepsilon_{t-1}^2 menolak σt2\sigma_t^2 naik, yang meningkatkan peluang kejutan besar lagi, yang mengekalkan varians tinggi. Masalahnya ialah reput empirikal. Kegigihan volatiliti dalam pasaran sebenar merentangi banyak lat, jadi untuk memasangnya model ARCH memerlukan qq yang besar — selalunya 8, 10, atau lebih — dan itu bermakna menganggarkan vektor αi\alpha_i yang panjang dan tidak stabil yang cenderung terlebih pasang (overfit).

Wawasan Bollerslev pada 1986 ialah menambah satu terma yang menyerap semua kegigihan itu dengan satu parameter sahaja. Rekursi GARCH(1,1) — Generalized ARCH — ialah:

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

Tiga parameter, tiga tafsiran bersih:

  • ω>0\omega > 0garis dasar atau lantai. Pemalar yang menambat paras varians jangka panjang. Varians tidak pernah reput di bawah apa yang disokong oleh ω\omega.
  • α0\alpha \ge 0tindak balas terhadap berita. Betapa ganasnya varians bertindak balas terhadap kejutan semalam εt12\varepsilon_{t-1}^2. α\alpha yang besar bermakna varians bersyarat mudah melompat dan sensitif kejutan.
  • β0\beta \ge 0kegigihan atau ingatan. Berapa banyak varians semalam dibawa masuk ke hari ini. β\beta yang besar bermakna volatiliti licin dan perlahan pudar — tenang kekal tenang, ribut kekal ribut.

Keanggunannya terletak pada rekursi itu. Kerana σt12\sigma_{t-1}^2 itu sendiri mengandungi terma βσt22\beta \sigma_{t-2}^2, mengembang ke belakang menunjukkan bahawa GARCH(1,1) ialah ARCH(\infty) dengan wajaran yang reput secara geometrik αβk\alpha \beta^{k} ke atas kejutan disquarekan yang lalu:

σt2=ω1β+αk=0βkεt1k2\sigma_t^2 = \frac{\omega}{1-\beta} + \alpha \sum_{k=0}^{\infty} \beta^{k}\, \varepsilon_{t-1-k}^2

Jadi satu β\beta sahaja membeli anda ingatan berwajaran eksponen yang tidak terhingga terhadap kejutan lalu. Inilah sebabnya GARCH(1,1) yang hanya — tiga parameter — sentiasa mengatasi model ARCH dengan sepuluh, dan sebabnya ia menjadi kuda beban pemodelan volatiliti gunaan. Ia sebenarnya sepupu rapat penganggar varians EWMA RiskMetrics, iaitu kes khas ω=0\omega = 0, α+β=1\alpha + \beta = 1 dengan β\beta ditetapkan pada 0.94. GARCH menggeneralisasikannya dengan membenarkan data memilih α\alpha, β\beta, dan paras kembali-ke-min yang tulen.

Sifat: Kestasioneran, Varians Jangka Panjang, dan Separuh Hayat

Rekursi GARCH(1,1) mempunyai beberapa sifat yang wajar diterbitkan, kerana ia adalah apa yang membolehkan anda menaakul tentang model itu bukan sekadar memasangnya secara membuta tuli.

Varians tanpa syarat (jangka panjang). Andaikan proses itu kovarians-stasioner supaya varians tanpa syarat σˉ2=E[εt2]=E[σt2]\bar{\sigma}^2 = \mathbb{E}[\varepsilon_t^2] = \mathbb{E}[\sigma_t^2] wujud dan tetap sepanjang masa. Ambil jangkaan kedua-dua belah rekursi. Kerana E[εt12]=E[σt12]=σˉ2\mathbb{E}[\varepsilon_{t-1}^2] = \mathbb{E}[\sigma_{t-1}^2] = \bar{\sigma}^2:

σˉ2=ω+ασˉ2+βσˉ2        σˉ2=ω1αβ\bar{\sigma}^2 = \omega + \alpha\, \bar{\sigma}^2 + \beta\, \bar{\sigma}^2 \;\;\Longrightarrow\;\; \bar{\sigma}^2 = \frac{\omega}{1 - \alpha - \beta}

Inilah paras volatiliti kembali kepada min. Ia hanya wujud — dan hanya positif — apabila α+β<1\alpha + \beta < 1.

Syarat kestasioneran. Ketaksamaan yang sama itu,

α+β<1,\alpha + \beta < 1,

ialah syarat kovarians-kestasioneran untuk GARCH(1,1). Kuantiti α+β\alpha + \beta ialah kegigihan proses varians: ia pekali AR(1) yang mentadbir cara kejutan varians reput kembali ke arah σˉ2\bar{\sigma}^2. Jika α+β1\alpha + \beta \ge 1, varians tanpa syarat tidak terhingga (atau tidak ditakrifkan) dan kejutan tidak pernah pupus sepenuhnya.

Kita boleh melihat kembali-ke-min secara jelas. Takrifkan sisihan varians σt2σˉ2\sigma_t^2 - \bar{\sigma}^2. Sedikit algebra pada rekursi (menggantikan ω=σˉ2(1αβ)\omega = \bar{\sigma}^2(1 - \alpha - \beta)) memberi, dalam jangkaan:

Et[σt+k2]σˉ2=(α+β)k(σt+12σˉ2)\mathbb{E}_t[\sigma_{t+k}^2] - \bar{\sigma}^2 = (\alpha + \beta)^{k}\,\bigl(\sigma_{t+1}^2 - \bar{\sigma}^2\bigr)

Jurang antara varians semasa dan paras jangka panjangnya mengecut dengan faktor (α+β)(\alpha + \beta) setiap langkah. Inilah tepat ramalan berbilang langkah yang kita gunakan kemudian.

Separuh hayat volatiliti. Berapa lama masa yang diambil untuk kejutan varians reput separuh kembali ke normal? Tetapkan (α+β)h=1/2(\alpha+\beta)^{h} = 1/2 dan selesaikan:

h1/2=ln0.5ln(α+β)h_{1/2} = \frac{\ln 0.5}{\ln(\alpha + \beta)}

Untuk α+β=0.95\alpha + \beta = 0.95 separuh hayat kira-kira 13.5 hari; untuk 0.980.98 kira-kira 34 hari; untuk 0.990.99 kira-kira 69 hari. Nombor tunggal ini selalunya lebih intuitif daripada parameter mentah — ia memberitahu anda, dalam unit bar anda, betapa lekitnya volatiliti.

Masalah dekat-IGARCH dalam kripto. Inilah kerutan khusus kripto. Apabila anda memasang GARCH(1,1) kepada pulangan BTC atau ETH, anda hampir selalu dapati α+β\alpha + \beta sangat dekat dengan 1 — nilai 0.98, 0.99, kadangkala 0.995 adalah lazim. Ini rejim near-IGARCH (Integrated GARCH). Ia mempunyai akibat sebenar:

  • Separuh hayat menjadi besar sangat (minggu ke bulan), jadi model melayan volatiliti sebagai sangat gigih dan jarang kembali ke min.
  • Anggaran σˉ2=ω/(1αβ)\bar{\sigma}^2 = \omega/(1-\alpha-\beta) menjadi sangat sensitif: perubahan kecil dalam α+β\alpha+\beta dari 0.99 kepada 0.995 menggandakan varians jangka panjang tersirat. Jangan sekali-kali percaya anggaran titik vol jangka panjang dalam rejim ini tanpa selang keyakinan.
  • Ramalan berbilang langkah kembali ke min dengan begitu perlahan sehingga, untuk ufuk praktikal di bawah beberapa minggu, GARCH berkelakuan hampir seperti jalan-rawak-dalam-varians (yang mana itu adalah andaian EWMA).

Sama ada dekat-integrasi ini tulen atau artifak daripada pemecahan struktur (peralihan kekal dalam paras volatiliti yang dibaca oleh model sebagai satu episod gigih yang panjang) adalah perdebatan sebenar. Ini satu lagi sebab untuk memasang semula pada tetingkap bergolek berbanding memasang sekali pada seluruh sejarah, satu perkara yang kita kembali kepadanya dalam bahagian perangkap. Struktur rejim khususnya lebih baik dikendalikan oleh model bertukar eksplisit — lihat pengesanan rejim dengan model Markov tersembunyi, yang melengkapi GARCH berbanding menggantikannya.

Anggaran melalui Kemungkinan Maksimum

Parameter GARCH dianggarkan melalui kemungkinan maksimum. Logiknya langsung: diberi θ=(μ,ω,α,β)\theta = (\mu, \omega, \alpha, \beta), rekursi itu menghasilkan laluan penuh varians bersyarat σt2(θ)\sigma_t^2(\theta), dan di bawah taburan yang diandaikan untuk inovasi ztz_t kita boleh menulis betapa mungkinnya pulangan yang diperhatikan itu. Kita kemudian pilih θ\theta untuk memaksimumkan kemungkinan itu.

Andaikan inovasi Gaussian ztN(0,1)z_t \sim \mathcal{N}(0,1), jadi rtFt1N(μ,σt2)r_t \mid \mathcal{F}_{t-1} \sim \mathcal{N}(\mu, \sigma_t^2). Ketumpatan bersyarat satu pemerhatian ialah

f(rtFt1)=12πσt2exp ⁣((rtμ)22σt2).f(r_t \mid \mathcal{F}_{t-1}) = \frac{1}{\sqrt{2\pi\sigma_t^2}}\exp\!\left(-\frac{(r_t - \mu)^2}{2\sigma_t^2}\right).

Kerana model itu ditulis secara bersyarat, kemungkinan bersama itu terurai menjadi hasil darab ketumpatan satu-langkah-hadapan, dan log-kemungkinan ialah jumlah biasa:

(θ)=12t=1T[ln(2π)+lnσt2(θ)+(rtμ)2σt2(θ)].\ell(\theta) = -\frac{1}{2}\sum_{t=1}^{T}\left[\ln(2\pi) + \ln \sigma_t^2(\theta) + \frac{(r_t - \mu)^2}{\sigma_t^2(\theta)}\right].

Dua fakta struktur untuk diperhatikan. Pertama, σt2\sigma_t^2 muncul kedua-duanya sebagai penalti (lnσt2\ln \sigma_t^2 — model dihukum kerana mendakwa varians tinggi) dan dalam residual dipiawaikan ((rtμ)2/σt2(r_t-\mu)^2/\sigma_t^2 — model dihukum kerana terkejut). Optimum itu mengimbangi kedua-duanya, yang mana itulah yang membuat varians itu menjejak. Kedua, rekursi itu memerlukan benih σ12\sigma_1^2; pilihan biasa ialah varians sampel pulangan, dan dengan beberapa ribu pemerhatian benih itu hampir tidak penting.

Tiada bentuk tertutup untuk pemaksimum, jadi kita mengoptimumkan secara berangka (arch menggunakan kaedah quasi-Newton dengan kecerunan analitik atau berangka). Permukaan kemungkinan secara umum berkelakuan baik untuk GARCH(1,1), tetapi dua perkara menggigit dalam amalan: kekangan positiviti (ω,α,β0\omega,\alpha,\beta \ge 0) dan kelakuan dekat-sempadan apabila α+β1\alpha+\beta \to 1, di mana pengoptimum boleh merangkak perlahan. Kedua-duanya dikendalikan untuk anda oleh pustaka yang baik — dan anda patut menggunakan satu. Membuat MLE GARCH sendiri adalah latihan pembelajaran yang baik tetapi pilihan pengeluaran yang buruk.

Pustaka arch

Pakej arch oleh Kevin Sheppard ialah alat piawai dalam Python. Keseluruhan pemasangan itu empat baris.

from arch import arch_model

r = ret * 100.0

model  = arch_model(r, mean="Constant", vol="Garch", p=1, q=1, dist="normal")
res    = model.fit(disp="off")
print(res.summary())

Sepatah kata tentang nama argumen, kerana ia sumber kekeliruan biasa. Dalam arch, p ialah bilangan varians tertangguh (terma β\beta, susunan GARCH) dan q ialah bilangan residual disquarekan tertangguh (terma α\alpha, susunan ARCH). Jadi p=1, q=1 ialah GARCH(1,1) yang kita terbitkan. (Notasi asal Bollerslev menulisnya GARCH(p,qp,q) dengan pp untuk susunan ARCH — kedua-dua konvensyen itu bertukar tempat. Percayai dokumentasi pustaka itu sendiri, bukan ingatan anda.)

Membaca ringkasan itu, jadual pekali kelihatan lebih kurang seperti ini (nilai ilustratif untuk pulangan harian BTC, bukan eksperimen sebenar):

                     Volatility Model
==========================================================
                 coef    std err      t      P>|t|
----------------------------------------------------------
omega          0.4821     0.201    2.40    0.016
alpha[1]       0.0912     0.021    4.34    0.000
beta[1]        0.8994     0.024   37.5     0.000
==========================================================

Cara membacanya:

  • alpha[1] + beta[1] = 0.0912 + 0.8994 = 0.9906. Kegigihan sedikit di bawah 1 — rejim near-IGARCH, tepat seperti yang diberi amaran. Separuh hayat ln(0.5)/ln(0.9906)73\approx \ln(0.5)/\ln(0.9906) \approx 73 hari.
  • omega = 0.4821, jadi varians jangka panjang ialah 0.4821/(10.9906)=51.30.4821 / (1 - 0.9906) = 51.3 dalam unit peratus-kuasa-dua, iaitu volatiliti harian jangka panjang 51.37.2%\sqrt{51.3} \approx 7.2\%, atau kira-kira 7.2%×365138%7.2\%\times\sqrt{365}\approx 138\% setahun. Itu nombor BTC yang munasabah.
  • Kedua-dua alpha dan beta signifikan dengan kuat. alpha yang kecil berbanding beta adalah tipikal: varians kripto kebanyakannya kegigihan (ingatan), dengan tindak balas yang sederhana tetapi sebenar terhadap kejutan baharu.

Perangkap penskalaan ×100

Ini cara paling biasa untuk mendapat karut daripada arch, jadi ia layak mendapat subbahagiannya sendiri. Pengoptimum bekerja paling baik apabila nombor yang dilihatnya adalah O(1)O(1) hingga O(100)O(100). Pulangan log harian adalah O(0.01)O(0.01), jadi kuasa duanya adalah O(0.0001)O(0.0001) dan ω\omega perlu berada sekitar 10610^{-6} — turun dalam julat di mana kecerunan berangka kehilangan ketepatan dan pemasangan boleh senyap-senyap gagal menumpu atau memulangkan ralat piawai yang tidak berguna.

Pembetulannya ialah memasang pada pulangan diskala dengan 100 (iaitu dalam peratus), seperti di atas. arch malah akan mengeluarkan DataScaleWarning jika anda lupa. Segala yang anda baca daripada model itu kemudiannya dalam unit peratus atau peratus-kuasa-dua, dan anda mesti menyahskala secara konsisten:

sigma_pct     = np.sqrt(res.forecast(horizon=1).variance.iloc[-1, 0])
sigma_decimal = sigma_pct / 100.0
print(f"1-day-ahead conditional vol: {sigma_decimal:.2%}")

Mencampurkan kuantiti diskala dan tidak diskala — memasukkan volatiliti peratus ke dalam formula saiz-kedudukan yang mengharapkan perpuluhan, misalnya — menghasilkan ralat tepat 100x, yang mudah terlepas pandang kerana kod itu berjalan dengan baik. Pilih satu konvensyen (saya kekalkan segala-galanya perpuluhan di luar pemasangan dan hanya skala pada sempadan arch) dan jangan sekali-kali silangnya.

Meramal Varians Bersyarat

Model yang dipasang hanya berguna jika ia meramal. GARCH memberi ramalan bersih dan analitik pada mana-mana ufuk.

Satu langkah hadapan. Pada masa TT (penghujung sampel) kita tahu εT\varepsilon_T dan σT2\sigma_T^2, jadi varians seterusnya adalah deterministik:

σT+12=ω+αεT2+βσT2.\sigma_{T+1}^2 = \omega + \alpha\,\varepsilon_T^2 + \beta\,\sigma_T^2.

Tiada jangkaan diperlukan — segala di sebelah kanan diperhatikan.

Berbilang langkah hadapan. Untuk h2h \ge 2 kita belum tahu kejutan-kejutan pertengahan, jadi kita ambil jangkaan bersyarat. Menggunakan ET[εT+k2]=ET[σT+k2]\mathbb{E}_T[\varepsilon_{T+k}^2] = \mathbb{E}_T[\sigma_{T+k}^2] (kerana E[z2]=1\mathbb{E}[z^2]=1), rekursi itu meruntuh menjadi AR(1) mudah dalam varians yang diramal:

ET[σT+h2]=ω+(α+β)ET[σT+h12].\mathbb{E}_T[\sigma_{T+h}^2] = \omega + (\alpha + \beta)\,\mathbb{E}_T[\sigma_{T+h-1}^2].

Mengulang ini daripada ramalan satu-langkah memberikan bentuk tertutup, yang mana ia adalah hasil kembali-ke-min yang kita terbitkan awal tadi ditulis secara jelas:

ET[σT+h2]=σˉ2+(α+β)h1(σT+12σˉ2),σˉ2=ω1αβ.\mathbb{E}_T[\sigma_{T+h}^2] = \bar{\sigma}^2 + (\alpha+\beta)^{\,h-1}\bigl(\sigma_{T+1}^2 - \bar{\sigma}^2\bigr), \qquad \bar{\sigma}^2 = \frac{\omega}{1-\alpha-\beta}.

Bacalah ini dengan teliti, kerana ia geometri setiap ramalan GARCH. Struktur tempoh varians bermula pada varians bersyarat hari ini σT+12\sigma_{T+1}^2 dan reput secara geometrik ke arah paras jangka panjang σˉ2\bar{\sigma}^2. Jika hari ini lebih tenang daripada purata, lengkung ramalan naik ke arah σˉ2\bar\sigma^2; jika hari ini krisis, ia turun ke arahnya. Kelajuan reput itu ditetapkan sepenuhnya oleh (α+β)(\alpha+\beta) — dan dalam rejim near-IGARCH kripto, di mana α+β0.99\alpha+\beta \approx 0.99, reput itu begitu perlahan sehingga untuk ufuk di bawah beberapa minggu ramalan itu hampir tidak bergerak daripada paras hari ini. Itu bernilai untuk difahami: untuk tempoh pegangan pendek, ramalan GARCH kripto pada asasnya "esok kelihatan seperti hari ini, hanya kembali ke min sangat perlahan."

Menghimpun kepada ufuk pegangan. Peniaga jarang mengambil berat tentang varians satu hari akan datang sahaja. Jika anda memegang kedudukan selama HH hari dan pulangan tidak berkorelasi secara bersyarat (fakta berstruktur dari awal), varians pulangan kumulatif HH-hari ialah jumlah varians ramalan satu-hari:

σT2(H)=h=1HET[σT+h2],σT(H)=σT2(H).\sigma_{T}^{2}(H) = \sum_{h=1}^{H} \mathbb{E}_T[\sigma_{T+h}^2], \qquad \sigma_T(H) = \sqrt{\sigma_T^2(H)}.

Inilah nombor yang sebenarnya anda saiz terhadapnya — volatiliti P&L sepanjang tempoh pegangan anda. Perhatikan ia sememangnya bukan penskalaan naif HσT+1\sqrt{H}\,\sigma_{T+1}, yang hanya betul jika varians tetap. Apabila varians hari ini di atas σˉ2\bar\sigma^2, ramalan kembali-ke-min menjadikan vol HH-hari sebenar lebih rendah daripada peraturan punca-kuasa-dua; apabila hari ini tenang, ia lebih tinggi. Betulkan ini adalah perbezaan antara stop yang menghormati struktur tempoh dan yang tidak.

Dalam kod:

H = 10
fc = res.forecast(horizon=H, reindex=False)

var_path_pct2 = fc.variance.iloc[-1].values        # [E_T sigma^2_{T+1}, ..., T+H]
var_path      = var_path_pct2 / (100.0 ** 2)       # back to decimal variance

daily_vol   = np.sqrt(var_path)
print("Forecast daily vol path:", np.round(daily_vol * 100, 2), "%")

H_day_var = var_path.sum()
H_day_vol = np.sqrt(H_day_var)
print(f"{H}-day holding-period vol: {H_day_vol:.2%}")

naive = np.sqrt(var_path[0] * H)
print(f"Naive sqrt(H) * sigma_1:   {naive:.2%}")

Untuk ufuk lebih panjang GARCH juga menyokong ramalan simulasi (method="simulation"), yang menyebarkan taburan inovasi ke hadapan dan memberi anda ketumpatan ramalan penuh, bukan sekadar variansnya — berguna apabila inovasi bukan Gaussian, seperti yang akan berlaku sebaik sahaja kita beralih ke Student-t dan taburan pencong dalam Bahagian 2. Untuk kuantiti linear-dalam-varians di atas, laluan analitik itu tepat dan percuma.

Diagnostik: Adakah Model Itu Benar-benar Berfungsi?

Memasang model tidak sama dengan mengesahkannya. Keseluruhan intipati GARCH ialah menyerap heteroskedastisiti bersyarat — pengelompokan volatiliti — supaya apa yang tinggal adalah (hampir) i.i.d. Semakan yang betul oleh itu ialah melihat residual dipiawaikan

z^t=rtμ^σ^t\hat{z}_t = \frac{r_t - \hat\mu}{\hat\sigma_t}

dan bertanya: adakah pengelompokan itu sudah hilang? Jika model itu menangkap dinamik varians, z^t\hat z_t patut mempunyai varians unit dan, yang paling penting, kuasa duanya z^t2\hat z_t^2 patut menunjukkan tiada autokorelasi baki. Kita jalankan tiga ujian.

1. Ljung-Box pada residual dipiawaikan. Menyemak tiada autokorelasi linear tinggal pada paras z^t\hat z_t (ini sebenarnya menguji model min, bukan model varians). Tidak sepatutnya menolak.

2. Ljung-Box pada residual dipiawaikan disquarekan. Inilah yang penting. Jika z^t2\hat z_t^2 masih mempunyai autokorelasi signifikan, model varians gagal membuang pengelompokan itu — terdapat struktur yang tidak ditangkap oleh GARCH(1,1), dan anda mungkin memerlukan susunan lebih tinggi, varian asimetri, atau taburan inovasi berbeza. Tidak sepatutnya menolak.

3. Ujian ARCH-LM (ujian pendarab-Lagrange Engle). Regres z^t2\hat z_t^2 ke atas latnya sendiri dan uji signifikan bersama. Ia pada asasnya versi formal ujian 2 dan secara langsung bertanya "adakah kesan ARCH tinggal baki?" Keputusan tidak signifikan mengesahkan heteroskedastisiti bersyarat telah dimodelkan hilang.

from statsmodels.stats.diagnostic import acorr_ljungbox
from arch.unitroot.cointegration import engle_granger  # (unrelated; shown for import clarity)

z  = res.std_resid.dropna()          # standardized residuals
z2 = z ** 2

lb_z  = acorr_ljungbox(z,  lags=[10, 20], return_df=True)
lb_z2 = acorr_ljungbox(z2, lags=[10, 20], return_df=True)
print("Ljung-Box on standardized residuals:\n", lb_z, "\n")
print("Ljung-Box on SQUARED standardized residuals:\n", lb_z2, "\n")

lm = res.arch_lm_test(lags=10, standardized=True)
print(lm)

print(f"\nStd-resid excess kurtosis: {stats.kurtosis(z):.2f}")

Bagaimana rupa output yang baik: nilai-p Ljung-Box pada z^t2\hat z_t^2 melonjak daripada hampir sifar (pada pulangan disquarekan mentah) kepada selesa di atas 0.05, dan ujian ARCH-LM gagal menolak. Itulah bukti model itu melakukan kerjanya pada momen kedua.

Bagaimana rupa output yang tidak sempurna — dan apa yang patut anda jangkakan dengan GARCH(1,1) Gaussian biasa pada kripto — ialah ujian pengelompokan lulus tetapi kurtosis residual dipiawaikan masih tinggi (katakan 4-6 berbanding 0). GARCH membuang pengelompokan tetapi satu taburan tanpa syarat berekor tebal masih tinggal, kerana inovasi Gaussian tidak boleh menghasilkan semula ekor itu. Ekor tebal baki itu bukan pepijat untuk dibaiki di sini; ia motivasi untuk Bahagian 2, GARCH asimetri dan kesan leveraj dalam kripto, di mana inovasi Student-t dan skewed-t serta terma asimetri GJR/EGARCH menangani tepat ini.

Aplikasi: Saiz dan Stop Berskala Volatiliti

Kita kini mempunyai ramalan volatiliti esok (dan HH hari akan datang). Apa yang kita buat dengannya? Dua penggunaan paling mudah dan bernilai tinggi ialah saiz kedudukan dan penempatan stop. Kita sengaja kekalkan kedua-duanya asas di sini — strategi vol-targeting penuh dengan segala mesin praktikalnya ialah Bahagian 4.

Saiz kedudukan disasarkan volatiliti

Ideanya ialah memegang kedudukan yang sumbangan risikonya kira-kira tetap sepanjang masa, berbanding kedudukan yang nosionalnya tetap. Jika anda sentiasa mengerah saiz dolar yang sama, risiko anda membengkak dalam rejim vol tinggi dan mengecut dalam yang tenang — bertentangan dengan apa yang anda mahu. Penyasaran volatiliti membalikkan ini: sasarkan volatiliti tetap untuk P&L, dan biarkan ramalan menentukan saiz.

Untuk volatiliti tahunan sasaran σtarget\sigma_{\text{target}} (katakan 20%) dan volatiliti tahunan ramalan σ^t\hat\sigma_t, pemberat kedudukan ialah

wt=σtargetσ^t.w_t = \frac{\sigma_{\text{target}}}{\hat{\sigma}_t}.

Apabila vol ramalan tinggi, anda skalakan turun; apabila rendah, anda skalakan naik. Itulah keseluruhan mekanisme. Kerana σ^t\hat\sigma_t adalah ramalan — diketahui pada tt sebelum pulangan pada t+1t+1 direalisasikan — tiada lihat-ke-hadapan, dengan syarat anda berdisiplin tentang pemasaan (lebih lanjut tentang ini dalam bahagian perangkap).

def vol_target_weight(sigma_forecast_annual, sigma_target_annual=0.20,
                      w_max=3.0):
    """Volatility-scaled position weight. Inputs/outputs in decimals.
    w_max caps leverage so a tiny forecast vol can't demand insane size."""
    w = sigma_target_annual / sigma_forecast_annual
    return float(np.clip(w, 0.0, w_max))

sigma_1d   = np.sqrt(res.forecast(horizon=1).variance.iloc[-1, 0]) / 100.0
sigma_ann  = sigma_1d * np.sqrt(365)
w          = vol_target_weight(sigma_ann, sigma_target_annual=0.20)
print(f"Forecast annual vol: {sigma_ann:.1%}  ->  position weight: {w:.2f}x")

Ini sepupu pertama peraturan peruntukan modal yang betul. Penyasaran volatiliti menjawab "berapa banyak risiko patut berskala dengan volatiliti," manakala kriteria Kelly menjawab "berapa banyak risiko patut berskala dengan kelebihan" — dan kedua-duanya didarabkan bersama dalam susunan saiz penuh: saiz \propto kelebihan / varians. Perhatikan bahawa terma varians Kelly adalah tepat ramalan GARCH yang baru sahaja anda kira, itulah sebabnya model volatiliti langsung mempertajamkan saiz Kelly secara ketara berbanding anggaran sejarah statik. Jika anggaran kelebihan anda sendiri membawa ketidakpastian terukur, ramalan konformal memberi cara bebas taburan untuk melebar atau mengecutkan saiz agar sepadan, dan ia bersepadu dengan bersih bersama penyasaran vol.

Had w_max tidak pilihan. Dalam rejim near-IGARCH tempoh tenang boleh menolak vol ramalan agak rendah, dan σtarget/σ^t\sigma_{\text{target}}/\hat\sigma_t akan menuntut leveraj yang baik di atas kertas dan membawa kehancuran apabila ketenangan itu pecah — yang mana, mengikut pengelompokan volatiliti, akhirnya berlaku, selalunya secara mendadak. Menghadkan leveraj adalah pengakuan kasar-tetapi-berkesan bahawa ramalan anda ialah min bersyarat, bukan jaminan, dan bahawa ganjaran kepada kesilapan adalah tidak simetri. Ketidaksimetrian itu — akaun yang meletup tidak boleh dipulihkan oleh kemenangan simetri — adalah tepat ketidaksimetrian kerugian-lawan-untung yang sepatutnya menjadikan anda secara sistematik lebih berhati-hati daripada apa yang dicadangkan oleh peraturan varians-sahaja.

Stop berskala volatiliti

Stop peratusan tetap mempunyai penyakit sama seperti saiz kedudukan tetap: stop 3% adalah picu-rambut dalam pasaran tenang dan ralat pembundaran dalam yang ganas. Ia menyebabkan anda tersingkir daripada kedudukan baik oleh bunyi bising biasa semasa rejim vol tinggi dan memberi balik terlalu banyak semasa peralihan. Pembetulannya ialah menetapkan jarak stop dalam unit volatiliti ramalan.

jarak stopt=kσ^t(H)\text{jarak stop}_t = k \cdot \hat\sigma_t^{(H)}

di mana σ^t(H)\hat\sigma_t^{(H)} ialah volatiliti ramalan sepanjang ufuk pegangan jangkaan anda HH (kuantiti terhimpun daripada bahagian ramalan) dan kk ialah gandaan — biasanya 1.5 hingga 3 — dipilih supaya stop itu berada di luar turun naik normal tetapi di dalam pergerakan buruk yang tulen.

def vol_scaled_stop(entry_price, side, sigma_H, k=2.0):
    """
    entry_price : fill price
    side        : +1 long, -1 short
    sigma_H     : forecast volatility over the holding horizon (decimal)
    k           : stop width in vol units
    Returns the stop price.
    """
    stop_frac = k * sigma_H
    return entry_price * (1.0 - side * stop_frac)

var_path = res.forecast(horizon=10, reindex=False).variance.iloc[-1].values / (100.0 ** 2)
sigma_H  = np.sqrt(var_path.sum())

entry = float(px.iloc[-1])
stop  = vol_scaled_stop(entry, side=+1, sigma_H=sigma_H, k=2.0)
print(f"Entry {entry:,.0f}  |  10-day vol {sigma_H:.2%}  |  2-sigma stop {stop:,.0f}")

Kerana σ^t(H)\hat\sigma_t^{(H)} menggunakan ramalan struktur tempoh kembali-ke-min berbanding nombor sejarah rata, stop itu secara automatik melebar memasuki rejim pergolakan dan mengetat apabila volatiliti reda — struktur tempoh melakukan penyesuaian untuk anda. Ini ramalan yang sama memberi makan kedua-dua saiz dan stop, yang mana itu satu ciri: dalam rejim vol tinggi anda serentak memegang kurang dan memberi kedudukan itu lebih ruang, dan kedua-dua kesan itu berganda menjadi risiko ekor yang jauh lebih rendah. Saiz dan stop ialah dua unjuran daripada satu pandangan volatiliti, bukan dua kenop bebas.

Itu sejauh mana kita bawa aplikasi ini dalam Bahagian 1. Strategi sebenar perlu mengendalikan kos transaksi daripada pengimbangan semula berterusan, pemasaan bila ramalan itu dikira berbanding bila dagangan itu diletakkan, kawalan pusing ganti, dan — di atas segalanya — penilaian luar-sampel yang jujur. Semua itu ialah Bahagian 4: strategi GARCH penyasaran-volatiliti, di mana kita membina dan menguji-walk-forward keseluruhannya.

Perangkap

GARCH mudah dipasang dan mudah membuat anda tertipu. Mod kegagalannya konsisten.

Penskalaan pulangan. Diliputi di atas, tetapi ini pepijat nombor-satu, jadi ia patut diulang: pasang arch pada pulangan × 100, dan nyahskala setiap output (varians dengan 1002100^2, volatiliti dengan 100100). Ralat 100x yang senyap di sini meracuni setiap pengiraan saiz dan stop hiliran.

Lihat-ke-hadapan dalam pemasangan. Pembunuh yang halus. Jika anda memasang model pada seluruh sejarah dan kemudian mengira "ramalan" ke atas sejarah yang sama itu, setiap ramalan secara senyap telah melihat masa depan — parameter itu dianggarkan menggunakan data daripada selepas tarikh ramalan. Pemasangan dalam-sampel akan kelihatan hebat dan prestasi langsung tidak akan menyerupainya langsung. Setiap ramalan diuji-belakang mesti datang daripada model yang dipasang hanya pada data yang tersedia pada masa itu: pasang semula pada tetingkap berkembang atau bergolek, ramal satu langkah, gulung ke hadapan. Ini tidak boleh dirunding dan ia keseluruhan subjek pengoptimuman walk-forward. Jurang antara GARCH dalam-sampel dan yang betul walk-forward adalah jurang antara demo dan sistem yang bertahan sentuhan dengan pasaran langsung — lihat juga kesamaan backtest-langsung.

Pemasaan ramalan. Berkaitan tetapi berbeza. Ramalan untuk hari t+1t+1 mesti dikira daripada maklumat tersedia pada penutupan hari tt (atau bila-bila bar anda tutup), dan kedudukan itu mesti boleh dilaksanakan pada harga yang anda benar-benar boleh dapat. Mengira ramalan menggunakan penutupan hari t+1t+1 dan kemudian "berdagang" pada pembukaan hari t+1t+1 adalah lihat-ke-hadapan yang secara senyap menggembungkan setiap keputusan.

Terlebih pasang susunan tinggi. GARCH(1,1) hampir selalu memadai. Godaan untuk memasang GARCH(2,2) atau GARCH(3,1) kerana ia menyodok naik log-kemungkinan dalam-sampel biasanya pemasangan bunyi bising; parameter tambahan jarang memperbaiki ramalan luar-sampel dan selalunya menjadikan pengoptimum tidak stabil dekat sempadan. Utamakan model jimat, dan jika anda perlu banding susunan, banding mereka melalui kehilangan ramalan luar-sampel pada pembahagian walk-forward, bukan melalui AIC dalam-sampel. Apabila diagnostik residual masih menunjukkan masalah, pembetulannya biasanya taburan inovasi yang lebih baik atau terma asimetri (Bahagian 2), bukan susunan lebih tinggi.

Pemecahan struktur dibaca sebagai kegigihan. Seperti dinyatakan, peralihan kekal dalam paras volatiliti (rejim pasaran baharu, perubahan dalam mikrostruktur pasaran) boleh diserap oleh GARCH sebagai kegigihan tinggi palsu, menolak α+β\alpha+\beta ke arah 1. Jika anggaran vol jangka panjang anda kelihatan tidak stabil merentasi tetingkap, syak pemecahan berbanding mempercayai anggaran titik near-IGARCH. Pemasangan semula bergolek dan, di mana sesuai, model rejim eksplisit menjaga terhadap ini.

Melayan ramalan volatiliti sebagai ramalan pulangan. GARCH meramal magnitud pergerakan, bukan arahnya. Ia memberitahu anda betapa besarnya ayunan esok kemungkinan besar, bukan ke arah mana. Inilah tepat sebabnya rumah asalnya ialah pengurusan risiko — saiz, stop, VaR — berbanding penjanaan isyarat. Jangan keliru ramalan varians yang baik dengan satu kelebihan.

Ke Mana Ini Menuju Seterusnya

GARCH(1,1) adalah asas, dan ia sengaja tidak lengkap. Siri ini membina atasnya dalam tiga arah:

  • Asimetri dan ekor tebal — volatiliti kripto sebenar bertindak balas lebih terhadap pergerakan turun berbanding naik (kesan leveraj), dan inovasi Gaussian tidak boleh menghasilkan semula ekor tersebut. GJR-GARCH, EGARCH, dan inovasi Student-t / skewed-t ialah Bahagian 2.
  • Volatiliti multivariat — korelasi antara aset kripto itu sendiri berubah mengikut masa dan melonjak semasa kemalangan. Memodelkan seluruh matriks kovarians secara dinamik ialah Bahagian 3: DCC-GARCH, yang berhubung terus dengan Markowitz min-varians dan peruntukan berasaskan CVaR sebaik sahaja kovarians itu dinamik.
  • Strategi penuh — saiz, stop, kos, pusing ganti, dan penilaian walk-forward jujur bersatu dalam Bahagian 4.

Dan di mana marginal GARCH memberi makan risiko bersama: model varians bersyarat univariat di sini adalah tepat peringkat pertama saluran paip GARCH-EVT-copula untuk VaR/CVaR portfolio. Sebaik sahaja anda mempunyai residual dipiawaikan daripada pemasangan GARCH per-aset, anda transformasikannya dan gam mereka bersama dengan copula — marginal ialah GARCH, kebergantungan ialah copula. Pembinaan itu, termasuk kebergantungan ekor dan rawatan ekor EVT, dibincangkan secara mendalam dalam model copula untuk risiko kripto bersama; artikel ini ialah enjin univariat yang duduk di bawahnya.

Ringkasan

  • Pulangan kripto menunjukkan pengelompokan volatiliti, ekor tebal, dan tiada autokorelasi pulangan tetapi autokorelasi pulangan-disquarekan yang kuat. Mana-mana alat yang mengandaikan volatiliti tetap — Black-Scholes dengan satu σ\sigma, VaR statik, stop peratusan tetap — tidak spesifikasi dengan betul terhadap fakta ini.
  • GARCH(1,1), σt2=ω+αεt12+βσt12\sigma_t^2 = \omega + \alpha\varepsilon_{t-1}^2 + \beta\sigma_{t-1}^2, memodelkan varians bersyarat berubah mengikut masa dengan tiga parameter: garis dasar ω\omega, tindak balas kejutan α\alpha, dan kegigihan β\beta. Ia ARCH(\infty) dengan ingatan reput geometrik, itulah sebabnya ia mengatasi ARCH susunan tinggi.
  • Kestasioneran memerlukan α+β<1\alpha+\beta<1; varians jangka panjang ialah ω/(1αβ)\omega/(1-\alpha-\beta), kegigihan ialah α+β\alpha+\beta, dan separuh hayat volatiliti ialah ln0.5/ln(α+β)\ln 0.5 / \ln(\alpha+\beta). Kripto berada dalam rejim near-IGARCH (α+β0.99\alpha+\beta\approx 0.99): sangat gigih, perlahan kembali ke min, dan dengan anggaran varians-jangka-panjang yang rapuh.
  • Anggar melalui kemungkinan maksimum. Log-kemungkinan Gaussian ialah jumlah ketumpatan satu-langkah; pasangnya dengan arch_model(r*100, vol="Garch", p=1, q=1). Ingat penskalaan ×100 dan nyahskala setiap output secara konsisten.
  • Ramalan kembali ke min secara geometrik ke arah varians jangka panjang pada kadar (α+β)h1(\alpha+\beta)^{h-1}. Himpunkan ramalan varians harian untuk mendapat volatiliti ufuk-pegangan — bukan peraturan naif H\sqrt{H}.
  • Sahkan dengan Ljung-Box pada residual dipiawaikan disquarekan dan ujian ARCH-LM. Lulus ini mengesahkan pengelompokan telah dimodelkan hilang; ekor tebal baki yang tinggal memotivasikan Bahagian 2.
  • Aplikasikannya kepada saiz disasarkan-volatiliti (wt=σtarget/σ^tw_t = \sigma_{\text{target}}/\hat\sigma_t, dihadkan) dan stop berskala-volatiliti (kσ^t(H)k\cdot\hat\sigma_t^{(H)}). Satu ramalan menggerakkan kedua-duanya, jadi rejim vol tinggi mendapat saiz lebih kecil dan stop lebih lebar serentak.
  • Perangkap yang penting: penskalaan pulangan, lihat-ke-hadapan dalam pemasangan (pasang hanya pada data lalu, sentiasa walk-forward), pemasaan ramalan, terlebih susunan, dan jangan sekali-kali keliru ramalan varians dengan ramalan arah.

Rujukan:

  • Engle, R. F. (1982). Autoregressive Conditional Heteroscedasticity with Estimates of the Variance of United Kingdom Inflation. Econometrica, 50(4), 987-1007. DOI
  • Bollerslev, T. (1986). Generalized Autoregressive Conditional Heteroskedasticity. Journal of Econometrics, 31(3), 307-327. DOI
  • Mandelbrot, B. (1963). The Variation of Certain Speculative Prices. The Journal of Business, 36(4), 394-419. DOI
  • Nelson, D. B. (1991). Conditional Heteroskedasticity in Asset Returns: A New Approach. Econometrica, 59(2), 347-370. DOI
  • Katsiampa, P. (2017). Volatility estimation for Bitcoin: A comparison of GARCH models. Economics Letters, 158, 3-6. DOI
  • Chu, J., Chan, S., Nadarajah, S., & Osterrieder, J. (2017). GARCH Modelling of Cryptocurrencies. Journal of Risk and Financial Management, 10(4), 17. DOI
  • Sheppard, K. (2023). arch: Autoregressive Conditional Heteroskedasticity (ARCH) and other tools for financial econometrics in Python. GitHub.
Penafian: Maklumat yang disediakan dalam artikel ini adalah untuk tujuan pendidikan dan maklumat sahaja dan bukan merupakan nasihat kewangan, pelaburan, atau dagangan. Dagangan mata wang kripto melibatkan risiko kerugian yang ketara.

MarketMaker.cc Team

Penyelidikan & Strategi Kuantitatif

Bincang di Telegram
Newsletter

Kekal Mendahului Pasaran

Langgan surat berita kami untuk pandangan dagangan AI eksklusif, analisis pasaran, dan kemas kini platform.

Kami menghormati privasi anda. Berhenti melanggan pada bila-bila masa.