拓端tecdat|Python使用GARCH,EGARCH,GJR-GARCH模型和蒙特卡洛模擬進(jìn)行股價(jià)預(yù)測(cè)
原文鏈接:http://tecdat.cn/?p=20678?
原文出處:拓端數(shù)據(jù)部落公眾號(hào)
預(yù)測(cè)股價(jià)已經(jīng)受到了投資者,政府,企業(yè)和學(xué)者廣泛的關(guān)注。然而,數(shù)據(jù)的非線性和非平穩(wěn)性使得開發(fā)預(yù)測(cè)模型成為一項(xiàng)復(fù)雜而具有挑戰(zhàn)性的任務(wù)。在本文中,我將解釋如何將?GARCH,EGARCH和?GJR-GARCH?模型與Monte-Carlo?模擬結(jié)合使用,?以建立有效的預(yù)測(cè)模型。金融時(shí)間序列的峰度,波動(dòng)率和杠桿效應(yīng)特征證明了GARCH的合理性。時(shí)間序列的非線性特征用于檢查布朗運(yùn)動(dòng)并研究時(shí)間演化模式。非線性預(yù)測(cè)和信號(hào)分析方法因其在特征提取和分類中的魯棒性而在股票市場(chǎng)上越來越受歡迎。
動(dòng)力學(xué)系統(tǒng)可以用一組時(shí)變(連續(xù)或離散)變量來描述,這些變量構(gòu)成信號(hào)分析非線性方法的基礎(chǔ)。如果時(shí)間的當(dāng)前值和狀態(tài)變量可以準(zhǔn)確地描述下一時(shí)刻的系統(tǒng)狀態(tài),則可以說這樣的系統(tǒng)是確定性的。另一方面,如果時(shí)間和狀態(tài)變量的當(dāng)前值僅描述狀態(tài)變量的值隨時(shí)間變化的概率,則將動(dòng)力學(xué)系統(tǒng)視為隨機(jī)系統(tǒng)。
因此,在使用GARCH?建模方法之前?,我將采用?分形維數(shù)(FD),重定?范圍?和?遞歸量化分析(RQA)的?數(shù)據(jù)建模?技術(shù)?來總結(jié)數(shù)據(jù)的非線性動(dòng)力學(xué)行為并完成研究目標(biāo)。
方法
Hurst系數(shù)?(H)?是長(zhǎng)期依賴的特征參數(shù),與?FD?(FD + H = 2)有關(guān)。?R / S分析是數(shù)據(jù)建模的核心工具。經(jīng)驗(yàn)研究表明,?與同類中的其他方法相比,??R / S帶來了更好的結(jié)果,例如自相關(guān),光譜分解的分析。它是度量時(shí)間序列差異的度量,該時(shí)間序列的定義是給定持續(xù)時(shí)間(T)的均值范圍? ,除以該持續(xù)時(shí)間的標(biāo)準(zhǔn)偏差?[?R / S = k * T(H)?];???是一個(gè)取決于時(shí)間序列的常數(shù)。H度量時(shí)間序列的長(zhǎng)期記憶,將其表征為均值回復(fù),趨勢(shì)或隨機(jī)游走。
H <0.5表示均值回復(fù)
H> 0.5表示趨勢(shì)序列,并且
H = 0.5表示隨機(jī)游走。
我將展示如何使用?GARCH?模型進(jìn)行風(fēng)險(xiǎn)評(píng)估。
GARCH?模型的一個(gè)關(guān)鍵限制?是對(duì)其參數(shù)施加非負(fù)約束,以確保條件方差的正性。這樣的約束會(huì)給估計(jì)GARCH?模型帶來困難?。
因此,提出了?非對(duì)稱GARCH?模型,即俗稱的?GJR-GARCH?模型,以解決對(duì)稱GARCH?模型的局限性?。更重要的是,指數(shù)?GARCH?或?EGARCH?模型相對(duì)于傳統(tǒng)的GARCH?模型具有潛在的改進(jìn) 。
數(shù)據(jù)挖掘
查看數(shù)據(jù)。



