我希望將相同的數據分析應用於多個數據時間序列。但是,數據序列的數量是可變的。因此,我不希望對每個系列的分析進行硬編碼,而是希望能夠指定基金的數量和名稱,然後在將它們合併到一個投資組合之前對所有人進行相同的數據處理。 具體而言,我有一個exel文件,其中每個工作表是一個時間序列,其中第一列是日期,第二列是價格。所有基金的日期可能不一致,因此必須對所有基金中發生的日期篩選單個工作表,然後將其組合成一個數據集,其中有一列日期和所有其他列與當前每個基金的數據相對應。 然後分析這個組合數據集的手段和差異等 我目前已經計算出如何進行合併和分析(下面),但我想知道我可以簡單地添加或刪除資金(即通過包括包含excel文件中個人基金數據的新工作表),而無需重新編寫和添加/刪除額外/超額的matlab代碼。多系列運行時間序列分析Matlab
*% LOAD DATA*
XL='XLData.xlsx';
formatIn = 'dd/mm/yyyy';
formatOut = 'mmm-dd-yyyy';
*%SPECIFY WORKSHEETS*
Fund1Prices=3;
Fund2Prices=4;
*%RETRIEVE VALUES*
[Fund1values, ~, Fund1sheet] = xlsread(XL,Fund1Prices);
[Fund2values, ~, Fund2sheet] = xlsread(XL,Fund2Prices);
*%EXTRACT DATES AND DATA AND COMBINE (TO REMOVE UNNECCESSARY TEXT IN ROWS 1
%TO 4) FOR FUND 1.*
Fund1_dates_data=Fund1sheet(4:end,1:2);
Fund1Dates= cellstr(datestr(datevec(Fund1_dates_data(:,1),formatIn),formatOut));
Fund1Data= cell2mat(Fund1_dates_data(:,2));
*%EXTRACT DATES AND DATA AND COMBINE (TO REMOVE UNNECCESSARY TEXT IN ROWS 1
%TO 4) FOR FUND 2.*
Fund2_dates_data=Fund2sheet(4:end,1:2);
Fund2Dates= cellstr(datestr(datevec(Fund2_dates_data(:,1),formatIn),formatOut));
Fund2Data= cell2mat(Fund2_dates_data(:,2));
*%CREATE TIME SERIES FOR EACH FUND*
Fund1ts=fints(Fund1Dates,Fund1Data,'Fund1');
Fund2ts=fints(Fund2Dates,Fund2Data,'Fund2');
*%CREATE PORTFOLIO*
Port=merge(Fund1ts,Fund2ts,'DateSetMethod','Intersection');
*%ANALYSE PORTFOLIO*
Returns=tick2ret(Port);
q = Portfolio;
q = q.estimateAssetMoments(Port)
[qassetmean, qassetcovar] = q.getAssetMoments
謝謝!非常有效!我甚至用不同數量的紙張進行了測試,並且工作非常順利。這很棒,我很開心。感謝您爲此付出的全部努力。 – Mary
@瑪麗很高興幫助(帶我瞭解了一下之後)。我插入了缺少的「結束」。 – Schorsch