金融时间序列
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
从myfts中提取2008年3月8日,3月10日和3 月15日的series2的值,执行: >> myfts.series2({'03/08/08', '03/10/08', '03/15/08'})
2、对日期字符串范围进行索引 从时间序列对象myfts中提取2008年3月8日到 3月15日的所有值,执行: >> myfts({'03/08/08::03/15/08'}) 注意:一个日期字符串的范围是由双冒号(::)分 开的两个日期字符串构成 如果一个日期不存在于时间序列对象中,一 个错误的信息将会出现 >> myfts.series2({'03/10/08::03/19/08'})
总结:用户可以调用函数ascii2fts把外面数 据文件中的数据导入MATLAB中;我们知 道MATLAB的数值计算是以矩阵为基础 的,我们又调用函数fts2mat将金融时间序 列对象变成矩阵以至于方便计算;最后, 金融时间序列对象在某些方面使用起来还 是很方便的,于是又找了一个桥梁,利用 函数fints将矩阵变回金融时间序列对象。
时间序列数据转换成矩阵数据 tsmat = fts2mat(tsobj) tsmat = fts2mat(tsobj, datesflag) tsmat = fts2mat(tsobj, seriesnames) tsmat = fts2mat(tsobj, datesflag, seriesnames) 输入参数: tsobj %需要转换的金融时间序列对象的名称 datesflag %(Optional) 表示转换成矩阵时是否要输出 日期到矩阵中,datesflag=0(默认值)表示不输出 日期到矩阵中,datesflag=1表示输出日期到矩阵中。 seriesnames %(Optional) 需要导出的某列数据序列 的名称。 输出参数: tsmat %表示转换后的矩阵。
3、用整数索引时间序列对象的内容 整数是MATLAB的普通索引形式。索引从1开 始(不是0);index=1对应于第1个元素, index=2对应于第2个元素,依次类推。 例如,提取myfts中series2的第一项,执行: >> myfts.series2(1) 提取myfts中series2的第1,3,5项,执行: >> myfts.series2([1 3 5]) 提取myfts的最后一项,执行: >> myfts(end)
例如:提取myfts中的series2的数据: >> srs2_vec = fts2mat(myfts.series2) 如果用户想让输出矩阵中包含日期: >>srs2_mtx = fts2mat(myfts.series2, 1)
金融时间序列数据转换为其它类型数据
1、将时间序列数据保存为文本文件 stat = fts2ascii(filename, tsobj, exttext) stat = fts2ascii(filename, dates, data, colheads, desc, exttext) 输入参数: filename %ASCII文件的名称 tsobj %需要转换的fints型格式的金融时间序列数据 exttext %(Optional)不需要的描述项的行数 dates %包含日期的列向量,日期格式必须是序数型 data %列转置矩阵.每一列是一个数据序列. colheads %(Optional) 列标题的单元数组;第1个单元列一定是 日期列 desc %(Optional)描述性字符串,是文件的第1行. 输出参数: stat % 转换成功标志,1表示转换成功;0表示转换不成功。
例如创建一个时间序列fints,然后将变量fints 的内容保存到aa.txt文件中,执行代码如下: >>fints1=fts2ascii(‘aa.txt’,fints); fints=1表示转换成功,MATLAB的work目录 下生成了aa.txt文件,调用type命令浏览文 件的内容,执行: >>type aa.txt
例子:数据文件times.txt,内容如下: 1/3/09 12:00 36.75 36.9063 36.6563 36.875 1167900 1/4/09 12:00 37 37.2813 36.625 37.1563 1994700 >>times1 = ascii2fts('times.txt',’t’)
以金融工具箱自带的数据文件disney.dat为 例 (1)查看文件内容 >>type disney.dat >> disfts = ascii2fts('disney.dat') ??? Error using ==> ascii2fts…. 原因是文件disney.dat的前3行不是数据而描 述数据的内容,因此直接调用函数ascii2fts 就无法识别该文件 >>disfts = ascii2fts('disney.dat', 1, 3,2)
4、包含时间信息的金融时间序列的索引 >> data = round(10*rand(6,2)); >>fts= fints({'01-Jan-2008 11:00';'01-Jan2008 12:00'; '02-Jan-2008 11:00'; ..., '02-Jan-2008 12:00'; '03-Jan-2008 11:00';'03-Jan-2008 12:00'},data) >>fts('01-Jan-2008 12:00') %对2008年1月1 日,12:00进行索引 >>fts('01-Jan-2008 12:00::03-Jan-2008 11:00') %使用(::)对包含时间的日期进行索 引
练习:任意找一支股票,把数据导入EXCEL中,然 后转换成MATLAB的时间序列格式,要求: (1)仅仅包含该股票从2008年3月1日到4月1日的 收盘价和最高价 (2)desc的内容为股票的代码和名称 (3)以周为频率 (4)显示该股票在2008年3月8日,3月12日及3月 15 日的最高价,最低价和成交量。 (5)把该股票的最高价序列降序排列 hyzhang_69@163.com
金融时间序列的使用
时间序列数据的提取与索引 (一)从金融时间序列数据中提取数据 (1)创建一个金融时间序列对象myfts (2)创建一个仅仅包含series2值的时间序列 >> srs2 = myfts.series2 总结:时间序列srs2包含了myfts的所有日期和 字段名为series2的数据序列, 而且数据序 列的名称仍然是原始时间序列对象myfts的 名称.
1、对字符串日期进行索引 例如,从上例的时间序列myfts中提取2008年 3月8日的所有值,执行: >>myfts('03/08/08') 从myfts中提取2008年3月8日的series2的值 >> myfts.series2('03/08/08') 从myfts中提取2008年3月8日,3月10日和3 月15日的所有值,执行: >> myfts({'03/08/08', '03/10/08', '03/15/08'})
例子:首先,创建一个金融时间序列,在 MATLAB中执行如下命令: >> randn('seed',0); %随机数的初值为0 >> a=randn(6,1); %生成6行1列的随机 数向量 >> b=[today:today+5]'; >> fts=fints(b,a)
>> fts(3)=NaN; %将第3个数据变为缺失 值NaN >> fts(3) %查看改变后的fts变量中第3个 数据的值 ans = desc: (none) freq: Unknown (0) 'dates: (1)' 'series1: (1)' '18-Feb-2008' [ NaN] >> newdata=fillts(fts,'linear'); %利用线性 插值处理fts中的缺失值
金融时间序列
文本文件的转换
函数ascii2fts从一个文本数据文件(..txt) 中创建了一 个金融时间序列对象,如果文本数据文件符合下列的 格式: 包含标题文本行 包含标题信息.标题信息必须在数据信息列之前,除 非文件中不需要输入的行被规定。 最左边的一列必须是日期,而且日期必须是一个有 效的日期字符串格式。 'ddmmmyy' 或 'ddmmmyyyy' 'mm/dd/yy' 或'mm/dd/yyyy' 'dd-mmm-yy'或 'dd-mmm-yyyy' 'mmm.dd,yy' 或 'mmm.dd,yyyy' ·每一列必须用空格键或tab键分开
Biblioteka Baidu
2、把时间序列数据频率转换成规定的频率 newfts = convertto(oldfts, newfreq) 输入参数: oldfts %需要转换的数据 newfreq %转换的目标,根据要求具体情况如下: 1, DAILY, Daily, daily, D, d 为天 2, WEEKLY, Weekly, weekly, W, w 为周 3, MONTHLY, Monthly, monthly, M, m 为月 4, QUARTERLY, Quarterly, quarterly, Q, q 为季度 5, SEMIANNUAL, Semiannual, semiannual, S, s 为 半年 6, ANNUAL, Annual, annual, A, a 为年
调用方式: tsobj = ascii2fts(filename, descrow, colheadrow, skiprows); tsobj = ascii2fts(filename, timedata, descrow, colheadrow, skiprows) 输入参数: filename %文件名,必须用单引号括起来 descrow%(Optional)确定文本文件中文字说明的行数 colheadrow %(Optional)说明每列变量名所在的行数 skiprows %(Optional)ASCII文件中不需要输入的行 数 timedata %判定是否包含时间信息,若是输入字符 串“t”,若不是则输入“nt”
extfield 功能:实现对时间序列数据的抽取 调用方式: ftse = extfield(tsobj, fieldnames) %从tsobj中 提取日期和字段名为fieldnames的数据序列 成一个新的金融时间序列对象ftse. ftse包含 tsobj中所有的日期,但是较少的数据序列 输入参数: tsobj %原始数据 fieldnames %原始数据中的字段名
3、时间序列中的缺失数据的处理 ewfts = fillts(oldfts, fill_method) 输入参数: oldfts %金融时间序列对象的原始数据 fill_method %(Optional)处理缺失值的方法,常用 的有如下5种: 'linear '或‘l’或'le' %线形插值方法(默认值) 'cubic'或 ‘c’或'ce' %3次插值 'spline'或 's'或'se' %样条插值 'nearest'或'n'或'ne' %最近插值法 'pchip'或 'p'或'pe' %逐段光滑的3次Hemite多项式 法 输出参数: newfts %处理后的数据
注意:执行ftse = extfield(myfts, 'Series2') 与ftse = myfts.Series2得到的结果是相同的
金融时间序列的索引 用户可以使用一个字符串日期,字符串日期范 围,字符串日期的单元数组或普通的整数 对金融时间序列进行索引.但是,用户不能使 用序数型日期对金融时间序列进行索引 ※每一个字符串日期必须包含日,月和年. ※每当数据通过一个频率转换时,所有的数 据落在显示的时间日期的末端,例如,每 周的数据是星期五,每月的数据是每月的 最后一天等等