在過去的幾十年中,原油價(jià)格呈現(xiàn)出較大的波動(dòng),尤其是在2008年左右。可以看出,隨著多次上升和下降,價(jià)格保持在相對(duì)較低的水平。從自相關(guān)圖可以看出原始數(shù)據(jù)中明顯的自相關(guān)。QQ和PP圖的形狀表明該過程接近正態(tài),但是重尾分布。
簡(jiǎn)單收益率的常用形式為:r(t)= {p(t)— p(t-1)} / p(t-1),對(duì)數(shù)收益率= ln(pt / p(t-1),pt每日原油價(jià)格,r(t)是每日收益。
對(duì)數(shù)收益率在這里被視為本文的每日收益率。原始價(jià)格和對(duì)數(shù)收益率的直觀顯示清楚地證明了以幾乎恒定的均值,使用對(duì)數(shù)收益率是合理的。

收益率序列圖顯示了高和低變化周期。在圖中可以看到一個(gè)隨機(jī)且集中在零附近的過程。大幅度波動(dòng)的正收益和負(fù)收益都增加了風(fēng)險(xiǎn)投資和管理的難度。每日收益率的平均值基本上在零水平水平附近,并且具有明顯的波動(dòng)性聚類,表明存在異方差性。ACF很小,但是高度相關(guān)。QQ和PP圖的形狀沒有明顯變化。

sns.distplot(df.returns, color=’blue’) #密度圖
# 匯總統(tǒng)計(jì)數(shù)據(jù)
print(df.returns.describe())
收益率的偏度(-0.119)和向右偏離表明,收益率正比負(fù)收益率高,峰度(7.042)反映了油價(jià)波動(dòng)大。
標(biāo)準(zhǔn)正態(tài)分布的偏度和峰度分別為0和3。
Jarque-Bera檢驗(yàn)的值表明,傳統(tǒng)的正態(tài)分布假設(shè)不適用于原油收益的真實(shí)分布。
ADF = ADF(df.returns)
print(ADF.summary().as_text())
kpss = KPSS(df.returns)
print(kpss.summary().as_text())

進(jìn)行了VR檢驗(yàn),以測(cè)試對(duì)數(shù)收益率序列是否是純粹的隨機(jī)游走,以及是否具有一定的可預(yù)測(cè)性。我在這里比較了1個(gè)月和12個(gè)月的對(duì)數(shù)收益率,并且拒絕了該系列為純隨機(jī)游走的空值。用負(fù)檢驗(yàn)統(tǒng)計(jì)量VA(-11.07)拒絕零表示在時(shí)間序列中存在序列相關(guān)性。用ADF,KPSS,DFGLS,PP和ZA統(tǒng)計(jì)量對(duì)單位根和平穩(wěn)性進(jìn)行的檢驗(yàn)均顯示出顯著性,表明使用?GARCH型模型來擬合收益序列是合適的。
非線性動(dòng)力學(xué)
使用Hurst對(duì)平穩(wěn)性的研究?。
# 計(jì)算最近價(jià)格的Hurst系數(shù)
tau = [sqrt(std(subtract(closes_recent[lag:], closes_recent[:-lag]))) for lag in lags]
m = polyfit(log(lags), log(tau), 1)
hurst = m[0]*2
H(0.531)表示具有長(zhǎng)期依賴性的隨機(jī)運(yùn)動(dòng)時(shí)間序列。證明了?本研究中GARCH模型的合理性?。

computation = RQAComputation.create(settings,
verbose=True)
result = computation.run()
result.min_diagonal_line_length = 2
此處,低?R?表示較低的周期性和隨機(jī)行為。此外,較低的?DET?值表示不確定性。這證明了使用GARCH?方法的合理性?。
GARCH模型
在估算GARCH類型的模型之前,將收益率乘以100。由于波動(dòng)率截距與模型中其他參數(shù)非常接近,因此這有助于優(yōu)化程序進(jìn)行轉(zhuǎn)換。
X = 100* df.returns
讓我們擬合一個(gè)?ARCH?模型并繪制平方殘差以檢查自相關(guān)性。

def getbest(TS):
best_aic = np.inf
for i in pq_rng:
for d in d_rng:
for j in pq_rng:
try:
tmp_mdl = smt.ARIMA(TS, order=(i,d,j)).fit(
#aic: 22462.01 | order: (2, 0, 2)
gam = arch_model(Model.resid, p=2, o=0, q=2, dist=’StudentsT’)
gres = gam.fit(update_freq=5, disp=’off’)
print(gres.summary())
tsplot(gres.resid**2, lags=30)
我們可以看到平方殘差具有自相關(guān)的依據(jù)。讓我們擬合一個(gè)GARCH模型并查看其性能。我將按照以下步驟進(jìn)行操作:
通過ARIMA(p,d,q)?模型的組合進(jìn)行迭代?,以擬合最優(yōu)時(shí)間序列。
?根據(jù)?具有最低AIC的ARIMA模型選擇?GARCH模型 。
將?GARCH(p,q)?模型擬合到時(shí)間序列。
檢查模型殘差和平方殘差進(jìn)行自相關(guān)
因此,我們?cè)谶@里發(fā)現(xiàn),最好的模型是?ARIMA(2,0,2)?,F(xiàn)在,我們對(duì)殘差進(jìn)行繪圖,以確定它們是否具有條件異方差。
arch_model(X, p=2, q=2, o=1,power=2.0, vol=’Garch’, dist=’StudentsT’)

am = arch_model(X, p=2, q=2, o=1,power=2.0, vol=’Garch’, dist=’StudentsT’)
所有3個(gè)GARCH?模型的輸出?都以表格格式顯示。Ω??(ω)?是白噪聲,alpha和beta是模型的參數(shù)。此外,??α[1] +β[1] <1?表示穩(wěn)定的模型。?EGARCH?似乎是最好的三個(gè)這模型。
最好在訓(xùn)練/測(cè)試中拆分?jǐn)?shù)據(jù)并獲得MSE / MAE / RMSE結(jié)果以比較最佳模型擬合。

