第1章 MATLAB数值计算及金融运用

Download Report

Transcript 第1章 MATLAB数值计算及金融运用

MATLAB金融计算
MATLAB金融界主要用户
资产管理
金融服务
保险
银行
能源贸易
中央银行
金融分析与建模流程图
数据获取
研究和量化
发布
文件
数据分析
与可视化
报告
数据库
金融建模
应用
网上数据
应用开发
产品
金融计算工具箱
数据获取
研究和量化
发布
文件
数据分析与可视化
报告
数据库
金融建模
应用
网上数据
应用开发
产品
Fixed income
Database
Datafeed
Financial
Derivatives
Econometrics
Financial
Statistics
Builder Ex
Builder NE
Optimization
Builder JA
MATLAB
Compiler
Report Generator
Spreadsheet Link EX
MATLAB
Parallel Computing
MATLAB Distributed Computing Server
创立时间序列变量
时间序列数组的创立和读取
• 利用fints函数创立日期型数组
price=[1:6]’
dates=[today:today+5]’
Tsobjkt=fints(dates,price)
• 金融时间序列文件读取
Tsobjkt=ascii2fts(’at.dat’)
16-Oct-2008
17-Oct-2008
18-Oct-2008
19-Oct-2008
20-Oct-2008
21-Oct-2008
1
2
3
4
5
6
时间序列数组运算
• 日期运算
– 查找现在时刻
now
dateste(ans)
– 查询当天日期
today
– 序数型日期转化为字符串日
期
datestr(ans)
– 字符串日期转化为序数型日
期
datenum(’03-aug-2003’)
– 确定每月的第几天
Day=day(’22-Jan-2007’)
查询星期
[n,s]=weekday(’22-Jan2007’)
查询月份
[n,s]=month(D)
将字符型日期以向量形式输出
V=datevec(N)
计算日期间隔
daysact(’27-feb2008’,’08-aug-2008’)
时间序列数据合并
newfts=merge(fts1,fts2,…,Me
thod,RefObj)
特定日期抽取函数
todaily,toweekly,tomonthly,
toquarterly,tosemi,toannual
时间序列数组运算
• 以招商银行(600036)为例,说明如何将分析家软件数据
导入到MATLAB中,然后进行相关操作.
可从分析家网站
(http://www.fxj.net.cn)
下载
步骤1:打开分析家软件,输入代码600036,出现招商银行股价图
时间序列数组运算
• 步骤2:单击鼠标右键,在弹出的快捷菜单中选择“复制数据”
命令,弹出一个提示框
时间序列数组运算
• 步骤3:打开Excel,将数据粘贴到Excel文件中
时间序列数组运算
• 步骤4:由于日期型格式是yyyy-mm-dd,不符合MATLAB默
认格式,单击“A”列,单击鼠标右键,选择“设置单元格格式”
菜单项,出现对话框
时间序列数组运算
• 步骤5:对日期型数据进行修改,选择“14-Mar-01”的格式,
单击“确定”按钮,日期显示格式发生变化
时间序列数组运算
• 步骤6:拖动鼠标把所要复制的内容确定下来,单击鼠标右键,
选择“复制”菜单项,打开Windows记事本,把复制的内容粘贴
到记事本中,注意把汉字译成英文,以便MATLAB识别
时间序列数组运算
• 步骤7:将数据保存到MATLAB7/work目录下的at.txt文
件
• 步骤8:用ascii2fts函数将at.txt中的数据读入MATLAB
中,命令如下:
– zhaohang=ascii2fts(‘at.txt’,2,2)
时间序列数组运算
• 时间序列数据转化为其他类型数据
– 时间序列数据保存为文本文件
stat=fts2ascii(filename,tsobj,exttext)
filename——新文件名
tsobj——需要转化的fints型格式数据
exttext——不需要的描述项的行数,也可以不输入
– 时间序列数据转化为矩阵数据
tsmat=fts2mat(tsobj,datesflag)
tsobj——需要转化的fints型格式数据
datesflag——0(默认值)表示不输出日期到矩阵中,1
表示日期也转换
时间序列数组运算
• 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’)
时间序列数组运算
• 时间序列数据的抽取
– ftse=extfield(tsobj,fieldnames)
– tsobj——原始数据
– fieldnames——原始数据中的字段名
– 如:
• weekzhclose=extfield(weekzh,’close’)
– 还可以用结构变量的方法
• weekzhclose=weekzh.close
• 将价格序列转化为收益率序列
– price2ret
• 将收益率序列转化为价格序列
– ret2price
时间序列数组运算
• 处理时间序列中的缺失数据
– newfts=fillts(oldfts,method)
– method:
•
•
•
•
•
’linear’或’le’——线性插值法
’cubic’或’c’——三次插值法
’spline’或’s’——样条法
’nearest’或’n’——最近法
’pchip’或’p’——逐段光滑的三次Hemite多项
式法
MATLAB和Excel数据连接
加载Excel Link
1. 打开Excel软件,单击“工具”菜单,选择“加
载宏”菜单项,弹出“加载宏”对话框。
2. 在“加载宏”对话框中,单击“浏览”按钮,在
MATLAB/toolbox/exlink文件夹下选中Excllink
文件,单击“确定”按钮。
3. 重新回到Excel中“加载宏”对话框,在“Excel
Link 2.2 for use with MATLAB ”选项前打钩
MATLAB和Excel数据连接
启动MATLAB
将变量输入MATLAB
执行MATLAB命令
把MATLAB中变量
输入Excel中
MATLAB和Excel数据连接
MATLAB 自动启动和Excel连接
设置
鼠标在桌面MATLAB图标上右击,弹出
“属性”快捷菜单,在对话框“目标”
文本框的
“Matlab\bin\win32\MATLAB.exe”后面
加上“/automation”
MATLAB和Excel数据连接
Excel Link 的使用
连接管理函数
函数
作用
函数
作用
MLClose
终止MATLAB
MLAutoStart 自动启动MATLAB MLOpen
启动MATLAB
MATLABinit 初始化Excel Link,
启动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数据
MATLAB和Excel数据连接
Excel Link 的使用
直接把数据输入到MATLAB中
把Excel中盐田港(000088)从2008年8月1日
到9月30日数据录入MATLAB中,保存变量
名为ytg_000088
1. Excel中盐田港数据分别为日期、收盘
价和成交量
2. 单击“startmatlab”按钮启动MATLAB
MATLAB和Excel数据连接
Excel Link 的使用
直接把数据输入到MATLAB中
3. 单击“putmatrix”按钮弹出一个菜单,根
据菜单提示将Excel中数据用鼠标选定,
传输到MATLAB中变量名为ytg_000088,
然后单击“确定”按钮
MATLAB和Excel数据连接
Excel Link 的使用
直接把数据输入到MATLAB中
MATLAB和Excel数据连接
Excel Link 的使用
MATLAB中自带Excel文件介绍
打开MATLAB的
toolbox中exlink目录下
的ExliSamp.xls文件
MATLAB和Excel数据连接
Excel Link 的使用
MATLAB中自带Excel文件介绍
1.
2.
3.
4.
5.
6.
7.
打开sheet1,将Excel中DATA数据传给MATLAB工作区中变量data(存储了3个变量25个观察值)
•
MLPutMatrix(”data”,DATA)
在Excel中执行MATLAB命令
2200
data
•
MLEvalString(“y=data(:,3)”)
2000
fit
•
MLEvalString(“e=ones(length(data),1)”)
newfit
1800
•
MLEvalString(“A=[e data(:,1:2)]”)
1600
计算回归系数
1400
•
MLEvalString(“beta=A\y”)
计算回归结果
1200
•
MLEvalString(“bfit=A*beta”)
1000
将原结果和回归结果相比较
800
•
MLEvalString(“[y,k] =sort(y)”)
600
•
MLEvalString(“fit=fit(k)”)
•
MLEvalString(“n=size(data,1)”)
400
用MATLAB中多项式进行拟合
200
0
5
10
15
20
•
MLEvalString(“[p,S]=polyfit(1:n,y’,5)”)
•
MLEvalString(“newfit=polyval(p,1:n,S)”)
对拟合结果作图
•
MLEvalString("plot(1:n,y,'bo',1:n,fit,'r:',1:n,newfit,'g')
25
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的起点。
MATLAB和Excel数据连接
Excel Link 的使用
简易方法将Excel数据导入MATLAB
1. 在Excel中建立一个数据文件
MATLAB和Excel数据连接
Excel Link 的使用
简易方法将Excel数据导入MATLAB
2. 在MATLAB文件目录浏览器下找到magic文件,将鼠标移动到magic文件上,
右击,弹出菜单
MATLAB和Excel数据连接
Excel Link 的使用
简易方法将Excel数据导入MATLAB
3. 单击数据输入选项。选择变量名。
MATLAB和Excel数据连接
Excel Link 的使用
将Excel日期转化为MATLAB日期
•
•
•
函数——x2mdate
调用方法
• MATLABDate=x2mdate(ExcelDateNumber,Convention)
输入参数
• xcelDateNumber——Excel日期
• Convention——转化方式
• 0(默认)——起始日期为1900年1月1日
• 1——起始日期为1904年1月1日
>> qw=39083
>> x2mdate(qw)
>> datestr(ans)
qw =
ans =
ans =
39083
733043
01-Jan-2007
MATLAB与财经网站数据连接
获得Yahoo网站数据
建立和yahoo网站服务器连接
调用方式
Connect=yahoo
Connect=yahoo(‘URL’, ’IPAdress’, PortNumber)
输入参数
URL——yahoo网站网址
IPAdress——代理服务器IP地址
PortNumber——代理服务器端口
例子
Connect=yahoo(‘http://quote.yahoo.com’, ’111.222.33.444’, 5678)
MATLAB与财经网站数据连接
获得Yahoo网站数据
获得Yahoo网站数据
调用方式
data=fetch(Connect, ...)
例子
Connect=yahoo
ClosePrice=fetch(Connect,’ko’,’close’,’Apr 6 00’)
ClosePrice=fetch(Connect,’IBM’,’last’)
Price=fetch(Connect,’000001.SZ’)
Price=fetch(Connect,’601168.SS’)
MATLAB与财经网站数据连接
获得bloomberg网站数据
著名财经数据公司
• 连接函数——bloomberg
• 调用方式
•方式1——Connect=bloomberg
•默认端口(8194)、默认网址
•方式2——Connect=bloomberg(PortNumber,IPAddress)
•输入参数:机器端口、网址
•输出参数:用端口建立和bloomberg数据服务器的连接
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)
MATLAB和财经网站
数据接口GUI
• 命令——dftool
MATLAB和财经网站
数据接口GUI
• 命令——dftool
MATLAB和Word接口
• 启动Notebook
– notebook -setup
• 从Word中启动Notebook
– 方法1:打开MATLAB\notebook\pc文件夹下Mbook文件,直接进入编辑状态
– 方法2:在Word菜单中选中“工具”菜单下的“模
板和加载项”菜单项,然后打开“模板和加载项”
对话框菜单,单击“选用”按钮,在弹出的对话框
中选中M-book即可
上机练习
1. 将中国石油(601857)2008年2月15日至2008年9
月26日的日收益率数据保存到zgsy.txt文件中.
计算期间的最大跌幅.
2. 计算中国石油(601857)2008年2月15日至2008
年9月26日的日收益率均值、标准差及夏普比
率。把结果分别用TXT文件和Excel文件保存。
上机练习
3. 将金牛股份(000937)2005年10月14日至
2006年1月10日的股价数据保存在Excel中,然
后通过Excllink将收盘价保存到MATLAB中。
计算收益率的均值、方差和夏普比率,然后传
回Excel中。