版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、金融數(shù)量分析基于MATLAB編程,第3章 MATLAB與Excel文件的數(shù)據(jù)交換,金融MATLAB,Excel是一款非常優(yōu)秀的通用表格軟件,在學(xué)習(xí)、工作與科研中大量的數(shù)據(jù)可能都是以excel表格的方式存儲(chǔ)的。Excel在矩陣計(jì)算、數(shù)據(jù)擬合與優(yōu)化算法等方面的功能尚不足,Excel與Matlab相結(jié)合是處理復(fù)雜數(shù)據(jù)問題的有效方法。 如何利用matlab強(qiáng)大的數(shù)值計(jì)算功能處理excel中的數(shù)據(jù),首要解決的問題就是如何將excel中的數(shù)據(jù)導(dǎo)入到matlab中或?qū)atlab數(shù)值計(jì)算的結(jié)果轉(zhuǎn)存入excel中。 本章主要介紹以函數(shù)方式與exlink宏的兩種方法實(shí)現(xiàn)matlab與excel的數(shù)據(jù)交互。,20
2、20/8/24,2,1 案例背景,2020/8/24,3,2 數(shù)據(jù)交互函數(shù),2.1 獲取文件信息xlsfinfo函數(shù) xlsinfo函數(shù)語法: typ, desc, fmt = xlsfinfo(filename) 輸入?yún)?shù): filename:目標(biāo)文件地址 輸出參數(shù): typ:目標(biāo)文件類型 desc:目標(biāo)文件內(nèi)部表名稱(sheetname) fmt:支持目標(biāo)文件的軟件版本,2020/8/24,4,2.1獲取文件信息xlsfinfo函數(shù),typ, desc, fmt = xlsfinfo(excel.xls) 結(jié)果輸出: typ = Microsoft Excel Spreadsheet %文
3、件類別為excel文件 desc =Sheet1Sheet2Sheet3 %文件中數(shù)據(jù)表為Sheet1Sheet2Sheet3 fmt = xlExcel8 %文件版本為xlExcel8版本對(duì)應(yīng)的為excel 972003版本,2020/8/24,5,2.2 讀取數(shù)據(jù)xlsread函數(shù),xlsread函數(shù)語法: 1. data,textdate= xlsread(filename) 輸入?yún)?shù): filename:目標(biāo)文件地址 輸出參數(shù): data:數(shù)值數(shù)據(jù) textdate:文字?jǐn)?shù)據(jù),2020/8/24,6,2.2 讀取數(shù)據(jù)xlsread函數(shù),%調(diào)用xlsread函數(shù) data,textdat
4、e= xlsread(excel.xls) %textdate的第一列為日期文本,第一行為列名稱。 Hs300Date=textdate(2:14,1) 結(jié)果輸出:,data = 1.0e+003 * 1.00000.9940 0.98280.4180 0.99260.1740 0.96750.1830 0.97470.9730 0.96720.3140,textdate = datepriceVol 2005-1-4 2005-1-5 2005-1-19 2005-1-20,2020/8/24,7,2.2 讀取數(shù)據(jù)xlsread函數(shù),xlsread函數(shù)語法: 2. data= xlsread
5、(filename, sheet, range) 輸入?yún)?shù): filename:目標(biāo)文件地址 sheet:數(shù)據(jù)表名稱,例如excel默認(rèn)表名稱sheet1。 range:數(shù)據(jù)所在位置,例如A1,B13等 輸出參數(shù): data:數(shù)值數(shù)據(jù),2020/8/24,8,2.2 讀取數(shù)據(jù)xlsread函數(shù),%數(shù)據(jù)位置為excel.xls文件表1位置為B3:B14的列數(shù)據(jù) Hs300Price=xlsread(excel.xls, 1, B3:B14) Hs300Vol=xlsread(excel.xls, 1, C3:C14) 結(jié)果輸出:,Hs300Price = 982.7900 992.5600 96
6、7.4500 974.6900 967.2100,Hs300Vol = 418 994 740 183 973 314,2020/8/24,9,2.3 寫入數(shù)據(jù)xlswrite函數(shù),xlswrite函數(shù)語法: status, message=xlswrite(filename,M,sheet,range) 輸入?yún)?shù): filename:目標(biāo)文件地址 M:寫入excel中的數(shù)據(jù),M存儲(chǔ)數(shù)據(jù)的變量名稱; Sheet:寫入excel中的sheet名稱(若空默認(rèn)sheet1); Range:寫入excel中的單元格區(qū)域(若空默認(rèn) A1); 輸出參數(shù): status:寫入狀態(tài)?!?”表示寫入成功“0”表
7、示寫入失敗 message:若失敗,則顯現(xiàn)失敗信息,2020/8/24,10,2.3 寫入數(shù)據(jù)xlswrite函數(shù),%生成隨機(jī)數(shù)據(jù) X=randn(1,10); %將X隨機(jī)數(shù)據(jù)寫入excel文件,表“sheet2”中 status, message=xlswrite(excel.xls, X, sheet2) 結(jié)果輸出 status =1 %表示寫入成功 message = message: identifier: ,2020/8/24,11,2.3 寫入數(shù)據(jù)xlswrite函數(shù),如果寫入的是字符,使用aa與aa的效果完全不同,aa得到的結(jié)果是excel兩個(gè)單元格都是a, aa得到的結(jié)果是ex
8、cel一個(gè)單元格是aa。 status1, message1 = xlswrite(funddata0.xls,aa,sheet1) status2, message2 = xlswrite(funddata0.xls,aa,sheet2),2020/8/24,12,2.4 交互界面uiimport函數(shù),uiimport函數(shù)的語法 1.uiimport 在命令窗口輸入uiimport命令,出現(xiàn)文件選擇窗口; 2uiimport(filename) 表示打開數(shù)據(jù)文件filename; 3uiimport(-file) 表示在當(dāng)前文件夾內(nèi)選擇數(shù)據(jù)文件; 4uiimport(-pastespecia
9、l) 表示打開當(dāng)前剪貼板中的數(shù)據(jù); 5s = uiimport(.)表示將數(shù)據(jù)文件按結(jié)構(gòu)存儲(chǔ)在s中,2020/8/24,13,2.4 交互界面uiimport函數(shù),2020/8/24,14,3 Excel-Link宏,如果excel文件數(shù)據(jù)量太大(1GB)以上,使用函數(shù)進(jìn)行數(shù)據(jù)交互存在一定問題,例如Java內(nèi)存溢出等等。數(shù)據(jù)量較大的時(shí)候可以使用Excel-Link宏進(jìn)行數(shù)據(jù)交互。Matlab提供使其能與excel互動(dòng)操作的Excel-link宏。Excel-link使得數(shù)據(jù)在matlab與excel之間隨意交換,以及在excel下調(diào)用matlab的函數(shù)。Excel-link將matlab的強(qiáng)大
10、的數(shù)值計(jì)算功能、數(shù)據(jù)可視化功能與excel的數(shù)據(jù)Sheet功能結(jié)合在一起。,2020/8/24,15,3.1加載Excel-link宏,加載方法:在excel工具 -加載宏 -瀏覽(matlab的安裝路徑)-toolbox文件夾 -exlink文件夾 -excllink.xla文件(雙擊打開) 回到加載宏界面:在Excel link2.3 for use with matlab選項(xiàng)上打勾,點(diǎn)擊確定。 若excel的左上方出現(xiàn)startmatlab、putmatrix、getmatrix、evalstring等選項(xiàng),說明excel-link加載成功。,2020/8/24,16,3.2 使用Exc
11、el-link宏,startmatlab:點(diǎn)擊啟動(dòng)matlab putmatrix:將Excel的數(shù)據(jù)傳輸?shù)絤atlab中 在matlab中:可看到傳入到matlab中的矩陣x,計(jì)算y=sin(x) getmatrix:將matlab的數(shù)據(jù)傳輸?shù)絜xcel中,2020/8/24,17,3.3 Excel2007加載與使用宏,加載方法: 點(diǎn)擊excel的office按鈕 -點(diǎn)擊excel選項(xiàng) - 在加載項(xiàng)中點(diǎn)擊轉(zhuǎn)到 瀏覽(matlab的安裝路徑) - toolbox文件夾 - exlink文件夾 - excllink.xla文件(打開) 使用方法: 在excel2007加載項(xiàng)下可以發(fā)現(xiàn)exlin
12、k相關(guān)的按鈕,具體使用方法與exlink在excel2003中的使用方法一樣。,2020/8/24,18,4 交互實(shí)例,4.1基金相關(guān)性的計(jì)算 例:funddata.xls中存儲(chǔ)著滬深300指數(shù)的價(jià)格與博時(shí)主題行業(yè)、嘉實(shí)滬深300、南方績(jī)優(yōu)成長(zhǎng)的復(fù)權(quán)數(shù)據(jù),要求計(jì)算出每只基金的與滬深300指數(shù)的相關(guān)性。 注:基金的收益率、波動(dòng)率的計(jì)算應(yīng)該采用基金的復(fù)權(quán)凈值(即分紅再投資凈值)。由于基金存在分紅,即分紅前后基金凈值存在較大差距,將對(duì)基金收益率與波動(dòng)率計(jì)算造成影響,所以要使用復(fù)權(quán)凈值進(jìn)行計(jì)算。,2020/8/24,19,4.1 基金相關(guān)性的計(jì)算,M程序如下: typ, desc, fmt = xls
13、finfo(funddata.xls) %文件信息 data,textdate= xlsread(funddata.xls); %讀取數(shù)據(jù) R = corrcoef(data) %計(jì)算相關(guān)性 status, message = xlswrite (funddata.xls, R, sheet2, B2:E5) %寫入到excel數(shù)據(jù) textdate=textdate(2,2:5) %行名稱與列名稱 status, message = xlswrite (funddata.xls, textdate, sheet2, B1:E1) status, message = xlswrite (fun
14、ddata.xls, textdate, sheet2, A2:A5) %textdate表示轉(zhuǎn)置即將行變?yōu)榱?2020/8/24,20,4.1 基金相關(guān)性的計(jì)算,運(yùn)行結(jié)果: R =1.00000.90390.99880.9658 0.90391.00000.88620.9730 0.99880.88621.00000.9548 0.96580.97300.95481.0000 textdate = 滬深300博時(shí)主題行業(yè)嘉實(shí)滬深300南方績(jī)優(yōu)成長(zhǎng),2020/8/24,21,4.2 多個(gè)文件的讀取和寫入,在實(shí)際的項(xiàng)目編程中,很多時(shí)候遇到從很多文件中讀取數(shù)據(jù),若逐個(gè)文件進(jìn)行手工操作不僅身心疲憊,
15、而且容易出錯(cuò)。例如,指數(shù)成分股與權(quán)重?cái)?shù)據(jù)每天一個(gè)Excel,文件名為:000016weightnextday20100104.xls、000016weightnextday20110630.xls,000016weightnextday20120104.xls等,程序化讀取的關(guān)鍵是將文件名自動(dòng)化。,2020/8/24,22,4.2 多個(gè)文件的讀取和寫入,DataNum=9; %要讀取文件數(shù)量 Data.Code=zeros(50,DataNum); %定義變量并分配內(nèi)存 Data.ClosePrice=zeros(50,DataNum); Data.CFMValue=zeros(50,Data
16、Num); Data.Weight=zeros(50,DataNum); fileName=000016weightnextday; %文件名固定部分 fileDate=20100104 20100630 20100701 20101231 20110104 201106302011070120111230 20120104; %文件名變化部分,若變化部分由規(guī)律可以自動(dòng)生成。 for i=1:DataNum TfileName=fileName,num2str(fileDate(i),.xls;%組合文件名,i不同文件名稱不同 %讀取文件中所需的數(shù)據(jù) Data.Code(:,i)=xlsrea
17、d(TfileName,Index Constituents Data,E2:E51 ); Data.ClosePrice(:,i)=xlsread(TfileName,Index Constituents Data,M2:M51 ); Data.CFMValue(:,i)=xlsread(TfileName,Index Constituents Data,P2:P51 ); Data.Weight(:,i)=xlsread(TfileName,Index Constituents Data,Q2:Q51 ); end,2020/8/24,23,5 數(shù)據(jù)的平滑處理,在對(duì)時(shí)間序列數(shù)據(jù)(如信號(hào)數(shù)據(jù)
18、或股票價(jià)格數(shù)據(jù))進(jìn)行統(tǒng)計(jì)分析時(shí),或許存在數(shù)據(jù)的缺失或奇異(例如ST股票反復(fù)的停牌),往往需要對(duì)數(shù)據(jù)進(jìn)行平滑處理。 本節(jié)介紹基于MATLAB的數(shù)據(jù)平滑方法,主要介紹smooth函數(shù)、smoothts函數(shù)和medfilt1函數(shù)的用法。,2020/8/24,24,5.1 smooth函數(shù),MATLAB曲線擬合工具箱中提供了smooth函數(shù),用來對(duì)數(shù)據(jù)進(jìn)行平滑處理,其調(diào)用方式如下: yy = smooth(y) yy = smooth(y,span) yy = smooth(y,method) yy = smooth(y,span,method) yy = smooth(y,sgolay,degree
19、) yy = smooth(y,span,sgolay,degree) yy = smooth(x,y,),2020/8/24,25,5.1 smooth函數(shù),1yy = smooth(y) 利用移動(dòng)平均濾波器對(duì)列向量y進(jìn)行平滑處理,返回與y等長(zhǎng)的列向量yy.移動(dòng)平均濾波器的默認(rèn)窗寬為5,yy中元素的計(jì)算方法如下: yy(1) = y(1) yy(2) = (y(1) + y(2) + y(3)/3 yy(3) = (y(1) + y(2) + y(3) + y(4) + y(5)/5 yy(4) = (y(2) + y(3) + y(4) + y(5) + y(6)/5 yy(5) = (y
20、(3) + y(4) + y(5) + y(6) +y(7)/5 ,2020/8/24,26,5.1 smooth函數(shù),2yy = smooth(y,span) 用span參數(shù)指定移動(dòng)平均濾波器的窗寬,span為奇數(shù)。 3yy = smooth(y,method) 用method參數(shù)指定平滑數(shù)據(jù)的方法,method是字符串變量,可用的字符串如表所示。,2020/8/24,27,5.1 smooth函數(shù),4yy = smooth(y,span,method) 對(duì)于由method參數(shù)指定的平滑方法,用span參數(shù)指定濾波器的窗寬。 5yy = smooth(y,sgolay,degree) 利用S
21、avitzky-Golay方法平滑數(shù)據(jù),此時(shí)用degree參數(shù)指定多項(xiàng)式模型的階數(shù)。degree是一個(gè)整數(shù),取值介于0和span-1之間。 6yy = smooth(y,span,sgolay,degree) 用span參數(shù)指定Savitzky-Golay濾波器的窗寬。span必須是一個(gè)正的奇數(shù)。 7yy = smooth(x,y,) 同時(shí)指定x數(shù)據(jù)。,2020/8/24,28,5.1 smooth函數(shù),例如:產(chǎn)生一列正弦波信號(hào),加入噪聲信號(hào),然后調(diào)用smooth函數(shù)對(duì)加入噪聲的正弦波進(jìn)行濾波(平滑處理)。 代碼如下: t = linspace(0,2*pi,500);%產(chǎn)生一個(gè)從0到2*pi
22、的向量,長(zhǎng)度為500 y = 100*sin(t);%產(chǎn)生正弦波信號(hào) %產(chǎn)生500行1列的服從N(0,152)分布的隨機(jī)數(shù),作為噪聲信號(hào) noise = normrnd(0,15,500,1); y = y + noise;%將正弦波信號(hào)加入噪聲信號(hào) figure;%新建一個(gè)圖形窗口 plot(t,y);%繪制加噪波形圖 xlabel(t);%為X軸加標(biāo)簽 ylabel(y = sin(t) +噪聲);%為Y軸加標(biāo)簽,2020/8/24,29,5.1 smooth函數(shù),yy1 = smooth(y,30);%利用移動(dòng)平均法對(duì)y進(jìn)行平滑處理 figure;%新建一個(gè)圖形窗口 plot(t,y,k
23、:);%繪制加噪波形圖 hold on; plot(t,yy1,k,linewidth,3);%繪制平滑后波形圖 xlabel(t);ylabel(moving);legend(加噪波形,平滑后波形); yy5 = smooth(y,30,sgolay,3);%利用sgolay方法對(duì)y進(jìn)行平滑處理 figure;%新建一個(gè)圖形窗口 plot(t,y,k:);%繪制加噪波形圖 hold on; plot(t,yy5,k,linewidth,3);%繪制平滑后波形圖 xlabel(t);ylabel(sgolay);legend(加噪波形,平滑后波形);,2020/8/24,30,5.1 smoo
24、th函數(shù),2020/8/24,31,5.2 smooths函數(shù),MATLAB金融工具箱中提供了smoothts函數(shù),也可用來對(duì)數(shù)據(jù)進(jìn)行平滑處理,其調(diào)用方式如下: output = smoothts(input) output = smoothts(input, b, wsize) output = smoothts(input, g, wsize, stdev) output = smoothts(input, e, n) smoothts函數(shù)的輸入?yún)?shù)input是一個(gè)金融時(shí)間序列對(duì)象或行導(dǎo)向矩陣。以上調(diào)用方式中的b,g,或e表示不同的數(shù)據(jù)平滑方法,其中b表示盒子法(Box method,默認(rèn)
25、情況),g表示高斯窗方法(Gaussian window method),e表示指數(shù)法(Exponential method),2020/8/24,32,5.2 smooths函數(shù),例如:現(xiàn)有上海股市日開盤價(jià)、最高價(jià)、最低價(jià)、收盤價(jià)、收益率等數(shù)據(jù),時(shí)間跨度為2005年1月4日至2007年4月3日,共510組數(shù)據(jù)。完整數(shù)據(jù)保存在文件StockPriceData.xls中,其中部分?jǐn)?shù)據(jù)如圖所示。試調(diào)用smoothts函數(shù)對(duì)日收盤價(jià)數(shù)據(jù)進(jìn)行平滑處理。 具體代碼見m_3_5_2.m,2020/8/24,33,5.2 smooths函數(shù),2020/8/24,34,5.3 medfilt1函數(shù),MATLAB信號(hào)處理工具箱中提供了medfilt1函數(shù),用來對(duì)信號(hào)數(shù)據(jù)進(jìn)行一維中值濾波,其調(diào)用方式如下: y = medfilt1(x,n) %對(duì)向量x進(jìn)行一維中值濾波,返回與x等長(zhǎng)的向量y。 y = medfilt1(x,n,blksz) %用for循環(huán),每次循環(huán)輸出blksz個(gè)計(jì)算值,默認(rèn)情況下,blksz = length(x) y = medfilt1(x,n,blksz,dim) %用dim參數(shù)指定沿x
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026年數(shù)字光影藝術(shù)展項(xiàng)目可行性研究報(bào)告
- 豆類種植技術(shù)試題及答案
- 全國(guó)技能鑒定工具鉗工三級(jí)試卷及答案
- 三級(jí)教育班組級(jí)安全教育試題及答案
- 軟件開發(fā)技術(shù)服務(wù)合同
- 2025年工業(yè)機(jī)器人系統(tǒng)運(yùn)維師實(shí)操試卷模擬卷及答案
- 2025年詩詞聽寫大賽試題題庫及答案
- 2025年鄉(xiāng)村醫(yī)生公共衛(wèi)生服務(wù)慢性病管理考試題庫及答案
- 《醫(yī)療器械監(jiān)督管理?xiàng)l例》測(cè)試練習(xí)競(jìng)賽考試題及答案
- 極寒天氣供暖應(yīng)急預(yù)案
- 居民自建樁安裝告知書回執(zhí)
- 繼電保護(hù)裝置調(diào)試作業(yè)指導(dǎo)書
- 初中語文仿寫訓(xùn)練
- 老同學(xué)聚會(huì)群主的講話發(fā)言稿
- 天然氣輸氣管線陰極保護(hù)施工方案
- 高血壓?jiǎn)柧碚{(diào)查表
- QC成果提高花崗巖磚鋪裝質(zhì)量
- YS/T 416-2016氫氣凈化用鈀合金管材
- GB/T 25156-2010橡膠塑料注射成型機(jī)通用技術(shù)條件
- GB/T 20878-2007不銹鋼和耐熱鋼牌號(hào)及化學(xué)成分
- 第六章 亞洲 第一節(jié) 概述
評(píng)論
0/150
提交評(píng)論