【转自半美人】matlab 实现 garch 模型波动率估计

代码高亮问题

数据获取

数据处理

描述性统计

时间序列平稳性检验

相关和偏自相关

arch效应检验

建立 garch 模型

波动率估计

代码及文档地址

代码高亮问题

这边首先说一个问题,你们看到的 matlab 代码没有高亮,看上去很不舒服。但这个锅是 csdn 的,真垃圾,连个语法高亮都搞不好,matlab 虽然近些年慢慢被 python 取代,但是用户数量还是挺多,不算小众语言。因为没有代码高亮可能,看得非常不爽,所以我特点制作了电子版,可以点击下载

数据获取

使用 tushare 获取历史股票数据。首先,需要 注册tushare账号 ,然后获取自己的 token。没有 tushare 账号的,可以点去这里注册个https://tushare.pro/register?reg=126259账号,好像直接点击链接会提示风险,需要复制打地址栏打开。然后还需要从 tushare 网站获取 matlab sdk 放到代码运行目录下,以供调用。

close all

clear

clc

%% 读取数据

stockcode = '600551.SH';

diary([stockcode,'.txt'])

addpath(genpath(pwd));

% 如果没有 tushare 的 token 按我说的去注册个账号,然后替换成自己的token

token = '***************2ad39c08b3d******************';

api = pro_api(token);

start_time = '20170101';

end_time = '20180101';

ktype = 'D';

data = pro_bar(stockcode, api, start_time, end_time,ktype,'E','qfq');

数据处理

在获取了数据之后,我们需要对数据进行一些处理。

% 翻转数据

data = flipud(data);

temp = data.trade_date;

temp = char(temp);

temp = str2num(temp);

tradedate = datetime(temp,'ConvertFrom','yyyymmdd','format','yyyy-MM-dd');

%% 计算对数收益率

ret = price2ret(data.close);

% 绘制对数收益率图

x = tradedate(1:end-1);

figure;

plot(x,ret);

title([stockcode,'日收益率'])

saveas(gcf,[stockcode,'日收益率图.jpg']);

描述性统计

然后,对收益率数据进行描述性统计:

% 可以看出波动聚集

disp([stockcode,' 波动率预测']);

% 描述性统计

mu = mean(ret);

ret_median = median(ret);

ret_max = max(ret);

ret_min = min(ret);

sigma = std(ret);

ret_skew = skewness(ret);

ret_kurt = kurtosis(ret);

% h为测试结果,若h=0,则可以认为X是服从正态分布的;若h=1,则可以否定X服从正态分布;

% p为接受假设的概率值,P越接近于0,则可以拒绝是正态分布的原假设;

% jbstat为测试统计量的值;

% cv为是否拒绝原假设的临界值.

[h,p,jbstat,cv]=jbtest(ret);

disp(['收益序列均值为',num2str(mu)]);

disp(['收益序列中位数为',num2str(ret_median)]);

disp(['收益序列最大值为',num2str(ret_max)]);

disp(['收益序列最小值为',num2str(ret_min)]);

disp(['收益序列标准差为',num2str(ret_max)]);

disp(['收益序列偏度为',num2str(ret_skew)]);

disp(['收益序列峰度为',num2str(ret_kurt)]);

disp(['收益序列jb统计量为',num2str(jbstat)]);

相应的命令行结果输出:

600551.SH 波动率预测

警告: P is less than the smallest tabulated value, returning 0.001.

> In jbtest (line 136)

In garch_var (line 42)

收益序列均值为-0.0030367

收益序列中位数为-0.00062952

收益序列最大值为0.032405

收益序列最小值为-0.10542

收益序列标准差为0.032405

收益序列偏度为-2.1069

收益序列峰度为11.7364

收益序列jb统计量为572.3164

时间序列平稳性检验

我们利用 adf 检验对时间序列平稳性进行检验:

%% adf单位根检验

alpha=0.1;

disp('%%%%%%%%%%%%%%%%%%%%%%');

[h,pValue,stat,cValue] = adftest(ret,'alpha',alpha);

fprintf(['在%d%%的置信水平下,单位根检验统计量为%f,\n',...

'临界值为%f,概率为%f\n'],alpha*100,stat,cValue,pValue);

alpha=0.05;

disp('%%%%%%%%%%%%%%%%%%%%%%');

[h,pValue,stat,cValue] = adftest(ret,'alpha',alpha);

fprintf(['在%d%%的置信水平下,单位根检验统计量为%f,\n',...

'临界值为%f,概率为%f\n'],alpha*100,stat,cValue,pValue);

alpha=0.01;

disp('%%%%%%%%%%%%%%%%%%%%%%');

