我有以下代码来读取时间序列数据(包含在 Excel 工作簿的第 5 到 19 页中)。每个工作表的标题为“TS”,后跟时间序列的编号。除了一件事之外,该过程运行良好 - 当我研究回报时,我发现所有时间序列都移动了 5。即 TS 6 成为“回报”数据中的第 11 列,TS 19 成为第 5 列,TS 15成为第一列等。我需要它们的顺序与它们被读取的顺序相同-例如 TS 1 在第一列,TS 2 在第二列等。这是一个问题,因为我读出了工作表的标题(“资产列表”)在后续代码中保持其实际顺序。因此,当我重新组合标题和回报时,我发现它们不匹配。这使得进一步的操作变得复杂,当,
XL='TimeSeries.xlsx';
formatIn = 'dd/mm/yyyy';
formatOut = 'mmm-dd-yyyy';
Bounds=3;
[Bounds,~] = xlsread(XL,Bounds);
% 确定 xls 文件中的工作表数量:
FirstSheet=5;
[~,AssetList] = xlsfinfo(XL);
lngth=size(AssetList,2);
AssetList(:,1:FirstSheet-1)=[];
% 循环遍历张数和 RETRIEVE VALUES
merge_count = 1;
for I=FirstSheet:lngth
[FundValues, ~, FundSheet] = xlsread(XL,I);
% 提取日期和数据并合并 %(删除第 1 到 4 行中不必要的文本)
Fund_dates_data = FundSheet(4:end,1:2);
FundDates = cellstr(datestr(datevec(Fund_dates_data(:,1),...
formatIn),formatOut));
FundData = cell2mat(Fund_dates_data(:,2));
% CREATE TIME SERIES FOR EACH FUND
Fundts{I}=fints(FundDates,FundData,['Fund',num2str(I)]);
if merge_count == 2
Port = merge(Fundts{I-1},Fundts{I},'DateSetMethod','Intersection');
end
if merge_count > 2
Port = merge(Port,Fundts{I},'DateSetMethod','Intersection');
end
merge_count = merge_count + 1;
end
% 分析投资组合
Returns=tick2ret(Port);
q = Portfolio;
q = q.estimateAssetMoments(Returns)
[qassetmean, qassetcovar] = q.getAssetMoments