Matlab金融计算讲义
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
专题十一: MATLAB 金融计算
目 录
1 金融时间序列分析 2 固定收益证券计算 3 资产组合计算 4 金融衍生品计算 5 有限差分法定价 6 蒙特卡罗模拟 7 金融数据可视化技术
第1章 金融时间序列分析
1.1 时间序列变量的创立 1.2 金融时间序列的统计特征 1.3 时间序列模型的估计
1.4 GARCH模型的参数估计 1.5 金融时间序列GUI
ret2price
转换为价格
a=ret2price(ret, StartPrice)
(3)缺失数据的处理 利用插值法补全数据。 命令:newfts=fillts(oldfts,method) oldfts:原始数据 method:处理方法。 ‘linear’:线性插值法 ‘cubic’:3次插值法 ‘spline’:样条插值法 ‘nearest’:最近法 ‘pchip’:逐段光滑的3次hemite多项式法
2013.1.4-2013.5.21青 岛 啤 酒 的 日 收 盘 价 39 38 37
收盘价
36
35
34
33
32
2013/01
2013/02
2013/03 日期
2013/04
2013/05
(3)fetch函数 从网络获取股票数据(Yahoo、Bloomberg) c=yahoo;%从雅虎获取数据 x=fetch(c,'security_name','fields','fromedate', 'todate','period'); security:证券的名字(代号) fields可取close,high,volume period可取d,w,m,v,分别表示日、周、月、 红利
例1-4 从雅虎获取宝钢股份2013.1.4至 2013.5.21的日收盘价,并绘图。 文件:fts_ex04.m 结果:
2013.1.4-2013.5.21宝 钢 股 份 的 日 收 盘 价 5.2 5.15 5.1 5.05 5
收盘价
4.95 4.9 4.85 4.8 4.75 4.7
2013/01
例1-5 给出青岛啤酒2012年5月2日至2013 年5月21日的日收盘价收益率,用2阶 的AR模型进行估计。 文件:fts_ex05.m 结论:偏相关系数都落在置信区 间内, AR模型不适合描述其收益率。
(2)ARMAX模型的估计 命令:sys = armax(data,[na nb nc nk]) sys = armax(data,[na nb nc nk],Name,Value) data:数据 [na nb nc nk]:滞后阶数 ARMAX模型的格式:
(2)数据类型转换
函数 fts2ascii fts2mat extfield price2ret 用途 保存为文本文件 转换为矩阵数据 抽取列数据 转换为收益率 格式 a=fts2ascii(name,tsobj) a=fts2mat(tsobj,datesflag) a=extfield(tsobj,name) a=price2ret(price)
1.4.3模拟生成GARCH(P,Q)数据 命令:y=garchsim(spec,num)
例1-9 模拟生成出例8中GARCH(1,1)模型的10个样本 值。 命令: spec = garchset(‘c’,0,’k’,0.0001,’garch’,0.9,’arch’,0.05) y=garch(spec,10)
autocorr
自相关系数
[a,b]=autocorr(x)
1.2.3 假设检验
(1)单个样本均值的t检验 命令: [h,p,ci,stats]=ttest(X,m,alpha,tail) 输入参数: X:样本 m:理论值 alpha:显著性水平 tail:检验方式,tail=0表示双尾检验,tail=1表示右尾检 验(h0:ux<=m),tail=-1表示左尾检验(h0:ux>=m) ci:1-alpha的置信区间 stats:结构型变量,给出了t统计量,t统计量的自由度, 样本的标准差;
(2)两个样本均值的t检验 [h,p,ci,stats]=ttest2(X,Y,alpha,tail,vartpye) 输入参数: vartpye:equal表示两个样本的方差相等, unequal表示方差不等。 (3)单个样本卡方检验 [h,p,ci,stats]=vartest(X,V,alpha,tail) 输入参数: V:方差的理论值 (4)两个样本的F检验 [h,p,ci,stats]=vartest2(X,Y,alpha,tail)
2013/02
2013/03
2013/04
2013/05
1.1.3数据的简单处理
(1)日期运算
函数 now today datestr datenum day weekday month daysact 现在时刻 现在日期 数字日期转换为字符串日期 字符串日期转换为数字日期 确定每月的第几天 查询星期 查询月份 计算日期间隔 用途 a=now a=today a=datestr(num) a=datenum(str) a=day(date) [num,str]=weekday(date) [num,str]=month(date) a=dayscat(date1,date2) 格式
(2)xlsread函数 读取excel中的数据。 [data,txt] = xlsread(‘filename.xlsx','Sheet1'); data:读取的数据 txt:读取的文本,包括日期。
例1-3 读取文件名为fts_ex03.xlsx内的数据。 [data,txt] = xlsread('fts_ex03.xlsx','Sheet1'); 结果:
1.4 GARCH模型
1.4.1 广义自回归条件异方差(GARCH)模型
1.4.2 GARCH模型的参数设定 命令: Spec = garchset(param1,val1,param2,val2,...) 例1-8
生成GARCH模型可识别的参数 命令: spec = garchset(‘c’,0,’k’,0.0001,’garch’,0.9,’arch’,0.05)
百度文库
1.2 金融时间序列的统计分析
1.2.1平稳性检验 (1)ADF检验 原假设h0:时间序列为单位根过程 [h,pValue,stat,cValue,reg]=adftest(y,'Para_Name',Para_Value,...) 输入参数: y:时间序列变量; Para_Name:参数名字,包括:'alpha','lags','model','test' model包括AR,ARD,TS,test包括t1,t2,F h=0不能拒绝时间序列为单位根过程的假设,h=1拒绝 pValue:p值,若pValue<alpha,拒绝时间序列为单位根过程 的原假设 cValue:统计量拒绝原假设的临界值 reg:结构型变量,包括有效样本容量,回归系数等
1.1.2 时间序列数据的读取
(1)ascii2fts函数 读取后缀为txt、dat文件的数据。 tsobj = ascii2fts(filename, timedata, descrow, colheadrow,skiprows) filename:文件名 timedata:判断是不是按天记录的数据,是则输 入‘t’,否则为‘nt’。可缺省。 descrow:确定文件中文字说明的行数 colheadrow:变量名所在的行数 skiprows:不需要读入的列
其中:
如果只取na nc,则模型变为ARMA模型 如果只取na,则模型变为AR模型 如果只取nc,则模型变为MA模型 如果只取na,nb,nk,则模型变为ARX模型 即: AR模型:armax(data,’na’,na) ARX模型:armax(data,’na’,na,’nb’,nb,’nk’,nk) MA模型:armax(data,’nc’,nc) ARMA模型:armax(data,’na’,na,’nc’,nc)
MATLAB中时间序列的模型如下:
其中:A(Q),B(Q),C(Q),D(Q),F(Q)都是含有延迟 算子的多项式。
1.3.2时间序列模型估计
(1)AR模型的估计 命令:m = ar(y,n) [m,ref1]= ar(y,n,approach,window) y:观察值 n:模型的阶数 approach:计算模型参数的方法 ‘fb’:Forward-Backward方法 ’ls’:最小二乘 ’yw ’:Yule-Walker方法 ’burg’:Burg’s Lattic-Based方法 ’gl’:Geomatic Lattic方法 window:处理缺失值的方法 ‘now’:没有缺失值 ‘yw’:Yule-Walker方法处理缺失值
例1-6 利用例5中的数据,用MA模型 进行估计。 文件:fts_ex06.m
例1-7 利用青岛啤酒和沪深300指数2012年5月2 日至2013年5月21日的日收盘价收益率,用 ARMAX模型进行估计。 文件:fts_ex07.m
(3)广义线性模型PEM 调用方式: sys=pem(data,’na’,na,’nb’,nb,’nc’,nc,’nd’, nd,’nf ’,nf,’nk’,nk) (4)Box-Jenkins模型 调用方式: sys=bj(data,’nb’,nb,’nc’,nc,’nd’,nd,’nf ’,nf,’nk’,nk)
特定日期抽取函数
函数 todaily toweekly tomonthly toquarterly tosemi toannual 用途 从时间序列中抽取日数据 从时间序列中抽取周末数据 从时间序列中抽取月末数据 从时间序列中抽取季度末数据 从时间序列中抽取半年度末数据 从时间序列中抽取年度末数据 格式 a=todaily(fints_data) a=toweekly(fints_data) a=tomonthly(fints_data) a=toquarterly(fints_data) a=tosemi(fints_data) a=toannual(fints_data)
(2)Phillips-Perron检验 调用方式: [h,pValue,stat,cValue,reg]=pptest(y,'Para_Name', Para_Value,...) 输入参数同上
1.2.2 相关性
函数
corrcoef parcorr
名称
相关系数 偏相关系数
格式
r=corrcoef(x,y) [a,b]=parcorr(series)
1.3时间序列模型的估计
1.3.1时间序列模型介绍 (1)自回归(AR)模型 如果时间序列是它前期值与随机项的线性 函数,即 引入滞后算子Q,并记AR(Q)为: 模型可以写为:
(2)移动平均(MA)模型 如果时间序列是随机项的线性组合,即
引入滞后算子Q,并记MA(Q)为: 模型可以表示为:
(3)自回归移动平均模型(ARMA) 如果时间序列是随机项的线性组合和前期 的线性函数,即 引入滞后算子Q,模型可以表示为:
1.1 时间序列变量的创立
1.1.1 fints函数创立时间变量序列 Matlab中有专门的时间序列格式来保存时间 序列数据。命令为fints(dates, data)。第一列为时 间,其他列为相应的数据。 例1-1 文件:fts_ex01.m 程序:dates=[today:today+5]'; data=[1:6]'; tsobjkt = fints(dates, data)
例1-2 读取文件名为fts_ex02.txt内的数据 命令: tsobj = ascii2fts('fts_ex02.txt',1, 2) 结果: tsobj = desc: USST Company Stock freq: Unknown (0) 'dates: (6)' 'CLOSE: (6)' '06-Jun-2013' [ 1] '07-Jun-2013' [ 2] '08-Jun-2013' [ 3] '09-Jun-2013' [ 4] '10-Jun-2013' [ 5] '11-Jun-2013' [ 6]
目 录
1 金融时间序列分析 2 固定收益证券计算 3 资产组合计算 4 金融衍生品计算 5 有限差分法定价 6 蒙特卡罗模拟 7 金融数据可视化技术
第1章 金融时间序列分析
1.1 时间序列变量的创立 1.2 金融时间序列的统计特征 1.3 时间序列模型的估计
1.4 GARCH模型的参数估计 1.5 金融时间序列GUI
ret2price
转换为价格
a=ret2price(ret, StartPrice)
(3)缺失数据的处理 利用插值法补全数据。 命令:newfts=fillts(oldfts,method) oldfts:原始数据 method:处理方法。 ‘linear’:线性插值法 ‘cubic’:3次插值法 ‘spline’:样条插值法 ‘nearest’:最近法 ‘pchip’:逐段光滑的3次hemite多项式法
2013.1.4-2013.5.21青 岛 啤 酒 的 日 收 盘 价 39 38 37
收盘价
36
35
34
33
32
2013/01
2013/02
2013/03 日期
2013/04
2013/05
(3)fetch函数 从网络获取股票数据(Yahoo、Bloomberg) c=yahoo;%从雅虎获取数据 x=fetch(c,'security_name','fields','fromedate', 'todate','period'); security:证券的名字(代号) fields可取close,high,volume period可取d,w,m,v,分别表示日、周、月、 红利
例1-4 从雅虎获取宝钢股份2013.1.4至 2013.5.21的日收盘价,并绘图。 文件:fts_ex04.m 结果:
2013.1.4-2013.5.21宝 钢 股 份 的 日 收 盘 价 5.2 5.15 5.1 5.05 5
收盘价
4.95 4.9 4.85 4.8 4.75 4.7
2013/01
例1-5 给出青岛啤酒2012年5月2日至2013 年5月21日的日收盘价收益率,用2阶 的AR模型进行估计。 文件:fts_ex05.m 结论:偏相关系数都落在置信区 间内, AR模型不适合描述其收益率。
(2)ARMAX模型的估计 命令:sys = armax(data,[na nb nc nk]) sys = armax(data,[na nb nc nk],Name,Value) data:数据 [na nb nc nk]:滞后阶数 ARMAX模型的格式:
(2)数据类型转换
函数 fts2ascii fts2mat extfield price2ret 用途 保存为文本文件 转换为矩阵数据 抽取列数据 转换为收益率 格式 a=fts2ascii(name,tsobj) a=fts2mat(tsobj,datesflag) a=extfield(tsobj,name) a=price2ret(price)
1.4.3模拟生成GARCH(P,Q)数据 命令:y=garchsim(spec,num)
例1-9 模拟生成出例8中GARCH(1,1)模型的10个样本 值。 命令: spec = garchset(‘c’,0,’k’,0.0001,’garch’,0.9,’arch’,0.05) y=garch(spec,10)
autocorr
自相关系数
[a,b]=autocorr(x)
1.2.3 假设检验
(1)单个样本均值的t检验 命令: [h,p,ci,stats]=ttest(X,m,alpha,tail) 输入参数: X:样本 m:理论值 alpha:显著性水平 tail:检验方式,tail=0表示双尾检验,tail=1表示右尾检 验(h0:ux<=m),tail=-1表示左尾检验(h0:ux>=m) ci:1-alpha的置信区间 stats:结构型变量,给出了t统计量,t统计量的自由度, 样本的标准差;
(2)两个样本均值的t检验 [h,p,ci,stats]=ttest2(X,Y,alpha,tail,vartpye) 输入参数: vartpye:equal表示两个样本的方差相等, unequal表示方差不等。 (3)单个样本卡方检验 [h,p,ci,stats]=vartest(X,V,alpha,tail) 输入参数: V:方差的理论值 (4)两个样本的F检验 [h,p,ci,stats]=vartest2(X,Y,alpha,tail)
2013/02
2013/03
2013/04
2013/05
1.1.3数据的简单处理
(1)日期运算
函数 now today datestr datenum day weekday month daysact 现在时刻 现在日期 数字日期转换为字符串日期 字符串日期转换为数字日期 确定每月的第几天 查询星期 查询月份 计算日期间隔 用途 a=now a=today a=datestr(num) a=datenum(str) a=day(date) [num,str]=weekday(date) [num,str]=month(date) a=dayscat(date1,date2) 格式
(2)xlsread函数 读取excel中的数据。 [data,txt] = xlsread(‘filename.xlsx','Sheet1'); data:读取的数据 txt:读取的文本,包括日期。
例1-3 读取文件名为fts_ex03.xlsx内的数据。 [data,txt] = xlsread('fts_ex03.xlsx','Sheet1'); 结果:
1.4 GARCH模型
1.4.1 广义自回归条件异方差(GARCH)模型
1.4.2 GARCH模型的参数设定 命令: Spec = garchset(param1,val1,param2,val2,...) 例1-8
生成GARCH模型可识别的参数 命令: spec = garchset(‘c’,0,’k’,0.0001,’garch’,0.9,’arch’,0.05)
百度文库
1.2 金融时间序列的统计分析
1.2.1平稳性检验 (1)ADF检验 原假设h0:时间序列为单位根过程 [h,pValue,stat,cValue,reg]=adftest(y,'Para_Name',Para_Value,...) 输入参数: y:时间序列变量; Para_Name:参数名字,包括:'alpha','lags','model','test' model包括AR,ARD,TS,test包括t1,t2,F h=0不能拒绝时间序列为单位根过程的假设,h=1拒绝 pValue:p值,若pValue<alpha,拒绝时间序列为单位根过程 的原假设 cValue:统计量拒绝原假设的临界值 reg:结构型变量,包括有效样本容量,回归系数等
1.1.2 时间序列数据的读取
(1)ascii2fts函数 读取后缀为txt、dat文件的数据。 tsobj = ascii2fts(filename, timedata, descrow, colheadrow,skiprows) filename:文件名 timedata:判断是不是按天记录的数据,是则输 入‘t’,否则为‘nt’。可缺省。 descrow:确定文件中文字说明的行数 colheadrow:变量名所在的行数 skiprows:不需要读入的列
其中:
如果只取na nc,则模型变为ARMA模型 如果只取na,则模型变为AR模型 如果只取nc,则模型变为MA模型 如果只取na,nb,nk,则模型变为ARX模型 即: AR模型:armax(data,’na’,na) ARX模型:armax(data,’na’,na,’nb’,nb,’nk’,nk) MA模型:armax(data,’nc’,nc) ARMA模型:armax(data,’na’,na,’nc’,nc)
MATLAB中时间序列的模型如下:
其中:A(Q),B(Q),C(Q),D(Q),F(Q)都是含有延迟 算子的多项式。
1.3.2时间序列模型估计
(1)AR模型的估计 命令:m = ar(y,n) [m,ref1]= ar(y,n,approach,window) y:观察值 n:模型的阶数 approach:计算模型参数的方法 ‘fb’:Forward-Backward方法 ’ls’:最小二乘 ’yw ’:Yule-Walker方法 ’burg’:Burg’s Lattic-Based方法 ’gl’:Geomatic Lattic方法 window:处理缺失值的方法 ‘now’:没有缺失值 ‘yw’:Yule-Walker方法处理缺失值
例1-6 利用例5中的数据,用MA模型 进行估计。 文件:fts_ex06.m
例1-7 利用青岛啤酒和沪深300指数2012年5月2 日至2013年5月21日的日收盘价收益率,用 ARMAX模型进行估计。 文件:fts_ex07.m
(3)广义线性模型PEM 调用方式: sys=pem(data,’na’,na,’nb’,nb,’nc’,nc,’nd’, nd,’nf ’,nf,’nk’,nk) (4)Box-Jenkins模型 调用方式: sys=bj(data,’nb’,nb,’nc’,nc,’nd’,nd,’nf ’,nf,’nk’,nk)
特定日期抽取函数
函数 todaily toweekly tomonthly toquarterly tosemi toannual 用途 从时间序列中抽取日数据 从时间序列中抽取周末数据 从时间序列中抽取月末数据 从时间序列中抽取季度末数据 从时间序列中抽取半年度末数据 从时间序列中抽取年度末数据 格式 a=todaily(fints_data) a=toweekly(fints_data) a=tomonthly(fints_data) a=toquarterly(fints_data) a=tosemi(fints_data) a=toannual(fints_data)
(2)Phillips-Perron检验 调用方式: [h,pValue,stat,cValue,reg]=pptest(y,'Para_Name', Para_Value,...) 输入参数同上
1.2.2 相关性
函数
corrcoef parcorr
名称
相关系数 偏相关系数
格式
r=corrcoef(x,y) [a,b]=parcorr(series)
1.3时间序列模型的估计
1.3.1时间序列模型介绍 (1)自回归(AR)模型 如果时间序列是它前期值与随机项的线性 函数,即 引入滞后算子Q,并记AR(Q)为: 模型可以写为:
(2)移动平均(MA)模型 如果时间序列是随机项的线性组合,即
引入滞后算子Q,并记MA(Q)为: 模型可以表示为:
(3)自回归移动平均模型(ARMA) 如果时间序列是随机项的线性组合和前期 的线性函数,即 引入滞后算子Q,模型可以表示为:
1.1 时间序列变量的创立
1.1.1 fints函数创立时间变量序列 Matlab中有专门的时间序列格式来保存时间 序列数据。命令为fints(dates, data)。第一列为时 间,其他列为相应的数据。 例1-1 文件:fts_ex01.m 程序:dates=[today:today+5]'; data=[1:6]'; tsobjkt = fints(dates, data)
例1-2 读取文件名为fts_ex02.txt内的数据 命令: tsobj = ascii2fts('fts_ex02.txt',1, 2) 结果: tsobj = desc: USST Company Stock freq: Unknown (0) 'dates: (6)' 'CLOSE: (6)' '06-Jun-2013' [ 1] '07-Jun-2013' [ 2] '08-Jun-2013' [ 3] '09-Jun-2013' [ 4] '10-Jun-2013' [ 5] '11-Jun-2013' [ 6]