標籤:

Matlatb金融時間序列工具箱(Financial Time Series Toolbox)

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,u

2.DAILY,Daily,daily,D,d,1

3.WEEKLY,Weekly ,weekly,W,w,2

4.MONTHLY,Monthly,monthly,M,m,3

5.QUARTERLY,Quarterly, quarterly,Q,q,4

6.SEMIANNUAL,Semiannual,semiannual,S,s,5

7.ANNUAL,Annual,annua,A,a,6

5.輸入變數描述

格式: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.dates1

year(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.mat

dates=datenum(textdata); %將字元型日期轉化為數值型

ftsdata=fints([dates data]);

ftsdata.series1

ftsdata.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 %查看時間序列1

ftsdata.series2 %查看時間序列2

ftsdata(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,新的時間序列對象命名Newfts

Newfts = 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,實驗數據)

刪除data1

Nodata1=rmfield(ftsdata,』data1』);

刪除data1和data2

Nodata2==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:時間區間,默認值為1

Starttime:初試時間,標量,默認值為0

Method:與(1)相同。

輸出:

TickSeries:資產價格矩陣

Starttime:時間向量。
推薦閱讀:

墨西哥經濟(一):發展中國家的發展術
淺析外儲遽降對國運和家庭的深遠影響
共享經濟是時候回歸理性發展了
借給別人錢,該不該收利息?
如何使用Matlab自帶的工具箱

TAG:經濟 |