Python使用GARCH,EGARCH,GJR-GARCH模型和蒙特卡洛模擬進行股價預測|附程式碼資料
全文下載連結:http://tecdat.cn/?p=20678
在本文中,預測股價已經受到了投資者,政府,企業和學者廣泛的關注。然而,資料的非線性和非平穩性使得開發預測模型成為一項複雜而具有挑戰性的任務
在本文中,我將解釋如何將 GARCH,EGARCH和 GJR-GARCH 模型與Monte-Carlo 模擬結合使用, 以建立有效的預測模型。金融時間序列的峰度,波動率和槓桿效應特徵證明了GARCH的合理性。時間序列的非線性特徵用於檢查布朗運動並研究時間演化模式。非線性預測和訊號分析方法因其在特徵提取和分類中的魯棒性而在股票市場上越來越受歡迎。
動力學系統可以用一組時變(連續或離散)變數來描述,這些變數構成訊號分析非線性方法的基礎。如果時間的當前值和狀態變數可以準確地描述下一時刻的系統狀態,則可以說這樣的系統是確定性的。另一方面,如果時間和狀態變數的當前值僅描述狀態變數的值隨時間變化的概率,則將動力學系統視為隨機系統。
因此,在使用GARCH 建模方法之前 ,我將採用 分形維數(FD) ,重定 範圍 和 遞迴量化分析(RQA)的 資料建模 技術 來總結資料的非線性動力學行為並完成研究目標。
方法
Hurst**係數 (H) 是長期依賴的特徵引數,與 FD (FD + H = 2)有關。 R / S分析是資料建模的核心工具。經驗研究表明, 與同類中的其他方法相比, R / S_帶來了更好的結果,例如自相關,光譜分解的分析。它是度量時間序列差異的度量,該時間序列的定義是給定持續時間_(T)_的均值範圍 ,除以該持續時間的標準偏差 [ R / S = k * T(H) ]; _ķ 是一個取決於時間序列的常數。H度量時間序列的長期記憶,將其表徵為均值回覆,趨勢或隨機遊走。
H <0.5表示均值回覆
H> 0.5表示趨勢序列,並且
H = 0.5表示隨機遊走。
我將展示如何使用 GARCH 模型進行風險評估。
GARCH 模型的一個關鍵限制 是對其引數施加非負約束,以確保條件方差的正性。這樣的約束會給估計GARCH 模型帶來困難 。
因此,提出了 非對稱GARCH 模型,即俗稱的 GJR-GARCH 模型,以解決對稱GARCH 模型的侷限性 。更重要的是,指數 GARCH 或 EGARCH 模型相對於傳統的GARCH 模型具有潛在的改進 。
資料探勘
檢視資料。
在過去的幾十年中,原油價格呈現出較大的波動,尤其是在2008年左右。可以看出,隨著多次上升和下降,價格保持在相對較低的水平。從自相關圖可以看出原始資料中明顯的自相關。QQ和PP圖的形狀表明該過程接近正態,但是_重尾分佈_。
簡單收益率的常用形式為:r(t)= {p(t)— p(t-1)} / p(t-1),對數收益率= ln(pt / p(t-1),pt每日原油價格,r(t)是每日收益。
對數收益率在這裡被視為本文的每日收益率。原始價格和對數收益率的直觀顯示清楚地證明了以幾乎恆定的均值,使用對數收益率是合理的。
收益率序列圖顯示了高和低變化週期。在圖中可以看到一個隨機且集中在零附近的過程。大幅度波動的正收益和負收益都增加了風險投資和管理的難度。每日收益率的平均值基本上在零水平水平附近,並且具有明顯的波動性聚類,表明存在異方差性。ACF很小,但是高度相關。QQ和PP圖的形狀沒有明顯變化。
sns.distplot(df.returns, color=’blue’) #密度圖
# 彙總統計資料
print(df.returns.describe())
收益率的偏度(-0.119)和向右偏離表明,收益率正比負收益率高,峰度(7.042)反映了油價波動大。
點選標題查閱往期內容
R語言ARMA-GARCH-COPULA模型和金融時間序列案例
左右滑動檢視更多
01
02
03
04
標準正態分佈的偏度和峰度分別為0和3。
Jarque-Bera檢驗的值表明,傳統的正態分佈假設不適用於原油收益的真實分佈。
ADF = ADF(df.returns)
print(ADF.summary().as_text())
kpss = KPSS(df.returns)
print(kpss.summary().as_text())
進行了VR檢驗,以測試對數收益率序列是否是純粹的隨機遊走,以及是否具有一定的可預測性。我在這裡比較了1個月和12個月的對數收益率,並且拒絕了該系列為純隨機遊走的空值。用負檢驗統計量VA(-11.07)拒絕零表示在時間序列中存在序列相關性。用ADF,KPSS,DFGLS,PP和ZA統計量對單位根和平穩性進行的檢驗均顯示出顯著性,表明使用 GARCH型模型來擬合收益序列是合適的。
非線性動力學
使用_Hurst_對平穩性的研究 。
# 計算最近價格的Hurst係數
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)表示具有長期依賴性的隨機運動時間序列。證明了 本研究中GARCH模型的合理性 。
computation = RQAComputation.create(settings,
verbose=True)
result = computation.run()
result.min_diagonal_line_length = 2
此處,低 R 表示較低的週期性和隨機行為。此外,較低的 DET 值表示不確定性。這證明了使用GARCH 方法的合理性 。
GARCH模型
在估算GARCH型別的模型之前,將收益率乘以100。由於波動率截距與模型中其他引數非常接近,因此這有助於優化程式進行轉換。
X = 100* df.returns
讓我們擬合一個 ARCH 模型並繪製平方殘差以檢查自相關性。
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)
我們可以看到平方殘差具有自相關的依據。讓我們擬合一個GARCH模型並檢視其效能。我將按照以下步驟進行操作:
- 通過ARIMA(p,d,q) 模型的組合進行迭代 , 以擬合最優時間序列。
- 根據 具有最低AIC的ARIMA模型選擇 GARCH模型 。
- 將 GARCH(p,q) 模型擬合到時間序列。
- 檢查模型殘差和平方殘差進行自相關
因此,我們在這裡發現,最好的模型是 ARIMA(2,0,2) 。現在,我們對殘差進行繪圖,以確定它們是否具有條件異方差。
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個GARCH 模型的輸出 都以表格格式顯示。Ω (ω) 是白噪聲,alpha和beta是模型的引數。此外, α[1] +β[1] <1 表示穩定的模型。 EGARCH 似乎是最好的三個這模型。
最好在訓練/測試中拆分資料並獲得MSE / MAE / RMSE結果以比較最佳模型擬合。
通過將殘差除以條件波動率來計算標準化殘差。
std_resid = resid / conditional_volatility
unit_var_resid = resid / resid.std()
標準化殘差和條件波動圖顯示了一些誤差,但幅度不大。
sns.kdeplot(squared_resid, shade=True)
sns.kdeplot(std_resid, shade=True)
sns.kdeplot(unit_var_resid, shade=True)
還標繪了標準化殘差以及非標準化的殘差。殘差的平方在中心更加尖峰,表明分佈的尾部比標準殘差的尾部更重。讓我們檢查一下ACF圖。
plot_acf(std_resid)
看起來有些尖峰超出了陰影的置信區。讓我們檢視殘差平方。
殘差平方顯示資料點在藍色陰影的置信度區域(95%)內,表示模型擬合較好。
res = am.fit()
fig = res.hedgehog_plot(type=’mean’)
圖顯示了整個2019年的預測。橙色線表示在不同時間區間的預測。
基於模擬的預測
這裡使用基於模擬的方法從EGARCH 模擬中獲得預測波動率的置信區間 。要從EGARCH 模型獲得波動預測,該 模型是從擬合模型的最後一次觀察中模擬得出的。重複此過程很多次,以獲得波動率預測。預測點是通過對模擬求平均值來計算的,分別使用模擬分佈的2.5%和97.5%的分位數來計算95%的置信區間。考慮平均收益率(mu)為0.0292,年波動率(vol)為(26.48)* sqrt 252 = 37.37%。
#定義變數
T = 252 #交易天數
mu = 0.0622 #收益
vol = 0.3737 #波動率
daily_returns=np.random.normal((1+mu)**(1/T),vol/sqrt(T),T)
#生成圖-價格序列和每日收益的直方圖
plt.plot(price_list)
plt.hist(daily_returns-1, 100)
在最上方的圖上,根據遵循正態分佈的隨機每日收益,顯示了一個交易年度(252天)內潛在價格序列演變的模擬。第二個圖是一年中這些隨機每日收益的直方圖。但是,可以通過執行成千上萬的模擬來獲得洞察,每次模擬都基於相同的特徵(價格交易量)產生一系列不同的潛在價格演變。
#設定一個空列表來儲存我們每個模擬價格序列的最終值
result = []
S = df.Price[-1] #起始股票價格(即最後可用的實際股票價格)
T = 252 #交易天數
mu = 0.0622 #收益率
vol = 0.3737 #波動率
#選擇要模擬的執行次數-我選擇了10,000
for i in range(10000):
#使用隨機正態分佈建立每日收益表
daily_returns= np.random.normal((1+mu)**(1/T),vol/sqrt(T),T)
#設定起始價格,並建立由上述隨機每日收益生成的價格序列
#將每次模擬執行的結束值新增到我們在開始時建立的空列表中
result.append(price_list[-1])
由於這些是對每日收益的隨機模擬,因此此處的結果會略有不同。由於每個模擬中包含的路徑,平均值趨向於“ mu”使用的平均收益。下面的直方圖顯示了價格分佈的兩個分位數,以瞭解高收益率或低收益率的可能性。
很顯然,原油價格有5%的機會最終跌破29.72元,有5%的機會高於101.75美元。
概括
在原油價格高波動的背景下,我研究並提出了混合時變長記憶 GARCH 和基於模擬的預測模型,該模型考慮了諸如非對稱性和異方差,時變風險,長記憶和重尾分佈等波動事實。經驗證據表明,具有布朗運動的原油資料往往在其時間動態方面顯示出一定程度的可預測性。這項研究考慮了2000年至2019年的資料,當時股市經歷了幾次金融危機和危機後階段。使用此時期的資料訓練的模型有望具有出色的預測能力。
當處理長時間波動的原油價格的時間序列資料時,GARCH (2,2)模型估計了方差的永續性 。 進行了蒙特卡洛分析,以檢查結果的穩健性。蒙特卡洛 模擬的輸出 表明,即使在控制了無關因素之後,結果仍然是可靠的。因此,這些發現提供了出色的混合 EGARCH 和 蒙特卡洛 模擬的的預測模型,其中考慮了波動性特徵,如波動性聚類和不對稱性,時變風險和重尾分佈,來衡量原油價格。
本文摘選 《 Python使用GARCH,EGARCH,GJR-GARCH模型和蒙特卡洛模擬進行股價預測 》 ,點選“閱讀原文”獲取全文完整資料。
點選標題查閱往期內容
ARMA-GARCH-COPULA模型和金融時間序列案例
時間序列分析:ARIMA GARCH模型分析股票價格資料
GJR-GARCH和GARCH波動率預測普爾指數時間序列和Mincer Zarnowitz迴歸、DM檢驗、JB檢驗
【視訊】時間序列分析:ARIMA-ARCH / GARCH模型分析股票價格
時間序列GARCH模型分析股市波動率
PYTHON用GARCH、離散隨機波動率模型DSV模擬估計股票收益時間序列與蒙特卡洛視覺化
極值理論 EVT、POT超閾值、GARCH 模型分析股票指數VaR、條件CVaR:多元化投資組合預測風險測度分析
Garch波動率預測的區制轉移交易策略
金融時間序列模型ARIMA 和GARCH 在股票市場預測應用
時間序列分析模型:ARIMA-ARCH / GARCH模型分析股票價格
R語言風險價值:ARIMA,GARCH,Delta-normal法滾動估計VaR(Value at Risk)和回測分析股票資料
R語言GARCH建模常用軟體包比較、擬合標準普爾SP 500指數波動率時間序列和預測視覺化
Python金融時間序列模型ARIMA 和GARCH 在股票市場預測應用
MATLAB用GARCH模型對股票市場收益率時間序列波動的擬合與預測R語言GARCH-DCC模型和DCC(MVT)建模估計
Python 用ARIMA、GARCH模型預測分析股票市場收益率時間序列
R語言中的時間序列分析模型:ARIMA-ARCH / GARCH模型分析股票價格
R語言ARIMA-GARCH波動率模型預測股票市場蘋果公司日收益率時間序列
Python使用GARCH,EGARCH,GJR-GARCH模型和蒙特卡洛模擬進行股價預測
R語言時間序列GARCH模型分析股市波動率
R語言ARMA-EGARCH模型、整合預測演算法對SPX實際波動率進行預測
matlab實現MCMC的馬爾可夫轉換ARMA - GARCH模型估計
Python使用GARCH,EGARCH,GJR-GARCH模型和蒙特卡洛模擬進行股價預測
使用R語言對S&P500股票指數進行ARIMA + GARCH交易策略
R語言用多元ARMA,GARCH ,EWMA, ETS,隨機波動率SV模型對金融時間序列資料建模
R語言股票市場指數:ARMA-GARCH模型和對數收益率資料探索性分析
R語言多元Copula GARCH 模型時間序列預測
R語言使用多元AR-GARCH模型衡量市場風險
R語言中的時間序列分析模型:ARIMA-ARCH / GARCH模型分析股票價格
R語言用Garch模型和迴歸模型對股票價格分析
GARCH(1,1),MA以及歷史模擬法的VaR比較
matlab估計arma garch 條件均值和方差模型R語言POT超閾值模型和極值理論EVT分析R語言時間序列GARCH模型分析股市波動率
R語言ARMA-EGARCH模型、整合預測演算法對SPX實際波動率進行預測
matlab實現MCMC的馬爾可夫轉換ARMA - GARCH模型估計
Python使用GARCH,EGARCH,GJR-GARCH模型和蒙特卡洛模擬進行股價預測
使用R語言對S&P500股票指數進行ARIMA + GARCH交易策略
R語言用多元ARMA,GARCH ,EWMA, ETS,隨機波動率SV模型對金融時間序列資料建模
R語言股票市場指數:ARMA-GARCH模型和對數收益率資料探索性分析
R語言多元Copula GARCH 模型時間序列預測
R語言使用多元AR-GARCH模型衡量市場風險
R語言中的時間序列分析模型:ARIMA-ARCH / GARCH模型分析股票價格
R語言GARCH-DCC模型和DCC(MVT)建模估計
R語言用Garch模型和迴歸模型對股票價格分析
GARCH(1,1),MA以及歷史模擬法的VaR比較
matlab估計arma garch 條件均值和方差模型
R語言ARMA-GARCH-COPULA模型和金融時間序列案例