量化投资_MATLAB在时间序列建模预测及程序代码
1 ARMA时间序列机器特性
下面介绍一种重要的平稳时间序列——ARMA时间序列。
ARMA时间序列分为三种:
AR模型,auto regressiv model
MA模型,moving average model
ARMA模型,auto regressive moving average model
可证ARMA时间序列具有遍历性,因此可以通过它的一个样本估计自协方差函数及自相关函数。
2 ARMA、AR、MA模型的基础知识(略)
3 例:随机模拟下列序列,样本容量10000,其中样本符合均值为零,方差为1的标准正太分布。计算自相关值
MATLAB代码如下:
%% DEMO1
% 利用模型数据研究随机模拟下序列。计算自相关函数
clc;clear;
rng('default'); % 初始化随机种子,保持随机种子一致
elps = randn(1,10000); % 产生10000个服从正态分布的随机数
x(1) = 0; % 赋初始值
for j = 2:10000
x(j) = 0.8 * x(j-1) + elps(j) - 0.4 * elps(j-1); % 产生样本点
end
y = (x - mean(x)); % 把数据中心化处理
gama0 = var(x); % 求样本方差
for j = 1:10
gama(j) = y(j+1:end)*y(1:end-j)'/10000; %求自协方差函数
end
rho = gama/gama0; %求自相关函数
rho2 = autocorr(x); % 直接利用MATLAB工具箱求自相关函数。
disp([rho(1),rho(2),rho(4),rho(4)]);
disp([rho2(2),rho2(3),rho2(4),rho2(5)]) % 其自相关函数的计算结果基本一致
% 0.5430 0.4296 0.2551 0.2551
% 0.5430 0.4297 0.3396 0.2552
4 例:利用MATLAB计算自相关值
%% DEMO2
% 利用模型数据研究随机模拟下序列。计算偏自相关函数
clc;clear;
rng('default'); % 初始化随机种子,保持随机种子一致
elps = randn(1,10000); % 产生10000个服从正态分布的随机数
x(1) = 0; % 赋初始值
for j = 2:10000
x(j) = 0.8 * x(j-1) + elps(j) - 0.4 * elps(j-1); % 产生样本点
end
y = (x - mean(x)); % 把数据中心化处理
gama0 = var(x); % 求样本方差
L = 10;
for j = 1:L
gama(j) = y(j+1:end)*y(1:end-j)'/10000; %求自协方差
end
rho = gama/gama0; % 求自相关系数
f(1,1)=rho(1);
for k = 2:L
s1 = rho(k);s2=1; % 计算初始值
for j = 1:k-1
s1 = s1-rho(k-j)*f(k-1,j);
s2 = s2-rho(j)*f(k-1,j);
f(k,k)=s1/s2;
end
for j = 1:k-1
f(k,j) = f(k-1,j)-f(k,k)*f(k-1,k-j);
end
end
pcorr=diag(f)'; %提取偏相关函数
pcorr2=parcorr(x); %直接利用MATLAB工具箱计算偏相关函数
disp([pcorr(1),pcorr(2),pcorr(4),pcorr(4)]);
disp([pcorr2(2),pcorr2(3),pcorr2(4),pcorr2(5)]) % 利用公式和利用MATLAB工具箱计算的偏相关值基本一致
% 0.5430 0.1911 0.0057 0.0057
% 0.5431 0.1913 0.0694 0.0056
5 ARMA模型时间序列的建模与预报
步骤:
第一:首先进行模型的识别与定价,即要判断是AR(p),MA(q),还是ARMA(p,q)模型的类别,并估计阶数p和q。其实这都是归结到模型的定阶问题。
第二:当定阶后,就要对模型参数进行估计。
第三:定阶与参数估计完成后,还有对模型进行检验,即要检验残差是否为平稳白噪声。若检验获得通过,则ARMA模型建模完成。
第四:作为时间序列建模后的一个重要应用,还要讨论ARMA模型的时间序列的预报。
6 MATLAB中的GARCH工具箱可以实现时间序列建模的功能。工具箱中的模型ARMAX(R,M,Nx)为ARMA模型函数。下面通过一些实例来进行建模的演示。
7 MATLAB中arima模型和arimax模型的区别
一元时间序列模型:arma和arima,具有差分和不差分的区别
多元时间序列模型:arimax,时间序列一维以上的不同时间序列,在先生生活中预测往往受很多因素的影响。
7.1 arima模型的参数说明:
7.1.1 如果差分为0的话就是arma模型。
7.1.2 创建
模式1:Md1 = arima % 创建一个0级别的ARIMA模型,也就是arima(0,0,0)
模式2:Md1 = arima(p,D,q) % 创建一个非季节性的线性时间序列模型,其中p为AR模型的阶数,D为几阶差分,q为MA模型的阶数
模式3:Md1 = arima(Name,Value) % 创建一个线性时间序列模型,采用增加额外选项、值的方式。Name是可选项,Value为选项的值。Name必须用(' ')这种内部引用方式。对应的格式可以是Name1,Value,Name2,Value2.....
7.1.3 创建方法:
方法一:如果直接输入采用模式2的形式Md1 = arima(p,D,q)的方式;Md1 = arima(1,1,1) % 表示一阶差分的AR1,MA1模型。但是这个模型没有任何的参数。是属于首先建立整个模型的结构框架的形式:
因此:输出的也是一个对象引用的内容:
Md1 =
ARIMA(1,1,1) Model:
--------------------
Distribution: Name = 'Gaussian'
P: 2
D: 1
Q: 1
Constant: NaN
AR: {NaN} at Lags [1]
SAR: {}
MA: {NaN} at Lags [1]
SMA: {}
Variance: NaN
方法二:对应Name-Value的变量输入方式。其实这些Name和Value的键和值也是这个对象里面的内容。因此这里把所有的键和值列出来。进行解释一下。
键:'AR'
解释:非季节自回归的参数。默认为空NaNs
键:'ARLags'
解释:与AR系数相关的正整数滞后向量。默认为1,2
键:'Beta'
解释:与AR系数相关的正整数滞后向量。默认[ ];非回归系数回归内容
键:'Constant'
解释:线性时间序列中的标量常数,也就是常数项。默认NaN;
键:'D'
解释:非负整数表示的非季节性差分滞后算子多项式的次数(非季节性的一体化程度)在线性时间序列。默认0;
键:'Distribution'
解释:创新过程的条件概率分布。分布是“高斯”或“T”。或者,将其指定为具有字段名称的数据结构,以存储分布“高斯”或“T”。如果分布是“t”,则结构也需要字段自由度来存储自由度。默认高斯分布;
键:'MA'
解释:非季节性移动平均系数对应于可逆多项式细胞载体。当未指定malags,马是一种细胞载体的系数在滞后1,…对非季节性移动平均多项式的次数。当指定的MALags,马是一个相当长的细胞载体与MALags的滞后相关系数。默认NaN;
键:'MALags'
解释:与MA系数相关的正整数滞后向量。默认0;
键:'SAR'
解释:季节AR模型。
键:'SARLags'
解释:。
键:'SMA'
解释:。
键:'SMALags'
解释:。
键:'Seasonality'
解释:
线性时间序列模型中季节性差分滞后算子多项式的非负整数。默认为0;
键:'Variance'
解释:模型创新的正标量方差,或支持的条件方差模型对象(例如,GARCH模型对象)。
7.1.4 建模举例:
比如有这么一个模型ARIMA(2,1,1)
表达式如下:
对应的MATLAB建模公式如下:
tdist = struct('Name','t','DoF',10);
model = arima('Constant',0.4,'AR',{0.8,-0.3},'MA',0.5,'D',1,'Distribution',tdist,'Variance',0.15)
对应对象里面的内容如下:
model = ARIMA(2,1,1) Model:
--------------------
Distribution: Name = 't', DoF = 10
P: 3
D: 1
Q: 1
Constant: 0.4
AR: {0.8 -0.3} at Lags [1 2]
SAR: {}
MA: {0.5} at Lags [1]
SMA: {}
Variance: 0.15
解释:Constant:对应的是常数项:0.4
AR:对应的是AR模型的滞后项的参数:0.8 -0.3
MA:对应的是MA模型的参数:0.5
D:为一阶差分形式
Distribution:tdist,如果加上分布,这里用一个结构体来说明,这里指的是t分布,有10个自由度。也可以不加这个分布,默认为高斯分布。
Variance:指的是常数项的方差是0.5,在有些教材中一般都是在公式下面打一个小括号,对应每一个参数的表示方差(0.5)
8 其他相关配套函数
estimate | Estimate ARIMA or ARIMAX model parameters |
filter | Filter disturbances using ARIMA or ARIMAX model |
forecast | Forecast ARIMA or ARIMAX process |
impulse | Impulse response function |
infer | Infer ARIMA or ARIMAX model residuals or conditional variances |
Display parameter estimation results for ARIMA or ARIMAX models | |
simulate | Monte Carlo simulation of ARIMA or ARIMAX models |
.
.
..................................
量化投资_MATLAB在时间序列建模预测及程序代码的更多相关文章
- 推荐学习《Python与量化投资从基础到实战》PDF及代码+《量化投资以Python为工具》PDF及代码
利用python分析量化投资问题是现在研究的热点,推荐两份资料用于学习 <Python与量化投资:从基础到实战>主要讲解如何利用Python进行量化投资,包括对数据的获取.整理.分析挖掘. ...
- python书籍推荐:量化投资:以Python为工具
所属网站分类: 资源下载 > python电子书 作者:mimi 链接:http://www.pythonheidong.com/blog/article/451/ 来源:python黑洞网 内 ...
- Python金融应用编程(数据分析、定价与量化投资)
近年来,金融领域的量化分析越来越受到理论界与实务界的重视,量化分析的技术也取得了较大的进展,成为备受关注的一个热点领域.所谓金融量化,就是将金融分析理论与计算机编程技术相结合,更为有效的利用现代计算技 ...
- 三分钟玩转微软AI量化投资开源库QLib
更多精彩内容,欢迎关注公众号:数量技术宅,也可添加技术宅个人微信号:sljsz01,与我交流. 微软QLib简介 微软亚洲研究院发布了 AI 量化投资开源平台"微矿 Qlib".Q ...
- 《量化投资:以MATLAB为工具》连载(2)基础篇-N分钟学会MATLAB(中)
http://www.matlabsky.com/thread-43937-1-1.html <量化投资:以MATLAB为工具>连载(3)基础篇-N分钟学会MATLAB(下) ...
- 1、量化投资—为什么选择Python?
Python在量化领域的现状 就跟Java在web领域无可撼动的地位一样,Python也已经在金融量化投资领域占据了重要位置,从各个业务链条都能找到相应的框架实现. 在量化投资(证券和比特币)开源项目 ...
- 量化投资学习笔记07——python知识补漏
看<量化投资:以python为工具>这本书,第一部分是python的基础知识.这一部分略读了,只看我还不知道或不熟的. 定义复数 x = complex(2, 5) #2+5j 也可以直接 ...
- 《量化投资:以MATLAB为工具》连载(1)基础篇-N分钟学会MATLAB(上)
http://blog.sina.com.cn/s/blog_4cf8aad30102uylf.html <量化投资:以MATLAB为工具>连载(1)基础篇-N分钟学会MATLAB(上) ...
- 【原创】基于SVM作短期时间序列的预测
[面试思路拓展] 对时间序列进行预测的方法有很多, 但如果只有几周的数据,而没有很多线性的趋势.各种实际的背景该如何去预测时间序列? 或许可以尝试下利用SVM去预测时间序列,那么如何提取预测的特征呢? ...
随机推荐
- Nginx系列p2:重载,热部署,日志分割
今天我们来学习 nginx 的 重载.热部署.日志分割功能 重载:当我们需要修改配置文件中的一些值,我们可以直接修改该配置文件,然后重新启动 nginx 服务,就可以实现在 nginx 不停止服务的情 ...
- 读书笔记 - js高级程序设计 - 第五章 引用类型
引用类型 和 类 不是一个概念 用typeof来检测属性是否存在 typeof args.name == "string" 需要实验 访问属性的方法 .号和[] 一般情况下要 ...
- SpringCloud学习之Stream消息驱动【自定义通道】(十一)
如果不清楚本篇内容的,请务必先去看完上一篇再看本篇,否则阅读起来可能会有部分障碍和困难: 上一篇文章<SpringCloud学习之Stream消息驱动[默认通道](十)>我们简单用自定义通 ...
- 关于typedef的一些小知识
//关于typedef //1.在c语言中定义一个结构体typedef struct student{ int a;}stu;//typedef 给结构体起了个别名 stu;//于是,在声明变量的时候 ...
- 2.3 使用Android Studio 简单设计UI界面
首先 创建一个新的项目找到app 文件目录下的layout的 activity_main.xml 因为Android Studio 是可视化的,所有操作都可以在图形界面进行. 该res 界面当中 d ...
- PAT Advanced 1066 Root of AVL Tree (25) [平衡⼆叉树(AVL树)]
题目 An AVL tree is a self-balancing binary search tree. In an AVL tree, the heights of the two child ...
- 浅copy
person=['aaa',['a',bbb'] p1=copy.copy(person) p2=person[:] p3=list(person) p4=person.copy() print(ty ...
- mysql数据库大规模数据读写并行时导致的锁表问题
问题介绍 最近在给学校做的一个项目中,有一个功能涉及到考核分数问题. 我当时一想,这个问题并不是很难,于是就直接采用了这样的方法:拿着一个表中的数据作为索引,去挨个遍历相关表中的数据,最后经过算分的过 ...
- CentOS8上用Docker部署开源项目Tcloud
一.安装Docker 1.我是虚拟机装的Centos7,linux 3.10 内核,docker官方说至少3.8以上,建议3.10以上(ubuntu下要linux内核3.8以上) root账户登录,查 ...
- 京东云数据库RDS SQL Server高可用概述
数据库的高可用是指在硬件.软件故障发生时,可以将业务从发生故障的数据库节点迁移至备用节点.本文主要讲述SQL Server高可用方案,以及京东云RDS数据库的高可用实现. 一.高可用解决方案总览 1. ...