使用r語言做garch模型
Asset prices have a high degree of stochastic trends inherent in the time series. In other words, price fluctuations are subject to a large degree of randomness, and therefore it is very difficult to forecast asset prices using traditional time series models such as ARIMA.
資產價格具有時間序列固有的高度隨機趨勢。 換句話說,價格波動受到很大程度的隨機性影響,因此很難使用諸如ARIMA之類的傳統時間序列模型來預測資產價格。
Moreover, with much of the trading done on an algorithmic basis today — prices are constantly adjusting on the basis of such forecasts — making it quite hard to exploit an advantage in the markets.
而且,由于當今許多交易都是基于算法進行的-價格在這種預測的基礎上不斷調整-因此很難在市場中利用優勢。
For instance, suppose I build a time series model to predict rainfall in a city for the next three months. My time series model could have a strong degree of accuracy as the forecasts will not influence rainfall levels in the future. However, if everyone uses an ARIMA model to predict asset price fluctuations for the next three months — then subsequent trading on the basis of those forecasts will directly influence previous forecasts — rendering them invalid in many cases.
例如,假設我建立了一個時間序列模型來預測未來三個月城市的降雨。 我的時間序列模型可能具有很高的準確性,因為預測不會影響將來的降雨量。 但是,如果每個人都使用ARIMA模型來預測未來三個月的資產價格波動-那么根據這些預測進行的后續交易將直接影響先前的預測-在許多情況下使它們無效。
背景 (Background)
As a result, it is common to model projected volatility of an asset price in the financial markets — as opposed to forecasting projected price outright.
因此,通常在金融市場中對資產價格的預計波動率建模,而不是直接預測預測價格。
Let’s see how this can be accomplished using Python. A GARCH model is used to forecast volatility for the EUR/USD and GBP/USD currency pairs, using data from January 2017 — January 2018.
讓我們看看如何使用Python來實現。 GARCH模型用于使用2017年1月至2018年1月的數據預測EUR / USD和GBP / USD貨幣對的波動。
The data is sourced from FRED using the Quandl library:
數據使用Quandl庫來自FRED:
eurusd = quandl.get("FRED/DEXUSEU", start_date='2017-01-01', end_date='2018-01-01', api_key='enter_api_key')gbpusd = quandl.get("FRED/DEXUSUK", start_date='2017-01-01', end_date='2018-01-01', api_key='enter_api_key')
The series are converted to logarithmic format to smooth out the time series:
該系列將轉換為對數格式,以平滑時間序列:
歐元/美元 (EUR/USD)
英鎊/美元 (GBP/USD)

The data is then first-differenced to approximate a Gaussian distribution.
然后對數據進行一階微分以近似高斯分布。
Dickey-Fuller tests show a p-value of 0 for both series — indicating that we reject the null hypothesis that a unit root is present at the 5% level of significance, i.e. stationarity or trend stationarity is indicated as being present in the model.
Dickey-Fuller檢驗顯示兩個系列的p值均為0,這表明我們拒絕零假設,即單位根以5%的顯著性水平存在,即模型中指示存在平穩性或趨勢平穩性。
EUR/USD: Dickey-Fuller Test Results
歐元/美元:迪基-富勒測試結果
>>> result = ts.adfuller(data, 1)
>>> result(-16.26123019770431,
3.564065405943774e-29,
0,
247,
{'1%': -3.457105309726321,
'5%': -2.873313676101283,
'10%': -2.5730443824681606},
-1959.704886024891)
GBP/USD: Dickey-Fuller Test Results
英鎊/美元:迪基-富勒測試結果
>>> result = ts.adfuller(data, 1)
>>> result(-12.380335699861567,
5.045829408723097e-23,
1,
246,
{'1%': -3.457215237265747,
'5%': -2.873361841566324,
'10%': -2.5730700760129555},
-1892.8308007824835)
Additionally, a visual screening of QQ plots show that the series now largely follow a normal distribution:
此外,對QQ圖的可視化篩選顯示,該系列現在基本上遵循正態分布:
EUR/USD: QQ Plot
歐元/美元:QQ情節

GBP/USD: QQ Plot
英鎊/美元:QQ情節

GARCH建模 (GARCH Modelling)
A GARCH(1,1) model is built to predict the volatility for the last 30 days of trading data for both currency pairs. The previous data is used as the training set for the GARCH model.
建立了GARCH(1,1)模型以預測兩種貨幣對的交易數據的最后30天的波動性。 先前的數據用作GARCH模型的訓練集。
# split into train/test
n_test = 30
train, test = data[:-n_test], data[-n_test:]
# define model
model = arch_model(train, mean='Zero', vol='GARCH', p=1, q=1)
The predictions are generated as follows:
預測生成如下:
# fit model
model_fit = model.fit()
# forecast the test set
yhat = model_fit.forecast(horizon=n_test)
Now, let’s compare the predicted variance with the actual 5-day rolling variance across the test set.
現在,讓我們將預測方差與整個測試集的實際5天滾動方差進行比較。
歐元/美元 (EUR/USD)
Predicted Variance
預測方差
test.rolling(window=5).var().plot(style='g')
pyplot.title("5-day Rolling Variance")

5-day Rolling Variance
5天滾動差異
pyplot.plot(yhat.variance.values[-1, :])
pyplot.title("Predicted Variance")
pyplot.show()

We see that the GARCH model predicts a drop in volatility for the last 30 days (as measured by variance) — this is confirmed by a visual inspection of the actual 5-day rolling variance.
我們看到,GARCH模型預測了最近30天的波動性下降(以方差衡量),這通過對實際5天滾動方差的目視檢查得到確認。
Let’s have a look at the comparisons across the GBP/USD.
讓我們看一下英鎊/美元之間的比較。
英鎊/美元 (GBP/USD)
Predicted Variance
預測方差

5-day Rolling Variance
5天滾動差異

We can see that while the scale for the predicted variance is much narrower than the actual 5-day rolling variance — both instances are predicting a decrease in variance across the 30-day test period.
我們可以看到,盡管預測方差的標度比實際5天滾動方差要窄得多,但兩個實例都預測了30天測試期間方差的減少。
This corresponds with what we actually observe — there was little movement in both the EUR/USD and GBP/USD currency pairs in December 2017 relative to that of other months in the trading year.
這與我們實際觀察到的情況相對應-與交易年度的其他月份相比,2017年12月的EUR / USD和GBP / USD貨幣對幾乎沒有變化。
結論 (Conclusion)
This has been an illustration of how GARCH can be used to model time series volatility.
這說明了如何使用GARCH對時間序列波動性進行建模。
Hope you found the article useful, and any questions or feedback are greatly appreciated. The GitHub repository for this example, as well as other relevant references are available below.
希望您覺得這篇文章對您有用,對您的任何問題或反饋都深表感謝。 下面提供了此示例的GitHub存儲庫以及其他相關參考。
Disclaimer: This article is written on an “as is” basis and without warranty. It was written with the intention of providing an overview of data science concepts, and should not be interpreted as investment advice, or any other sort of professional advice.
免責聲明:本文按“原樣”撰寫,不作任何擔保。 本文檔旨在概述數據科學概念,不應將其解釋為投資建議或任何其他形式的專業建議。
翻譯自: https://towardsdatascience.com/estimating-currency-volatility-using-garch-e373cf82179d
使用r語言做garch模型
本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。 如若轉載,請注明出處:http://www.pswp.cn/news/391348.shtml 繁體地址,請注明出處:http://hk.pswp.cn/news/391348.shtml 英文地址,請注明出處:http://en.pswp.cn/news/391348.shtml
如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!