金融MATLAB-第3章

上传人:豆** 文档编号:240726718 上传时间:2024-05-03 格式:PPT 页数:39 大小:1.98MB
返回 下载 相关 举报
金融MATLAB-第3章_第1页
第1页 / 共39页
金融MATLAB-第3章_第2页
第2页 / 共39页
金融MATLAB-第3章_第3页
第3页 / 共39页
点击查看更多>>
资源描述
金融金融MATLAB-MATLAB-第第3 3章章Excel是一款非常优秀的通用表格软件,在学习、工作与科研中大量的数据可能都是以excel表格的方式存储的。Excel在矩阵计算、数据拟合与优化算法等方面的功能尚不足,Excel与Matlab相结合是处理复杂数据问题的有效方法。如何利用matlab强大的数值计算功能处理excel中的数据,首要解决的问题就是如何将excel中的数据导入到matlab中或将matlab数值计算的结果转存入excel中。本章主要介绍以函数方式与exlink宏的两种方法实现matlab与excel的数据交互。2024/5/322.1 获取文件信息xlsfinfo函数xlsinfo函数语法:typ,desc,fmt=xlsfinfo(filename)输入参数:filename:目标文件地址输出参数:typ:目标文件类型desc:目标文件内部表名称(sheetname)fmt:支持目标文件的软件版本2024/5/33typ,desc,fmt=xlsfinfo(excel.xls)结果输出:typ=Microsoft Excel Spreadsheet%文件类别为excel文件desc=Sheet1Sheet2Sheet3%文件中数据表为Sheet1Sheet2Sheet3fmt=xlExcel8%文件版本为xlExcel8版本对应的为excel 972003版本2024/5/34xlsread函数语法:1.data,textdate=xlsread(filename)输入参数:filename:目标文件地址输出参数:data:数值数据textdate:文字数据2024/5/35%调用xlsread函数data,textdate=xlsread(excel.xls)%textdate的第一列为日期文本,第一行为列名称。Hs300Date=textdate(2:14,1)结果输出:data=1.0e+003*1.00000.99400.98280.41800.99260.17400.96750.18300.97470.97300.96720.3140textdate=datepriceVol2005-1-42005-1-52005-1-192005-1-202024/5/36xlsread函数语法:2.data=xlsread(filename,sheet,range)输入参数:filename:目标文件地址sheet:数据表名称,例如excel默认表名称sheet1。range:数据所在位置,例如A1,B13等输出参数:data:数值数据2024/5/37%数据位置为excel.xls文件表1位置为B3:B14的列数据Hs300Price=xlsread(excel.xls,1,B3:B14)Hs300Vol=xlsread(excel.xls,1,C3:C14)结果输出:Hs300Price=982.7900 992.5600 967.4500 974.6900 967.2100Hs300Vol=418 994 740 183 973 3142024/5/38xlswrite函数语法:status,message=xlswrite(filename,M,sheet,range)输入参数:filename:目标文件地址M:写入excel中的数据,M存储数据的变量名称;Sheet:写入excel中的sheet名称(若空默认sheet1);Range:写入excel中的单元格区域(若空默认 A1);输出参数:status:写入状态。“1”表示写入成功“0”表示写入失败message:若失败,则显现失败信息2024/5/39%生成随机数据X=randn(1,10);%将X随机数据写入excel文件,表“sheet2”中status,message=xlswrite(excel.xls,X,sheet2)结果输出status=1%表示写入成功message=message:identifier:2024/5/310如果写入的是字符,使用aa与aa的效果完全不同,aa得到的结果是excel两个单元格都是a,aa得到的结果是excel一个单元格是aa。status1,message1=xlswrite(funddata0.xls,aa,sheet1)status2,message2=xlswrite(funddata0.xls,aa,sheet2)2024/5/311uiimport函数的语法1.uiimport 在命令窗口输入uiimport命令,出现文件选择窗口;2uiimport(filename)表示打开数据文件filename;3uiimport(-file)表示在当前文件夹内选择数据文件;4uiimport(-pastespecial)表示打开当前剪贴板中的数据;5s=uiimport(.)表示将数据文件按结构存储在s中2024/5/3122024/5/313如果excel文件数据量太大(1GB)以上,使用函数进行数据交互存在一定问题,例如Java内存溢出等等。数据量较大的时候可以使用Excel-Link宏进行数据交互。Matlab提供使其能与excel互动操作的Excel-link宏。Excel-link使得数据在matlab与excel之间随意交换,以及在excel下调用matlab的函数。Excel-link将matlab的强大的数值计算功能、数据可视化功能与excel的数据Sheet功能结合在一起。2024/5/314加载方法:在excel工具-加载宏-浏览(matlab的安装路径)-toolbox文件夹-exlink文件夹 -excllink.xla文件(双击打开)回到加载宏界面:在Excel link2.3 for use with matlab选项上打勾,点击确定。若excel的左上方出现startmatlab、putmatrix、getmatrix、evalstring等选项,说明excel-link加载成功。2024/5/315startmatlab:点击启动matlabputmatrix:将Excel的数据传输到matlab中 在matlab中:可看到传入到matlab中的矩阵x,计算y=sin(x)getmatrix:将matlab的数据传输到excel中2024/5/316加载方法:点击excel的office按钮-点击excel选项-在加载项中点击转到 浏览(matlab的安装路径)-toolbox文件夹-exlink文件夹-excllink.xla文件(打开)使用方法:在excel2007加载项下可以发现exlink相关的按钮,具体使用方法与exlink在excel2003中的使用方法一样。2024/5/3174.1基金相关性的计算例:funddata.xls中存储着沪深300指数的价格与博时主题行业、嘉实沪深300、南方绩优成长的复权数据,要求计算出每只基金的与沪深300指数的相关性。注:基金的收益率、波动率的计算应该采用基金的复权净值(即分红再投资净值)。由于基金存在分红,即分红前后基金净值存在较大差距,将对基金收益率与波动率计算造成影响,所以要使用复权净值进行计算。2024/5/318M程序如下:typ,desc,fmt=xlsfinfo(funddata.xls)%文件信息data,textdate=xlsread(funddata.xls);%读取数据R=corrcoef(data)%计算相关性status,message=xlswrite(funddata.xls,R,sheet2,B2:E5)%写入到excel数据textdate=textdate(2,2:5)%行名称与列名称status,message=xlswrite(funddata.xls,textdate,sheet2,B1:E1)status,message=xlswrite(funddata.xls,textdate,sheet2,A2:A5)%textdate表示转置即将行变为列2024/5/319运行结果:R=1.00000.90390.99880.9658 0.90391.00000.88620.9730 0.99880.88621.00000.9548 0.96580.97300.95481.0000textdate=沪深300博时主题行业嘉实沪深300南方绩优成长2024/5/320在实际的项目编程中,很多时候遇到从很多文件中读取数据,若逐个文件进行手工操作不仅身心疲惫,而且容易出错。例如,指数成分股与权重数据每天一个Excel,文件名为:000016weightnextday20100104.xls、000016weightnextday20110630.xls,000016weightnextday20120104.xls等,程序化读取的关键是将文件名自动化。2024/5/321DataNum=9;%要读取文件数量Data.Code=zeros(50,DataNum);%定义变量并分配内存Data.ClosePrice=zeros(50,DataNum);Data.CFMValue=zeros(50,DataNum);Data.Weight=zeros(50,DataNum);fileName=000016weightnextday;%文件名固定部分fileDate=20100104 20100630 20100701 20101231 20110104 201106302011070120111230 20120104;%文件名变化部分,若变化部分由规律可以自动生成。for i=1:DataNumTfileName=fileName,num2str(fileDate(i),.xls;%组合文件名,i不同文件名称不同%读取文件中所需的数据Data.Code(:,i)=xlsread(TfileName,Index Constituents Data,E2:E51);Data.ClosePrice(:,i)=xlsread(TfileName,Index Constituents Data,M2:M51);Data.CFMValue(:,i)=xlsread(TfileName,Index Constituents Data,P2:P51);Data.Weight(:,i)=xlsread(TfileName,Index Constituents Data,Q2:Q51);end2024/5/322在对时间序列数据(如信号数据或股票价格数据)进行统计分析时,或许存在数据的缺失或奇异(例如ST股票反复的停牌),往往需要对数据进行平滑处理。本节介绍基于MATLAB的数据平滑方法,主要介绍smooth函数、smoothts函数和medfilt1函数的用法。2024/5/323MATLAB曲线拟合工具箱中提供了smooth函数,用来对数据进行平滑处理,其调用方式如下:yy=smooth(y)yy=smooth(y,span)yy=smooth(y,method)yy=smooth(y,span,method)yy=smooth(y,sgolay,degree)yy=smooth(y,span,sgolay,degree)yy=smooth(x,y,)2024/5/3241yy=smooth(y)利用移动平均滤波器对列向量y进行平滑处理,返回与y等长的列向量yy.移动平均滤波器的默认窗宽为5,yy中元素的计算方法如下:yy(1)=y(1)yy(2)=(y(1)+y(2)+y(3)/3yy(3)=(y(1)+y(2)+y(3)+y(4)+y(5)/5yy(4)=(y(2)+y(3)+y(4)+y(5)+y(6)/5yy(5)=(y(3)+y(4)+y(5)+y(6)+y(7)/52024/5/3252yy=smooth(y,span)用span参数指定移动平均滤波器的窗宽,span为奇数。3yy=smooth(y,method)用method参数指定平滑数据的方法,method是字符串变量,可用的字符串如表所示。2024/5/3264yy=smooth(y,span,method)对于由method参数指定的平滑方法,用span参数指定滤波器的窗宽。5yy=smooth(y,sgolay,degree)利用Savitzky-Golay方法平滑数据,此时用degree参数指定多项式模型的阶数。degree是一个整数,取值介于0和span-1之间。6yy=smooth(y,span,sgolay,degree)用span参数指定Savitzky-Golay滤波器的窗宽。span必须是一个正的奇数。7yy=smooth(x,y,)同时指定x数据。2024/5/327例如:产生一列正弦波信号,加入噪声信号,然后调用smooth函数对加入噪声的正弦波进行滤波(平滑处理)。代码如下:t=linspace(0,2*pi,500);%产生一个从0到2*pi的向量,长度为500y=100*sin(t);%产生正弦波信号%产生500行1列的服从N(0,152)分布的随机数,作为噪声信号noise=normrnd(0,15,500,1);y=y+noise;%将正弦波信号加入噪声信号figure;%新建一个图形窗口plot(t,y);%绘制加噪波形图xlabel(t);%为X轴加标签ylabel(y=sin(t)+噪声);%为Y轴加标签2024/5/328yy1=smooth(y,30);%利用移动平均法对y进行平滑处理figure;%新建一个图形窗口plot(t,y,k:);%绘制加噪波形图hold on;plot(t,yy1,k,linewidth,3);%绘制平滑后波形图xlabel(t);ylabel(moving);legend(加噪波形,平滑后波形);yy5=smooth(y,30,sgolay,3);%利用sgolay方法对y进行平滑处理figure;%新建一个图形窗口plot(t,y,k:);%绘制加噪波形图hold on;plot(t,yy5,k,linewidth,3);%绘制平滑后波形图xlabel(t);ylabel(sgolay);legend(加噪波形,平滑后波形);2024/5/3292024/5/330MATLAB金融工具箱中提供了smoothts函数,也可用来对数据进行平滑处理,其调用方式如下:output=smoothts(input)output=smoothts(input,b,wsize)output=smoothts(input,g,wsize,stdev)output=smoothts(input,e,n)smoothts函数的输入参数input是一个金融时间序列对象或行导向矩阵。以上调用方式中的b,g,或e表示不同的数据平滑方法,其中b表示盒子法(Box method,默认情况),g表示高斯窗方法(Gaussian window method),e表示指数法(Exponential method)2024/5/331例如:现有上海股市日开盘价、最高价、最低价、收盘价、收益率等数据,时间跨度为2005年1月4日至2007年4月3日,共510组数据。完整数据保存在文件StockPriceData.xls中,其中部分数据如图所示。试调用smoothts函数对日收盘价数据进行平滑处理。具体代码见m_3_5_2.m2024/5/3322024/5/333MATLAB信号处理工具箱中提供了medfilt1函数,用来对信号数据进行一维中值滤波,其调用方式如下:y=medfilt1(x,n)%对向量x进行一维中值滤波,返回与x等长的向量y。y=medfilt1(x,n,blksz)%用for循环,每次循环输出blksz个计算值,默认情况下,blksz=length(x)y=medfilt1(x,n,blksz,dim)%用dim参数指定沿x的哪个维进行滤波。2024/5/334例如:产生一列正弦波信号,加入噪声信号,然后调用medfilt1函数对加入噪声的正弦波进行滤波(平滑处理)。代码见m3_5_3.m2024/5/3351变换公式设p维向量X=(X1,X2,Xp)的观测值矩阵为标准化变换后的观测值矩阵为其中这里 为变量Xj的观测值的平均值,sjj为变量Xj的观测值的方差,为标准差。经过标准化变换后,矩阵 的各列的均值均为0,标准差均为1.2024/5/3362 zscore函数 MATLAB统计工具箱中提供了zscore函数,用来作数据的标准化变换,其调用方式如下:Z=zscore(X)%X可以是一个向量、矩阵或高维数组。若X是一个向量,返回变换后结果向量Z=(Xmean(X)/std(X);若X是一个矩阵,则用X的每一列的均值和标准差对该列进行标准化变换,返回变换后矩阵Z。Z,mu,sigma=zscore(X)%还返回X的均值mu=mean(X)和标准差sigma=std(X).=zscore(X,1)=zscore(X,flag,dim)2024/5/337例如:调用rand函数产生一个随机矩阵,然后调用zscore函数将其按列标准化。%调用rand函数产生一个10行,4列的随机矩阵,每列服从不同的均匀分布x=rand(10,1),5*rand(10,1),10*rand(10,1),500*rand(10,1)%调用zscore函数对x进行标准化变换(按列标准化),%返回变换后矩阵xz,以及矩阵x各列的均值构成的向量mu,各列的标准差构成的向量sigmaxz,mu,sigma=zscore(x)mean(xz)%求标准化后矩阵xz的各列的均值std(xz)%求标准化后矩阵xz的各列的标准差2024/5/338
展开阅读全文
相关资源
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!