金融波動(dòng)率的多模型建模研究:GARCH族與HAR模型的Python實(shí)現(xiàn)與對(duì)比分析
金融資產(chǎn)波動(dòng)率建模在現(xiàn)代金融工程中具有重要地位,其應(yīng)用涵蓋風(fēng)險(xiǎn)管理、衍生品定價(jià)和投資組合優(yōu)化等核心領(lǐng)域。本文著重探討三種主流波動(dòng)率建模方法:廣義自回歸條件異方差模型(GARCH)、Glosten-Jagannathan-Runkle-GARCH模型(GJR-GARCH)以及異質(zhì)自回歸模型(HAR)。本文將系統(tǒng)闡述這些模型的理論基礎(chǔ),并基于標(biāo)準(zhǔn)普爾500指數(shù)ETF(SPY)的實(shí)際交易數(shù)據(jù)進(jìn)行實(shí)證分析。
理論基礎(chǔ)
1、 GARCH模型
GARCH(1,1)模型由Bollerslev于1986年提出,該模型有效捕捉了金融時(shí)間序列中的波動(dòng)率聚類特征。模型的數(shù)學(xué)表達(dá)式為:
r_t = μ + εtεt = σt * z_tσ2t = ω + α * ε2(t-1) + β * σ2(t-1)
其中各參數(shù)定義如下:
- r_t 表示t時(shí)刻的資產(chǎn)收益率
- μ 表示條件均值
- εt_ 表示隨機(jī)擾動(dòng)項(xiàng)
- σt_ 表示條件波動(dòng)率
- z_t 表示服從標(biāo)準(zhǔn)正態(tài)分布的隨機(jī)變量
- ω, α, β 為待估計(jì)參數(shù)集
該模型的核心特征在于:當(dāng)前條件方差依賴于前期的隨機(jī)擾動(dòng)項(xiàng)平方(α項(xiàng))和前期條件方差(β項(xiàng))。模型的波動(dòng)率持續(xù)性由α + β之和度量,該值通常接近但嚴(yán)格小于1,以確保過(guò)程的平穩(wěn)性。
2、GJR-GARCH模型
GJR-GARCH模型由Glosten、Jagannathan和Runkle于1993年提出,是對(duì)標(biāo)準(zhǔn)GARCH模型的重要擴(kuò)展。該模型通過(guò)引入杠桿效應(yīng)項(xiàng),刻畫(huà)了金融市場(chǎng)中負(fù)向沖擊對(duì)波動(dòng)率的非對(duì)稱影響。模型表達(dá)式為:
σ2t = ω + α * ε2(t-1) + γ * I(t-1) * ε2(t-1) + β * σ2_(t-1)
其中:
- I(t-1)_ 為示性函數(shù),當(dāng)ε_(tái)(t-1) < 0時(shí)取值為1,其他情況為0
- γ 為杠桿效應(yīng)系數(shù),用于捕捉負(fù)向收益率沖擊的額外影響
通過(guò)引入γ參數(shù),模型能夠有效區(qū)分正負(fù)向市場(chǎng)信息對(duì)波動(dòng)率的差異化影響,這一特性使其在股票市場(chǎng)波動(dòng)率建模中表現(xiàn)出較強(qiáng)的實(shí)證效果,因?yàn)槭袌?chǎng)下跌通常會(huì)引發(fā)比上漲更顯著的波動(dòng)率反應(yīng)。
3、HAR模型
HAR(異質(zhì)自回歸)模型由Corsi于2009年提出,該模型采用創(chuàng)新性的方法,通過(guò)整合不同時(shí)間尺度的波動(dòng)率信息直接對(duì)已實(shí)現(xiàn)波動(dòng)率進(jìn)行建模。模型的基本形式為:
RV_t+1 = β? + βd * RV_t + βw * RV_t^w + βm * RV_t^m + εt+1
其中各變量定義如下:
- RV_t 代表日度已實(shí)現(xiàn)波動(dòng)率
- RV_t^w 代表周度已實(shí)現(xiàn)波動(dòng)率的算術(shù)平均值
- RV_t^m 代表月度已實(shí)現(xiàn)波動(dòng)率的算術(shù)平均值
- β 系數(shù)集合反映了不同時(shí)間尺度波動(dòng)率的邊際貢獻(xiàn)
實(shí)證分析與代碼實(shí)現(xiàn)
本節(jié)詳細(xì)闡述三種波動(dòng)率模型的Python實(shí)現(xiàn)過(guò)程:
數(shù)據(jù)預(yù)處理
def get_spy_data():
"""獲取SPY指數(shù)近五年交易數(shù)據(jù)"""
end_date = datetime.now()
start_date = end_date - timedelta(days=5*365)
spy = yf.download('SPY', start=start_date, end=end_date)
return spy
def calculate_returns(prices):
"""計(jì)算連續(xù)復(fù)利收益率"""
return 100 * np.log(prices / prices.shift(1))
本文采用對(duì)數(shù)收益率進(jìn)行建模,這種處理方式具有兩個(gè)主要優(yōu)勢(shì):對(duì)數(shù)收益率具有可加性;對(duì)數(shù)收益率的分布通常更接近正態(tài)分布,這有利于后續(xù)的統(tǒng)計(jì)推斷。
GARCH模型估計(jì)
def fit_garch(returns):
"""估計(jì)GARCH(1,1)模型參數(shù)"""
model = arch_model(returns, vol='Garch', p=1, q=1)
results = model.fit(disp='off')
return results
GARCH模型的參數(shù)估計(jì)采用arch計(jì)量經(jīng)濟(jì)學(xué)庫(kù)實(shí)現(xiàn),該庫(kù)基于最大似然估計(jì)方法提供了高效的參數(shù)估計(jì)功能。在實(shí)證研究中,GARCH(1,1)規(guī)范通常能夠充分捕捉金融時(shí)間序列的波動(dòng)率動(dòng)態(tài)特征。
GJR-GARCH模型估計(jì)
def fit_gjr_garch(returns):
"""估計(jì)GJR-GARCH(1,1)模型參數(shù)"""
model = arch_model(returns, p=1, o=1, q=1, dist='studentst')
results = model.fit(disp='off')
return results
GJR-GARCH模型的實(shí)現(xiàn)引入了非對(duì)稱項(xiàng)參數(shù)(o=1),并采用學(xué)生t分布來(lái)更好地?cái)M合金融收益率分布的尾部特征。模型自動(dòng)包含了負(fù)向收益的示性函數(shù)處理機(jī)制。
HAR模型
def calculate_har_volatility(returns, lookback=22):
"""構(gòu)建HAR模型并估計(jì)已實(shí)現(xiàn)波動(dòng)率"""
rv = returns**2 # 計(jì)算日度已實(shí)現(xiàn)方差
# 構(gòu)造不同時(shí)間尺度的HAR組件
rv_d = pd.Series(rv)
rv_w = rv.rolling(window=5).mean() # 構(gòu)造周度波動(dòng)率分量
rv_m = rv.rolling(window=22).mean() # 構(gòu)造月度波動(dòng)率分量
# 生成預(yù)測(cè)變量矩陣
X = pd.DataFrame({
'rv_d': rv_d.shift(1),
'rv_w': rv_w.shift(1),
'rv_m': rv_m.shift(1)
})
# 處理缺失值
y = rv[lookback:]
X = X[lookback:]
# 應(yīng)用OLS方法進(jìn)行參數(shù)估計(jì)
X = X.fillna(0)
beta = np.linalg.pinv(X) @ y
# 計(jì)算波動(dòng)率預(yù)測(cè)值
har_vol = np.sqrt(252 * (X @ beta)) # 轉(zhuǎn)換為年化波動(dòng)率
return har_vol
HAR模型的實(shí)現(xiàn)過(guò)程包含以下關(guān)鍵步驟:
- 基于收益率平方計(jì)算日度已實(shí)現(xiàn)方差
- 構(gòu)造周度(5個(gè)交易日)和月度(22個(gè)交易日)波動(dòng)率分量
- 構(gòu)建滯后預(yù)測(cè)變量矩陣
- 采用普通最小二乘法進(jìn)行參數(shù)估計(jì)
- 生成波動(dòng)率預(yù)測(cè)序列
模型性能比較與可視化
我們還開(kāi)發(fā)了專門的可視化模塊用于模型性能對(duì)比分析:
def plot_volatility_comparison(spy_data, garch_vol, gjr_vol, har_vol):
"""構(gòu)建波動(dòng)率模型比較圖"""
plt.figure(figsize=(15, 10))
# 計(jì)算歷史已實(shí)現(xiàn)波動(dòng)率(21日滾動(dòng))
realized_vol = np.sqrt(252) * spy_data['Returns'].rolling(window=21).std()
# 統(tǒng)一時(shí)間序列索引
common_index = realized_vol.index.intersection(har_vol.index)
realized_vol = realized_vol[common_index]
garch_vol = garch_vol[common_index]
gjr_vol = gjr_vol[common_index]
har_vol = har_vol[common_index]
# 繪制各模型波動(dòng)率序列
plt.plot(common_index, realized_vol, label='Realized Volatility (21-day)', alpha=0.7)
plt.plot(common_index, garch_vol, label='GARCH(1,1)', alpha=0.7)
plt.plot(common_index, gjr_vol, label='GJR-GARCH(1,1)', alpha=0.7)
plt.plot(common_index, har_vol, label='HAR', alpha=0.7)
該可視化工具能夠直觀展示各模型對(duì)市場(chǎng)波動(dòng)率的刻畫(huà)能力及其動(dòng)態(tài)特征。
模型適用性分析
各模型在實(shí)證應(yīng)用中表現(xiàn)出不同的優(yōu)勢(shì)特征:
GARCH(1,1)模型:
- 模型結(jié)構(gòu)簡(jiǎn)潔,具有較強(qiáng)的穩(wěn)健性
- 能夠有效捕捉波動(dòng)率聚類現(xiàn)象
- 在金融業(yè)界獲得廣泛應(yīng)用
GJR-GARCH模型:
- 較好地刻畫(huà)了波動(dòng)率的非對(duì)稱響應(yīng)特征
- 特別適用于股票市場(chǎng)波動(dòng)率建模
- 在市場(chǎng)劇烈波動(dòng)期間展現(xiàn)出較強(qiáng)的擬合優(yōu)勢(shì)
HAR模型:
- 有效捕捉波動(dòng)率的長(zhǎng)期記憶特性
- 模型結(jié)構(gòu)具有清晰的經(jīng)濟(jì)學(xué)解釋
- 在高頻數(shù)據(jù)建模中表現(xiàn)突出
總結(jié)
波動(dòng)率建模是金融風(fēng)險(xiǎn)管理中的關(guān)鍵環(huán)節(jié)。GARCH族模型基于嚴(yán)謹(jǐn)?shù)慕y(tǒng)計(jì)理論基礎(chǔ),能夠有效刻畫(huà)金融收益率的典型特征;而HAR模型則提供了一種直觀且實(shí)用的建模思路,在實(shí)證研究中展現(xiàn)出良好的預(yù)測(cè)性能。
本文通過(guò)Python實(shí)現(xiàn)展示了這些模型在實(shí)際市場(chǎng)數(shù)據(jù)中的應(yīng)用方法,為更深入的金融計(jì)量分析和風(fēng)險(xiǎn)管理研究提供了實(shí)踐基礎(chǔ)。