使用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.mzph.cn/news/391348.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!