41
MATLAB 金金金金

MATLAB 金融计算. MATLAB 金融界主要用户 金融服务 银行中央银行 资产管理保险能源贸易

Embed Size (px)

Citation preview

Page 1: MATLAB 金融计算. MATLAB 金融界主要用户 金融服务 银行中央银行 资产管理保险能源贸易

MATLAB 金融计算

Page 2: MATLAB 金融计算. MATLAB 金融界主要用户 金融服务 银行中央银行 资产管理保险能源贸易

MATLAB 金融界主要用户

金融服务 银行 中央银行

资产管理 保险 能源贸易

Page 3: MATLAB 金融计算. MATLAB 金融界主要用户 金融服务 银行中央银行 资产管理保险能源贸易

金融分析与建模流程图

Page 4: MATLAB 金融计算. MATLAB 金融界主要用户 金融服务 银行中央银行 资产管理保险能源贸易

金融计算工具箱

Page 5: MATLAB 金融计算. MATLAB 金融界主要用户 金融服务 银行中央银行 资产管理保险能源贸易

创立时间序列变量时间序列数组的创立和读取• 利用 fints 函数创立日期型数组

price=[1:6]’dates=[today:today+5]’Tsobjkt=fints(dates,price)

• 金融时间序列文件读取 Tsobjkt=ascii2fts(’at.dat’)

16-Oct-2008 117-Oct-2008 218-Oct-2008 319-Oct-2008 420-Oct-2008 521-Oct-2008 6

Page 6: MATLAB 金融计算. MATLAB 金融界主要用户 金融服务 银行中央银行 资产管理保险能源贸易

时间序列数组运算• 日期运算

– 查找现在时刻nowdateste(ans)

– 查询当天日期today

– 序数型日期转化为字符串日期datestr(ans)

– 字符串日期转化为序数型日期datenum(’03-aug-

2003’)– 确定每月的第几天

Day=day(’22-Jan-2007’)

查询星期[n,s]=weekday(’22-Jan-2007’)

查询月份[n,s]=month(D)

将字符型日期以向量形式输出V=datevec(N)

计算日期间隔daysact(’27-feb-2008’,’08-aug-2008’)

时间序列数据合并newfts=merge(fts1,fts2,…,Method,RefObj)

特定日期抽取函数todaily,toweekly,tomonthly,toquarterly,tosemi,toannual

Page 7: MATLAB 金融计算. MATLAB 金融界主要用户 金融服务 银行中央银行 资产管理保险能源贸易

时间序列数组运算• 以招商银行 (600036) 为例 , 说明如何将分析家软件数

据导入到 MATLAB 中 , 然后进行相关操作 .