通過將殘差除以條件波動(dòng)率來計(jì)算標(biāo)準(zhǔn)化殘差。
std_resid = ?resid / ?conditional_volatility
unit_var_resid = ?resid / ?resid.std()
標(biāo)準(zhǔn)化殘差和條件波動(dòng)圖顯示了一些誤差,但幅度不大。

sns.kdeplot(squared_resid, shade=True)
sns.kdeplot(std_resid, shade=True)
sns.kdeplot(unit_var_resid, shade=True)
還標(biāo)繪了標(biāo)準(zhǔn)化殘差以及非標(biāo)準(zhǔn)化的殘差。殘差的平方在中心更加尖峰,表明分布的尾部比標(biāo)準(zhǔn)殘差的尾部更重。讓我們檢查一下ACF圖。

plot_acf(std_resid)
看起來有些尖峰超出了陰影的置信區(qū)。讓我們查看殘差平方。

殘差平方顯示數(shù)據(jù)點(diǎn)在藍(lán)色陰影的置信度區(qū)域(95%)內(nèi),表示模型擬合較好。

res = am.fit()
fig = res.hedgehog_plot(type=’mean’)
圖顯示了整個(gè)2019年的預(yù)測(cè)。橙色線表示在不同時(shí)間區(qū)間的預(yù)測(cè)。
基于模擬的預(yù)測(cè)
這里使用基于仿真的方法從EGARCH?模擬中獲得預(yù)測(cè)波動(dòng)率的置信區(qū)間?。要從EGARCH?模型獲得波動(dòng)預(yù)測(cè),該?模型是從擬合模型的最后一次觀察中模擬得出的。重復(fù)此過程很多次,以獲得波動(dòng)率預(yù)測(cè)。預(yù)測(cè)點(diǎn)是通過對(duì)模擬求平均值來計(jì)算的,分別使用模擬分布的2.5%和97.5%的分位數(shù)來計(jì)算95%的置信區(qū)間??紤]平均收益率(mu)為0.0292,年波動(dòng)率(vol)為(26.48)* sqrt 252 = 37.37%。

