楼主: 欲宇内
7934 9

[问答] R语言做GARCH模型预测波动率,结果有问题 [推广有奖]

  • 0关注
  • 0粉丝

高中生

72%

还不是VIP/贵宾

-

威望
0
论坛币
87 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
221 点
帖子
49
精华
0
在线时间
19 小时
注册时间
2015-9-1
最后登录
2019-5-18

楼主
欲宇内 发表于 2019-4-9 20:15:58 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
我用R的rugarch包做了GARCH模型,做了以后进行滚动窗一步向前的预测,但是预测出来的结果和真实的波动率差很多,不知道是什么问题?


另外,如果我做向前30天的预测,预测出来的波动率总是单调递增的,很奇怪。


有人知道怎么回事吗?或者有哪位同学会用R或者MATLAB做garch类模型的,也可以联系我。能加我qq最好,1401627451。谢谢了!
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:波动率 同学会 类模型

沙发
欲宇内 发表于 2019-4-9 20:16:29
如果哪位同学需要有偿也是可以的,谢谢啦

藤椅
欲宇内 发表于 2019-4-9 21:53:47
library(ggplot2)
library(tidyr)
library(dplyr)
library(TTR)
library(moments)
library(ncg)
library(FMStable)
library(tseries)
library(rugarch)
library(openxlsx)

setwd("E:/毕业设计/代码/R代码/低频模型")
data <- read.csv("input_2018.csv", stringsAsFactors = F, header = T)

innerData = data %>% filter(date<20180301)
outerData = data %>% filter(date>=20180301)

returns = data$returns
alldays = length(returns)

innerReturns = innerData$returns
innerDays = length(innerReturns)
outerReturns = outerData$returns
outerDays = length(outerReturns)

garch.spec = ugarchspec(variance.model = list(model='sGARCH',garchOrder=c(1,1)),
                                                mean.model=list(armaOrder = c(3,0,1),include.mean = TRUE),
                                                distribution.model = "sstd")
garch.fit = ugarchfit(data=innerReturns,spec=garch.spec,out.sample=outerDays)
windowsWides = innerDays##1452

foreVolatility = matrix(nrow = outerDays,ncol=1)

for (i in 1:outerDays){
        returnsE = returns[i:(i+windowsWides-1)]
        garch.fit = ugarchfit(data=returnsE,spec=garch.spec,solver="solnp")
        fore = ugarchforecast(garch.fit,n.ahead=1)

        foreVolatility[i] = fore@forecast[["sigmaFor"]]
}

plot(foreVolatility)
rvData <- read.xlsx("预测结果CJ_2018.xlsx") ##读取真实RV
rv = rvData$RV
rv = rv^0.5
t =1:267
plot(t,rv,type="p",xlab="日期",ylab="波动率",ylim=c(0,4),xlim = c(0,267) ,col='red',pch=c("."),cex=2)
lines(t,foreVolatility,type="o",col="green",pch=c("."))
legend("topleft",c("RV","foreVolatility"),col=c("red","green"),lty = c(0,1),pch=c(".","."),bty = "n",text.width=0.6,cex=0.6)

板凳
欲宇内 发表于 2019-4-9 21:55:48
3楼是我的代码,跑出来的结果非常差,见图。

1554818100(1).jpg (7.62 KB)

1554818100(1).jpg

报纸
欲宇内 发表于 2019-4-9 21:56:20
有哪位同学可以帮我解答一下吗?谢谢了!

地板
cheetahfly 在职认证  发表于 2019-4-10 09:03:35
看你的图,如果没有理解错的话,应该是绿线代表预测波动率,红点代表真实波动率。
我发现两者根本不是一个数量级的,结合你的变量中有“return”出现,我猜测可能是某种资产的收益率,如果是这样的话,真实值(红点)所代表的波动率太高了,一项资产的收益波动率常态性超过50%,甚至瞬间高达300%,这个市场是很成问题的,建议你检查一下真实RV的计算是否有误。
已有 1 人评分学术水平 热心指数 收起 理由
HanghangKE + 5 + 5 热心帮助其他会员

总评分: 学术水平 + 5  热心指数 + 5   查看全部评分

7
欲宇内 发表于 2019-4-10 09:22:47
cheetahfly 发表于 2019-4-10 09:03
看你的图,如果没有理解错的话,应该是绿线代表预测波动率,红点代表真实波动率。
我发现两者根本不是一个 ...
谢谢你的解答!!
是这样的,我这个是电力市场价格的波动,这个电力价格很大的特点就是价格波动特别剧烈。真实RV的计算应该是没有问题的,因为我已经做过高频HAR模型的建模和预测了,那个结果已经通过老师了。现在做低频的是为了做个对比。
所以您的意思是,波动率过于剧烈的资产,可能并不适合用garch来做拟合和预测是嘛?那有没有其他方法能解决波动率过于剧烈的问题呢?比如在garch里面加点什么?我一直都是做高频模型的,对低频的garch类模型一直都是一知半解的。谢谢您了!

8
cheetahfly 在职认证  发表于 2019-4-10 16:09:30
欲宇内 发表于 2019-4-10 09:22
谢谢你的解答!!
是这样的,我这个是电力市场价格的波动,这个电力价格很大的特点就是价格波动特别剧烈 ...
我并没有“波动率过于剧烈的资产,可能并不适合用garch来做拟合”的推测,我的本意是怀疑这么高的波动率的合理性。
我提另一个检查思路:是否你在做模型的时候,是用的“价格变化率”的波动率,而做检验的时候,用的是“价格绝对值”的波动率?

9
欲宇内 发表于 2019-4-10 19:25:16
cheetahfly 发表于 2019-4-10 16:09
我并没有“波动率过于剧烈的资产,可能并不适合用garch来做拟合”的推测,我的本意是怀疑这么高的波动率的 ...
我不太知道garch模型里面的波动率指的是价格变化的波动率还是绝对值的波动率哎。RV的话,根据计算过程来看的话,应该是价格绝对值的波动率。

10
leabc 发表于 2021-6-23 00:37:28
楼主您好!想请问一下您代码里的returns,datareturns是原始序列取对数再差分后得到的序列吗?

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-1-30 13:05