[h,pValue,stat,cValue] = adftest(ret,'alpha',alpha);

fprintf(['在%d%%的置信水平下,单位根检验统计量为%f,\n',...

'临界值为%f,概率为%f\n'],alpha*100,stat,cValue,pValue);

命令行结果输出:

%%%%%%%%%%%%%%%%%%%%%%

在10%的置信水平下,单位根检验统计量为-14.355258,

临界值为-1.615200,概率为0.001000

%%%%%%%%%%%%%%%%%%%%%%

在5%的置信水平下,单位根检验统计量为-14.355258,

临界值为-1.942690,概率为0.001000

%%%%%%%%%%%%%%%%%%%%%%

在1%的置信水平下,单位根检验统计量为-14.355258,

临界值为-2.581820,概率为0.001000

%%%%%%%%%%%%%%%%%%%%%%

相关和偏自相关

我们判断相关和偏自相关关系,主要是想初略判断后面 arch 效应检验时所要用到的滞后阶数:

% % 通过残差平方的偏自相关函数判断arch模型阶数

figure;

plot(x,at.^2);

name = [stockcode,' 收益率残差平方序列图'];

title(name);

saveas(gcf,[name,'.jpg']);

figure;

subplot(2,1,1);

autocorr(at.^2);

name = [stockcode,' 收益率残差平方序列自相关函数图'];

title(name);

subplot(2,1,2);

parcorr(at.^2);

name = [stockcode,' 收益率残差平方序列偏自相关函数图'];

title(name);

name = [stockcode,' 收益率残差平方序列自相关和偏自相关函数图'];

saveas(gcf,[name,'.jpg']);

至于为什么可以用偏自相关函数给arch模型定阶,可以看蔡瑞胸的金融时间序列分析。

arch效应检验

我们,取滞后阶数为3,用拉格朗日乘子法进行检验。

% 拉格郎日乘子检验

lags = 3;

alpha=0.05;

disp('%%%%%%%%%%%%%%%%%%%%%%');

disp('arch效应拉格朗日乘子检验');

[h,pValue,stat,cValue] = archtest(at,'Lags',lags,'Alpha',alpha);

fprintf(['在%d%%的置信水平下,滞后阶数为%d时,检验统计量为%f,\n',...

'临界值为%f,概率为%f\n'],alpha*100,lags,stat,cValue,pValue);

1

2

3

4

5

6

7

8

命令行结果输出:

%%%%%%%%%%%%%%%%%%%%%%

arch效应拉格朗日乘子检验

在5%的置信水平下,滞后阶数为3时,检验统计量为27.885162,

临界值为7.814728,概率为0.000004

%%%%%%%%%%%%%%%%%%%%%%

garch模型参数估计

这样,我们确认存在非常显著的arch效应。

建立 garch 模型

我们,此处建立 garch(1,1)模型:

%% garch模型建立

disp('%%%%%%%%%%%%%%%%%%%%%%');

md = garch(1,1);

disp('garch模型参数估计');

estMd = md.estimate(ret,'Display','off');

summarize(estMd);

命令行结果输出:

%%%%%%%%%%%%%%%%%%%%%%

garch模型参数估计

GARCH(1,1) Conditional Variance Model (Gaussian Distribution)

Effective Sample Size: 146

Number of Estimated Parameters: 3

LogLikelihood: 387.87

AIC: -769.74

BIC: -760.79

Value       StandardError    TStatistic      PValue

__________    _____________    __________    __________

Constant    2.8435e-05     2.8106e-05        1.0117         0.31168

GARCH{1}       0.84958        0.14246        5.9639      2.4636e-09

ARCH{1}       0.019211       0.016655        1.1535         0.24872

波动率估计

我们将 garch 模型无条件方差作为估计的波动率:

%% 无条件方差即波动率计算

sigma = estMd.Constant/(1-estMd.GARCH{1}-estMd.ARCH{1});

% 年化

y = 250;

sigma_y = sqrt(sigma*y);

fprintf('假定一年为%d天,年化波动率为%f\n',y,sigma_y);

diary off

1

2

3

4

5

6

7

命令行结果:

假定一年为250天,年化波动率为0.232768

1

代码及文档地址

————————————————