#定義變量
T = 252 #交易天數(shù)
mu = 0.0622 #收益
vol = 0.3737 #波動(dòng)率
daily_returns=np.random.normal((1+mu)**(1/T),vol/sqrt(T),T)
#生成圖-價(jià)格序列和每日收益的直方圖
plt.plot(price_list)
plt.hist(daily_returns-1, 100)
在最上方的圖上,根據(jù)遵循正態(tài)分布的隨機(jī)每日收益,顯示了一個(gè)交易年度(252天)內(nèi)潛在價(jià)格序列演變的模擬。第二個(gè)圖是一年中這些隨機(jī)每日收益的直方圖。但是,可以通過運(yùn)行成千上萬的模擬來獲得洞察,每次模擬都基于相同的特征(價(jià)格交易量)產(chǎn)生一系列不同的潛在價(jià)格演變。
#設(shè)置一個(gè)空列表來保存我們每個(gè)模擬價(jià)格序列的最終值
result = []
S = df.Price[-1] #起始股票價(jià)格(即最后可用的實(shí)際股票價(jià)格)
T = 252 #交易天數(shù)
mu = 0.0622 #收益率
vol = 0.3737 #波動(dòng)率
#選擇要模擬的運(yùn)行次數(shù)-我選擇了10,000
for i in range(10000):
#使用隨機(jī)正態(tài)分布創(chuàng)建每日收益表
daily_returns= np.random.normal((1+mu)**(1/T),vol/sqrt(T),T)
#設(shè)定起始價(jià)格,并創(chuàng)建由上述隨機(jī)每日收益生成的價(jià)格序列
#將每次模擬運(yùn)行的結(jié)束值添加到我們?cè)陂_始時(shí)創(chuàng)建的空列表中
result.append(price_list[-1])
由于這些是對(duì)每日收益的隨機(jī)模擬,因此此處的結(jié)果會(huì)略有不同。由于每個(gè)模擬中包含的路徑,平均值趨向于“ mu”使用的平均收益。下面的直方圖顯示了價(jià)格分布的兩個(gè)分位數(shù),以了解高收益率或低收益率的可能性。

很顯然,原油價(jià)格有5%的機(jī)會(huì)最終跌破29.72元,有5%的機(jī)會(huì)高于101.75美元。
概括
在原油價(jià)格高波動(dòng)的背景下,我研究并提出了混合時(shí)變長(zhǎng)記憶?GARCH?和基于模擬的預(yù)測(cè)模型,該模型考慮了諸如非對(duì)稱性和異方差,時(shí)變風(fēng)險(xiǎn),長(zhǎng)記憶和重尾分布等波動(dòng)事實(shí)。經(jīng)驗(yàn)證據(jù)表明,具有布朗運(yùn)動(dòng)的原油數(shù)據(jù)往往在其時(shí)間動(dòng)態(tài)方面顯示出一定程度的可預(yù)測(cè)性。這項(xiàng)研究考慮了2000年至2019年的數(shù)據(jù),當(dāng)時(shí)股市經(jīng)歷了幾次金融危機(jī)和危機(jī)后階段。使用此時(shí)期的數(shù)據(jù)訓(xùn)練的模型有望具有出色的預(yù)測(cè)能力。
當(dāng)處理長(zhǎng)時(shí)間波動(dòng)的原油價(jià)格的時(shí)間序列數(shù)據(jù)時(shí),GARCH?(2,2)模型估計(jì)了方差的持久性?。??進(jìn)行了蒙特卡洛分析,以檢查結(jié)果的穩(wěn)健性。蒙特卡洛?模擬的輸出?表明,即使在控制了無關(guān)因素之后,結(jié)果仍然是可靠的。因此,這些發(fā)現(xiàn)提供了出色的混合?EGARCH?和?蒙特卡洛?模擬的的預(yù)測(cè)模型,其中考慮了波動(dòng)性特征,如波動(dòng)性聚類和不對(duì)稱性,時(shí)變風(fēng)險(xiǎn)和重尾分布,來衡量原油價(jià)格。

最受歡迎的見解
1.HAR-RV-J與遞歸神經(jīng)網(wǎng)絡(luò)(RNN)混合模型預(yù)測(cè)和交易大型股票指數(shù)的高頻波動(dòng)率
2.R語言中基于混合數(shù)據(jù)抽樣(MIDAS)回歸的HAR-RV模型預(yù)測(cè)GDP增長(zhǎng)
3.波動(dòng)率的實(shí)現(xiàn):ARCH模型與HAR-RV模型
4.R語言ARMA-EGARCH模型、集成預(yù)測(cè)算法對(duì)SPX實(shí)際波動(dòng)率進(jìn)行預(yù)測(cè)
5.GARCH(1,1),MA以及歷史模擬法的VaR比較
6.R語言多元COPULA GARCH 模型時(shí)間序列預(yù)測(cè)
7.R語言基于ARMA-GARCH過程的VAR擬合和預(yù)測(cè)
8.matlab預(yù)測(cè)ARMA-GARCH 條件均值和方差模型
9.R語言對(duì)S&P500股票指數(shù)進(jìn)行ARIMA + GARCH交易策略