Matlatb金融時間序列工具箱(Financial Time Series Toolbox)
05-01
Matlatb金融時間序列工具箱(Financial Time Series Toolbox)建立金融時間序列金融時間序列是一個結構變數,有五個屬性:描述(description)、頻率(frequency)、日期(dates)、顯示(display)和至少一個數據列向量名(dataname),前三個屬性的名字是固定的,分別為desc、freq和dates,時間序列的名字用戶可以自行規定,如不更改的話,matlab默認為series1、series2、……、seriesN。一、利用函數fints來創建金觸時間序列對象根據輸入參數的類型,可分為五種形式:
推薦閱讀:
(1)簡單的矩陣輸入
格式:ftsdata=fints(dates_data)輸入:dates_data是一個矩陣,第一列是時間,從第二列開始是時間序列的樣本數據。(2)向量輸入格式:ftsdata=fints(dates,data)輸入:dates是時間列向量,或者是元包列(非數據型,即文本型日期); data是時間序列的樣本數據。(3)自定義時間序列名格式:ftsdata=fints(dates,data,dataNames)輸入:dates是時間列向量,或者是元包列(非數據型,即文本型日期); data是時間序列的樣本數據,dataNames是變數名,如果是多個,應該用元包{』name1』,』name2』,……,』nameN』}的形式輸入。(4)輸入頻率格式:ftsdata=fints(dates,data,datanames,freq)
輸入:dates是時間列向量,或者是元包列(非數據型,即文本型日期); data是時間序列的樣本數據。Freq有固定的格式:1.UNKNOWN,Unknown ,unknown,U,u2.DAILY,Daily,daily,D,d,13.WEEKLY,Weekly ,weekly,W,w,24.MONTHLY,Monthly,monthly,M,m,35.QUARTERLY,Quarterly, quarterly,Q,q,46.SEMIANNUAL,Semiannual,semiannual,S,s,57.ANNUAL,Annual,annua,A,a,65.輸入變數描述格式:ftsdata=fints(dates,data,datanames,freq,desc)
輸入:dates是時間列向量,或者是元包列(非數據型,即文本型日期); data是時間序列的樣本數據。Desc的形式是單個的字元型變數。注意:1.第一種矩陣輸入的方式,日期必須是數值型,其餘的四種日期可以是數值型也可以是字元型。 2.所有的數據輸入必須放在矩陣里,不能一個一個輸入。 3.變數名由於是字元型,所有要用到元包。 4.描述性變數是單變數的字元型。例子 創建日度數據(frequency=daily),變數名分別為data1、data2,描述欄位為「實驗數據」(desc=『實驗數據』). 5. datanames的列要與時間序列的個數即data的列相同。 例子,創建二元時間序列,第一個變數命名為data1,第二個變數命名為data2,數據的頻率是日度數據,並給時間序列描述為「實驗數據」輸入以下代碼:ftsdata=fints(dates,[data y],{data1,data2},1,實驗數據);
查看其第一行數據:ftsdata(1)則顯示: desc: 實驗數據 freq: Daily (1) dates: (1) data1: (1) data2: (1) 03-Apr-1991 [ 727291] [ 988.05]二、文本文件的轉換方式(ascii2fts)(略)三、調用金觸時間序列對象(假設已經創建二維時間序列ftsdata)(1)查看整個時間序列對象
在命令窗口中輸入時間序列對象的名字即可 (2)查看部分行數據跟查看矩陣的元素一樣,查看第一行,就輸入ftsdata(1)(3)查看時間序列中的時間變數法一:對象名.變數名如 ftsdata.dates1year(ftsdata.dates1) %查看時間序列的日期中的年份month(ftsdata.dates1) %查看時間序列的日期中的月份day(ftsdata.dates1) %查看時間序列的日期中的天法二:ftse = extfiield(tsobj,fieldnames)
輸入參數:tsobj:對象名稱fieldnames:變數名稱例 ftse = extfiield(ftsdata,『data1』)其效果與ftsdata.data1相同。(4)用時間標籤提取數據格式:newtsobj= tsobj(時間標籤/整數標籤)1.時間標籤引用:時間標籤的格式可以是文本格式,也可以是數值型的時間序列,可以是單個的也可以是多個的。如:
ftsdata(『3/4/2008』)ftsdata({『3/4/2008』, 『10/4/2008』})如果是連續日期則用雙冒號隔開:ftsdata({『3/4/2008』 ::『10/4/2008』})這種引用方式,如果時間區間內有一個時間不在時間序列的中,則會提示出錯。2.整數標籤引用: 整數標籤引用與引用向量的元素一樣。演示生成金融時間序列數據%% 生成一列時間序列format short g %設置數據精度
load szchengzhi.matdates=datenum(textdata); %將字元型日期轉化為數值型ftsdata=fints([dates data]);ftsdata.series1ftsdata.dates %查看時間序列的日期year(ftsdata.dates) %查看時間序列的日期中的年份month(ftsdata.dates) %查看時間序列的日期中的月份day(ftsdata.dates) %查看時間序列的日期中的天%% 生成多列時間序列,以兩列為例x = randn(5341,1);y = filter([1 -1 1],1,x); %生成一個ma(2)過程ftsdata=fints([dates data y]);%生成兩個時間序列,默認命名series1、series2
ftsdata %查看整個時間序列ftsdata.series1 %查看時間序列1ftsdata.series2 %查看時間序列2ftsdata(1) %查看第1行時間序列ftsdata=fints(dates,[data y],{data1,data2},1,實驗數據)四、金融時間序列的使用和修改(1)查看金融時間序列的屬性fnames=fieldnames(tsobj,srsnameonly)顯示金融時間序列的五個屬性,由於desc、 freq、 dates,描述性屬性、頻率屬性和日期屬性是不能自命名的,fnames的前三個變數分別是上述三個,接下來就是變數的名字了,以列數組的形式儲存在fnames中。Srsnameonly默認為0,表示列出所有屬性,為1表示只列出變數名。例 fnames = fieldnames(ftsdata)fnames = desc freq dates data1 data2例 fnames = fieldnames(ftsdata,1)fnames = data1 data2(2)時間序列重命名Newfts = chfield(oldfts,oldname,newname)輸入參數意義:Oldfts:時間序列結構變數名Oldname:時間序列中變數名稱Newname:時間序列中變數的新名稱例 對時間序列對象ftsdata中的變數data2命名為series2,新的時間序列對象命名NewftsNewfts = chfield(ftsdata, 『data2』, 『series2』)注意:字元型的輸入都要加單引號』』,包括其他函數。(3)對時間序列進行排序Sfts = Sortfts(tsobj,seriesnames,flag)輸入參數為:tsobj :時間序列對象seriesnames:排序的變數名(字元型),即按哪一個變數進行排序,若不輸入,則默認按第一個變數排序。flag:排序方式(升序or降序),flag=1(默認),升序;flag=0,降序。例子Sfts1 = sortfts(ftsdata)Sfts2 = sortfts(ftsdata,』data2』)Sfts3 = sortfts(ftsdata,』data2』,-1)Sfts4 = sortfts(ftsdata,-1)(4)時間序列起始時間點Datesbound=ftsbound(tsobj)(5)刪除時間序列的一列數據Newobj = rmfield(oldtsobj,』fields』)輸入參數:fields是時間序列的名字,可以是單個也可以是多個,多個時是字元型數組。例 ftsdata=fints(dates,[dates,data y],{data1,data2,data3,},1,實驗數據)刪除data1Nodata1=rmfield(ftsdata,』data1』);刪除data1和data2Nodata2==rmfield(ftsdata,{data1,data2});五.時間序列轉化為矩陣數據、文本文件(1)轉化為矩陣格式:data=fts2mat(ftsobj,IncludeDates,seriesnames)輸入參數:fts2mat將時間對象ftsobj中的全部或部分時間序列轉化為矩陣。IncludeDates:是否將日期導出。IncludeDates=0,或不輸入,默認只對時間序列轉化,不轉化時間。IncludeDates=1,則把時間和時間序列數據轉化在一個矩陣中。Seriesnames:需要導出的時間序列名稱,如果不輸入默認為全部時間序列。注意:1.第一個參數必須有,第二和第三個參數如果不輸入,則取默認。 2.由於時間序列對象的引用後也是時間序列對象,因此,ftsobj可以直接是引用後的時間對象,比如fts2mat (ftsdata.data1);(2)轉化為文本文件格式:Stat=fts2ascii(filename,tsobj,exttext)Stat= fts2ascii(filename,dates,data,colheads,desc,exttext)輸入參數:Filename:ASCII文件名稱Tsobj:需要轉換的fints型格式的金融時間序列數據Exttext:不需要的描述項的行數Dates:包含日起的列向量,日期格式必須是序數型Data:列轉置矩陣,每一列是一個數據序列Dcolheads:列標題的單元數組,第一個單元列一定是日期列Desc:描述性字元串,是文件的第一行輸出:stat:轉換成功標誌,成功為1,否則為0.例 fints1 = fts2ascii(『aa.txt』,ftsdata)六、時間序列的缺失值補齊格式:fillts(oldfts,fill_method,『增加新日期』)fill_method:處理缺失值的方法,常用的有以下五種。1.線性插值方法 『linear』、『l』、『le』2.3次多項式插值『cubic』、『c』、『ce』3.樣條插值『spline』、『s』、『se』4.最近插值法『nearest『、『n』、『ne『5.逐段光滑的三次Hemite多項式法『pchip『、『p』、『pe』6. 常數插值。用固定的常數代替缺失值。7. 『增加新日期』表示增加時間序列的長度,增加一個日期。以後探索。七、時間序列頻率的轉換格式:newfts=convertto(oldfts,newfreq)八、價格與收益率相互轉換(1)價格轉化為收益率格式[RetSeries,RetIntervals]=price2ret(TickSeries,TickTimes,Method)輸入參數TickSeries:價格列向量或矩陣,如果是矩陣的話,則每一列是一個時間序列。TickTimes:單調遞增的時間向量,長度與價格序列長度一致,如果不輸入,或者為『[]』,則默認樣本點從1,2……,length(時間序列)Method:計算收益率的方法,menthd不輸入或者輸入『Continuous』 /[]時,默認為連續複利的形式。輸入『periodic』表示單利。輸出:RetSeries:資產收益率矩陣,行數比價格矩陣少一行RetIntervals:相鄰的時間差。RetIntervals(i)=TickTimes(i+1)-TickTime(i)註:Method=『continuous』時,第i期的收益率計算公式如下:RetSeries(i)=log[TickTimes(i+1)/TickTimes(i+1)]/ RetIntervals(i).Method=『periodic』時, 第i期的收益率計算公式如下:RetSeries(i)= [TickTimes(i+1)/TickTimes(i+1)-1]/ RetIntervals(i).如果沒有後面兩個參數,則直接公式log[TickTimes(i+1)/TickTimes(i+1)]計算。(2)收益率轉化為價格格式:[TickSeries,TickTimes]=ret2price(RetSeries,StartPrice,,retinterval,starttime,method)輸入參數:Retseries:收益率數據列向量/矩陣StartPrice:資產的初試價格向量,元素個數為收益率矩陣的列數。默認值為1.Retinterval:時間區間,默認值為1Starttime:初試時間,標量,默認值為0Method:與(1)相同。輸出:TickSeries:資產價格矩陣Starttime:時間向量。推薦閱讀:
※墨西哥經濟(一):發展中國家的發展術
※淺析外儲遽降對國運和家庭的深遠影響
※共享經濟是時候回歸理性發展了
※借給別人錢,該不該收利息?
※如何使用Matlab自帶的工具箱
TAG:經濟 |