matlab 浮动波动率,matlab 实现 garch 模型波动率估计相关推荐

  1. matlab 实现 garch 模型波动率估计

    matlab 实现 garch 模型波动率估计 matlab 实现 garch 模型波动率估计 代码高亮问题 数据获取 数据处理 描述性统计 时间序列平稳性检验 相关和偏自相关 arch效应检验 建立 ...

  2. R语言用GARCH模型波动率建模和预测、回测风险价值 (VaR)分析股市收益率时间序列...

    原文链接:http://tecdat.cn/?p=26897 风险价值 (VaR) 是金融风险管理中使用最广泛的市场风险度量,也被投资组合经理等从业者用来解释未来市场风险(点击文末"阅读原文 ...

  3. 的garch预测_精品细读|基于隐含波动率、已实现波动率和GARCH模型波动率的预测...

    这是"高频数据"第130篇推送 编辑:张莉(西南交通大学数学学院) 审稿:唐瑜穗(西南交通大学经济管理学院) 仅用于学术交流,原本版权归原作者和原发刊所有 导读 contents ...

  4. R语言用GARCH模型波动率建模和预测、回测风险价值 (VaR)分析股市收益率时间序列

    最近我们被客户要求撰写关于GARCH的研究报告,包括一些图形和统计输出. 风险价值 (VaR) 风险价值 (VaR) 是金融风险管理中使用最广泛的市场风险度量,也被投资组合经理等从业者用来解释未来市场 ...

  5. matlab中ewma实现,ewma 移动平均模型

    动平均(WMA)制图A L的计 算方 ME控R法 J本文 基于马尔可夫链的ME.WMA控制图 A L计算 的数 学模型,用MaaR采tb平台,该模 l对 学术 界 和实 际应用 ...... 在采样数 ...

  6. Python玩转金融时间序列之ARCH与GARCH模型

    01 引言 作为金融时间序列的专题推文,[手把手教你]时间序列之日期处理主要介绍了使用Python处理时间序列的日期和统计分析:[Python量化基础]时间序列的自相关性与平稳性主要介绍了时间序列的一 ...

  7. python——金融商品收益率GARCH 模型构建(GARCH 模型)

    一.GARCH简介 GARCH模型是Bollerslev在1986年提出来的,全称为广义自回归条件异方差模型,Generalized Autoregressive Conditionally Hete ...

  8. arch检验python_Python玩转金融时间序列之ARCH与GARCH模型

    01 引言 作为金融时间序列的专题推文,[手把手教你]时间序列之日期处理主要介绍了使用Python处理时间序列的日期和统计分析:[Python量化基础]时间序列的自相关性与平稳性主要介绍了时间序列的一 ...

  9. 随机减量法matlab程序_Matlab马尔可夫链蒙特卡罗法(MCMC)估计随机波动率(SV) 模型...

    原文链接: http://tecdat.cn/?p=16708​tecdat.cn 波动率是一个重要的概念,在金融和交易中有许多应用.这是期权定价的基础.波动率还使您可以确定资产分配并计算投资组合的风 ...

最新文章

  1. on-my-zsh git 仓库下运行卡顿
  2. 26期Linux20180531 单用户 救援模式 克隆虚拟机 linux机器相互登录
  3. npm ERR! code ELIFECYCLE npm ERR! errno 1 npm ERR! test_vue_0613@1.0.0 dev: 错误的解决方法
  4. python 计算 IOU
  5. c# winform程序调用托管dll(c#的dll),使用添加引用和动态加载dll
  6. 先装XP再装WIN2000双系统无法启动的解决办法
  7. 机器视觉技术在表面缺陷检测方面的发展趋势
  8. 键盘录入,替换敏感词
  9. debian 安装php gd2,如何在Debian Linux中为PHP安装Ioncube
  10. AWS推出RoboMaker,可构建智能机器人应用程序
  11. 20191206每日一句
  12. visio 2010激活教程
  13. java 单个session过期_session过期的三种方法
  14. 基于SRIO的FPGA与DSP间高速数据传输
  15. 抖音上热门的小技巧你都掌握了吗?
  16. WSADATA 数据结构
  17. IDEA跟金山词霸的小bug
  18. Python3 juypterlab pyecharts 饼图制作
  19. 【Spring】AOP - 面向切面
  20. python目标跟踪精度曲线图_目标跟踪配置(三)-评价指标-benchmark(更新中,关注请收藏。。。)...

热门文章

  1. 融慧金科CEO王劲:为何人工智能远未触达风控的本质?...
  2. 同程旅行前端一面9.20(30min)
  3. 常识---关于档案(转)
  4. 福州大学计算机组成原理试题,2016年福州大学计算机专业基础D复试之计算机组成原理考研复试题库...
  5. 阿里YunOS智能生态重磅亮相云栖大会
  6. 俞敏洪老师的回复真的太糟糕了!
  7. 使用Tensorflow实现多GPU并行训练
  8. 日常记录:java启动参数 -javaagent的使用,应用启动前添加代理包并且注册Mbean
  9. 转: 云计算openstack—云计算、大数据、人工智能
  10. HDFS 概念之 block 详解