可从分析家网站(http://www.fxj.net.cn)

下载

步骤 1: 打开分析家软件 , 输入代码 600036, 出现招商银行股价图

Page 8: MATLAB 金融计算. MATLAB 金融界主要用户 金融服务 银行中央银行 资产管理保险能源贸易

时间序列数组运算• 步骤 2: 单击鼠标右键 , 在弹出的快捷菜单中选择“复制数

据”命令 , 弹出一个提示框

Page 9: MATLAB 金融计算. MATLAB 金融界主要用户 金融服务 银行中央银行 资产管理保险能源贸易

时间序列数组运算• 步骤 3: 打开 Excel, 将数据粘贴到 Excel 文件中

Page 10: MATLAB 金融计算. MATLAB 金融界主要用户 金融服务 银行中央银行 资产管理保险能源贸易

时间序列数组运算• 步骤 4: 由于日期型格式是 yyyy-mm-dd, 不符合 MATLAB

默认格式 , 单击“ A” 列 , 单击鼠标右键 , 选择“设置单元格格式”菜单项 , 出现对话框

Page 11: MATLAB 金融计算. MATLAB 金融界主要用户 金融服务 银行中央银行 资产管理保险能源贸易

时间序列数组运算• 步骤 5: 对日期型数据进行修改 , 选择“ 14-Mar-01” 的

格式 , 单击“确定”按钮 , 日期显示格式发生变化

Page 12: MATLAB 金融计算. MATLAB 金融界主要用户 金融服务 银行中央银行 资产管理保险能源贸易

时间序列数组运算• 步骤 6: 拖动鼠标把所要复制的内容确定下来 , 单击鼠标右键 ,

选择“复制”菜单项 , 打开 Windows 记事本 , 把复制的内容粘贴到记事本中 , 注意把汉字译成英文 , 以便 MATLAB 识别

Page 13: MATLAB 金融计算. MATLAB 金融界主要用户 金融服务 银行中央银行 资产管理保险能源贸易

时间序列数组运算

• 步骤 7: 将数据保存到 MATLAB7/work 目录下的 at.txt文件

• 步骤 8: 用 ascii2fts 函数将 at.txt 中的数据读入MATLAB 中 , 命令如下 :

– zhaohang=ascii2fts(‘at.txt’,2,2)

Page 14: MATLAB 金融计算. MATLAB 金融界主要用户 金融服务 银行中央银行 资产管理保险能源贸易

时间序列数组运算• 时间序列数据转化为其他类型数据– 时间序列数据保存为文本文件

stat=fts2ascii(filename,tsobj,exttext)filename——新文件名tsobj——需要转化的 fints 型格式数据exttext——不需要的描述项的行数,也可以不输入

– 时间序列数据转化为矩阵数据tsmat=fts2mat(tsobj,datesflag)tsobj——需要转化的 fints 型格式数据datesflag——0( 默认值 ) 表示不输出日期到矩阵中,

1 表示日期也转换

Page 15: MATLAB 金融计算. MATLAB 金融界主要用户 金融服务 银行中央银行 资产管理保险能源贸易

时间序列数组运算• fints 型数据求最大值、最小值、均值、标准差及排序

– max,min,mean,std,sortfts

• 实现时间序列的转换– newfts=convertto(oldfts,newfreq)

– oldfts—— 需要转换的数据– newfreq—— 转换的目标,具体如下:

• ’D’ 或’ d’—— 天• ’W’ 或’ w’—— 周• ’M’ 或’ m’—— 月• ’Q’ 或’ q’—— 季度• ’S’ 或’ s’—— 半年• ’A’ 或’ a’—— 年

– 如 :• weekzh=converto(zhaohang,’w’)

Page 16: MATLAB 金融计算. MATLAB 金融界主要用户 金融服务 银行中央银行 资产管理保险能源贸易

时间序列数组运算• 时间序列数据的抽取– ftse=extfield(tsobj,fieldnames)

– tsobj—— 原始数据– fieldnames—— 原始数据中的字段名– 如:• weekzhclose=extfield(weekzh,’close’)

– 还可以用结构变量的方法• weekzhclose=weekzh.close

• 将价格序列转化为收益率序列– price2ret

• 将收益率序列转化为价格序列– ret2price

Page 17: MATLAB 金融计算. MATLAB 金融界主要用户 金融服务 银行中央银行 资产管理保险能源贸易

时间序列数组运算• 处理时间序列中的缺失数据– newfts=fillts(oldfts,method)– method:• ’linear’或’ le’——线性插值法• ’cubic’或’ c’——三次插值法• ’spline’或’ s’——样条法• ’nearest’或’ n’——最近法• ’pchip’或’ p’——逐段光滑的三次 Hemite 多项

式法

Page 18: MATLAB 金融计算. MATLAB 金融界主要用户 金融服务 银行中央银行 资产管理保险能源贸易

MATLAB 和 Excel 数据连接

1. 打开 Excel软件,单击“工具”菜单,选择“加载宏”菜单项,弹出“加载宏”对话框。

2. 在“加载宏”对话框中,单击“浏览”按钮,在MATLAB/toolbox/exlink文件夹下选中 Excllink文件,单击“确定”按钮。

3. 重新回到 Excel中“加载宏”对话框,在“ Excel Link 2.2 for use with MATLAB ”选项前打钩

加载 Excel Link

Page 19: MATLAB 金融计算. MATLAB 金融界主要用户 金融服务 银行中央银行 资产管理保险能源贸易

MATLAB 和 Excel 数据连接

启动MATLAB将变量输入 MATLAB

把 MATLAB 中变量输入 Excel 中

执行 MATLAB 命令

Page 20: MATLAB 金融计算. MATLAB 金融界主要用户 金融服务 银行中央银行 资产管理保险能源贸易

MATLAB 和 Excel 数据连接MATLAB 自动启动和 Excel 连接

设置

鼠标在桌面 MATLAB 图标上右击,弹出“属性”快捷菜单,在对话框“目标”文本框的“ Matlab\bin\win32\MATLAB.exe” 后面加上“ /automation”

Page 21: MATLAB 金融计算. MATLAB 金融界主要用户 金融服务 银行中央银行 资产管理保险能源贸易

MATLAB 和 Excel 数据连接Excel Link 的使用

连接管理函数函数 作用 函数 作用MATLABinit 初始化 Excel Link,

启动 MATLABMLClose 终止MATLAB

MLAutoStart 自动启动MATLAB

MLOpen 启动 MATLAB

Page 22: MATLAB 金融计算. MATLAB 金融界主要用户 金融服务 银行中央银行 资产管理保险能源贸易

MATLAB 和 Excel 数据连接Excel Link 的使用

数据管理函数函数 作用 函数 作用

MATLABfcn 对于给定的 Excel 数据运行 MATLAB 命令

MLAppendMatrix 向 MATLAB 工作区添加Excel 数据表

MATLABsub 对于给定的 Excel 数据运行 MATLAB 命令,并制定输出位置

MLPutMatrix 用 Excel 数据表创建或覆盖 MATLAB 数据

MLEDeleteMatrix 删除MATLAB 矩阵 MLPutVar 用 Excel 数据表 VBA 创建或覆盖MATLAB 数据

MLEvalString 执行 MATLAB 命令 MLGetVar 向 Excel 数据表 VBA 写MATLAB 数据内容

MLGetMatrix 向 Excel 数据表写入MATLAB 数据

Page 23: MATLAB 金融计算. MATLAB 金融界主要用户 金融服务 银行中央银行 资产管理保险能源贸易

MATLAB 和 Excel 数据连接Excel Link 的使用直接把数据输入到 MATLAB 中把 Excel 中盐田港 (000088) 从 2008 年 8月 1 日到 9 月 30 日数据录入 MATLAB中 , 保存变量名为 ytg_000088

1. Excel 中盐田港数据分别为日期、收盘价和成交量

2. 单击“ startmatlab” 按钮启动MATLAB

Page 24: MATLAB 金融计算. MATLAB 金融界主要用户 金融服务 银行中央银行 资产管理保险能源贸易

MATLAB 和 Excel 数据连接Excel Link 的使用直接把数据输入到 MATLAB 中

3. 单击“ putmatrix” 按钮弹出一个菜单,根据菜单提示将 Excel 中数据用鼠标选定,传输到 MATLAB 中变量名为ytg_000088, 然后单击“确定”按钮

Page 25: MATLAB 金融计算. MATLAB 金融界主要用户 金融服务 银行中央银行 资产管理保险能源贸易

MATLAB 和 Excel 数据连接Excel Link 的使用直接把数据输入到 MATLAB 中

Page 26: MATLAB 金融计算. MATLAB 金融界主要用户 金融服务 银行中央银行 资产管理保险能源贸易

MATLAB 和 Excel 数据连接Excel Link 的使用MATLAB 中自带 Excel 文件介绍打开 MATLAB 的toolbox 中 exlink 目录下的 ExliSamp.xls 文件

Page 27: MATLAB 金融计算. MATLAB 金融界主要用户 金融服务 银行中央银行 资产管理保险能源贸易

MATLAB 和 Excel 数据连接Excel Link 的使用MATLAB 中自带 Excel 文件介绍1. 打开 sheet1, 将 Excel 中 DATA 数据传给MATLAB 工作区中变量 data(存储了 3 个变量 25 个观察

值)• MLPutMatrix(”data”,DATA)

2. 在 Excel 中执行 MATLAB 命令• MLEvalString(“y=data(:,3)”)• MLEvalString(“e=ones(length(data),1)”)• MLEvalString(“A=[e data(:,1:2)]”)

3. 计算回归系数• MLEvalString(“beta=A\y”)

4. 计算回归结果• MLEvalString(“bfit=A*beta”)

5. 将原结果和回归结果相比较• MLEvalString(“[y,k] =sort(y)”)• MLEvalString(“fit=fit(k)”)• MLEvalString(“n=size(data,1)”)

6. 用 MATLAB 中多项式进行拟合• MLEvalString(“[p,S]=polyfit(1:n,y’,5)”)• MLEvalString(“newfit=polyval(p,1:n,S)”)

7. 对拟合结果作图• MLEvalString("plot(1:n,y,'bo',1:n,fit,'r:',1:n,newfit,'g')

0 5 10 15 20 25200

400

600

800

1000

1200

1400

1600

1800

2000

2200

data

fitnewfit

Page 28: MATLAB 金融计算. MATLAB 金融界主要用户 金融服务 银行中央银行 资产管理保险能源贸易

MATLAB 和 Excel 数据连接Excel Link 的使用MATLAB 中自带 Excel 文件介绍

用二叉树方法计算欧式看跌期权价格1. 打开” sheet4” ,数据 B4 : B10 名称是 bindata ,分别存放股票价格、

行权价、无风险利率、期权存续期( 5/12)、时间离散步长( 1/12)、股票标准差以及是否是欧式(美式)期权, B15 开始存放二叉树各节点价格asset_tree,B23 开始存放现金流 value_tree

2. 激活D5 单元,将 Excel 中 bindata传到 MATLAB 变量 b 中,激活D12单元,调用 MATLAB 中计算二叉树函数 binprice, 其二叉树数据结果保存在变量 p 中,价格保存在变量 o中。激活D11 、 D12 ,分别保存在MATLAB 变量 asset_tree 与 value_tree 中,注意 B15 与 B23 分别是asset_tree 与 value_tree 的起点。

Page 29: MATLAB 金融计算. MATLAB 金融界主要用户 金融服务 银行中央银行 资产管理保险能源贸易

MATLAB 和 Excel 数据连接Excel Link 的使用简易方法将 Excel 数据导入 MATLAB

1. 在 Excel 中建立一个数据文件

Page 30: MATLAB 金融计算. MATLAB 金融界主要用户 金融服务 银行中央银行 资产管理保险能源贸易

MATLAB 和 Excel 数据连接Excel Link 的使用简易方法将 Excel 数据导入 MATLAB

2. 在 MATLAB 文件目录浏览器下找到 magic 文件,将鼠标移动到 magic 文件上,右击,弹出菜单

Page 31: MATLAB 金融计算. MATLAB 金融界主要用户 金融服务 银行中央银行 资产管理保险能源贸易

MATLAB 和 Excel 数据连接Excel Link 的使用简易方法将 Excel 数据导入 MATLAB

3. 单击数据输入选项。选择变量名。

Page 32: MATLAB 金融计算. MATLAB 金融界主要用户 金融服务 银行中央银行 资产管理保险能源贸易

MATLAB 和 Excel 数据连接Excel Link 的使用将 Excel 日期转化为 MATLAB 日期• 函数—— x2mdate• 调用方法

• MATLABDate=x2mdate(ExcelDateNumber,Convention)• 输入参数

• xcelDateNumber——Excel 日期• Convention—— 转化方式

• 0 (默认)——起始日期为 1900 年 1 月 1 日• 1——起始日期为 1904 年 1 月 1 日

>> qw=39083

qw =

39083

>> x2mdate(qw)

ans =

733043

>> datestr(ans)

ans =

01-Jan-2007

Page 33: MATLAB 金融计算. MATLAB 金融界主要用户 金融服务 银行中央银行 资产管理保险能源贸易

MATLAB 与财经网站数据连接

获得 Yahoo 网站数据

建立和 yahoo 网站服务器连接

调用方式Connect=yahooConnect=yahoo(‘URL’, ’IPAdress’, PortNumber)

输入参数URL——yahoo 网站网址IPAdress—— 代理服务器 IP地址PortNumber—— 代理服务器端口

例子Connect=yahoo(‘http://quote.yahoo.com’, ’111.222.33.444’, 5678)

Page 34: MATLAB 金融计算. MATLAB 金融界主要用户 金融服务 银行中央银行 资产管理保险能源贸易

MATLAB 与财经网站数据连接

获得 Yahoo 网站数据

获得 Yahoo 网站数据

调用方式data=fetch(Connect, ...)

例子Connect=yahooClosePrice=fetch(Connect,’ko’,’close’,’Apr 6 00’)ClosePrice=fetch(Connect,’IBM’,’last’)Price=fetch(Connect,’000001.SZ’)Price=fetch(Connect,’601168.SS’)

Page 35: MATLAB 金融计算. MATLAB 金融界主要用户 金融服务 银行中央银行 资产管理保险能源贸易

MATLAB 与财经网站数据连接

获得 bloomberg 网站数据

著名财经数据公司

• 连接函数—— bloomberg• 调用方式•方式 1——Connect=bloomberg•默认端口( 8194)、默认网址

•方式 2——Connect=bloomberg(PortNumber,IPAddress)•输入参数:机器端口、网址•输出参数:用端口建立和 bloomberg 数据服务器的连接

Page 36: MATLAB 金融计算. MATLAB 金融界主要用户 金融服务 银行中央银行 资产管理保险能源贸易

MATLAB 与财经网站数据连接

获得 bloomberg 网站数据 • 接受数据函数—— fetch• 调用方式

•data=fetch(Connect, …)• 例子

•获取 IBM股票 1999年 11月 16日时间序列•c1=bloomberg•data=fetch(c1,’IBM US Equity’,’TIMESERIES’,’11/16/99’)

•获取 IBM股票历史上的收盘价,时间从 1999年 7月 15日到 8月 2日•data=fetch(c1,’IBM US Equity’,’HISTORY’,...•‘Last_Price’,‘07/15/99’,’08/02/99’)

• 确定是否已经连接• x=isconnection(Connect)

• 关闭连接• close(Connect)

Page 37: MATLAB 金融计算. MATLAB 金融界主要用户 金融服务 银行中央银行 资产管理保险能源贸易

MATLAB 和财经网站数据接口 GUI

• 命令—— dftool

Page 38: MATLAB 金融计算. MATLAB 金融界主要用户 金融服务 银行中央银行 资产管理保险能源贸易

MATLAB 和财经网站数据接口 GUI

• 命令—— dftool

Page 39: MATLAB 金融计算. MATLAB 金融界主要用户 金融服务 银行中央银行 资产管理保险能源贸易

MATLAB 和 Word 接口

• 启动 Notebook

– notebook -setup

• 从 Word 中启动 Notebook

– 方法 1 :打开 MATLAB\notebook\pc 文件夹下 M-book 文件,直接进入编辑状态

– 方法 2 :在 Word 菜单中选中“工具”菜单下的“模板和加载项”菜单项,然后打开“模板和加载项”对话框菜单,单击“选用”按钮,在弹出的对话框中选中 M-book即可

Page 40: MATLAB 金融计算. MATLAB 金融界主要用户 金融服务 银行中央银行 资产管理保险能源贸易

上机练习

1. 将中国石油 (601857)2008 年 2 月 15 日至 2008年 9 月 26 日的日收益率数据保存到 zgsy.txt文件中 . 计算期间的最大跌幅 .

2. 计算中国石油 (601857)2008 年 2 月 15 日至2008 年 9 月 26 日的日收益率均值、标准差及夏普比率。把结果分别用 TXT 文件和 Excel文件保存。

Page 41: MATLAB 金融计算. MATLAB 金融界主要用户 金融服务 银行中央银行 资产管理保险能源贸易

上机练习

3. 将金牛股份( 000937 ) 2005 年 10 月 14 日至 2006 年 1 月 10 日的股价数据保存在 Excel中,然后通过 Excllink 将收盘价保存到MATLAB 中。计算收益率的均值、方差和夏普比率,然后传回 Excel 中。