我有证券代码清单。我想下载收盘价并将它们存储到变量中。我写了这个剧本:
function y=fetchDataFromYahoo()
ticker={'ABFS','TCB','NE','FGP'};%,'IMO','CAJ','CAG','GMCR','HSH','HAIN','SIM'};
c=yahoo;
for i=1:4
Price.(ticker{i})=fetch(c,ticker(i),'Adj Close','Jan 1 00','Apr 19 13','d');
temp=Price.(ticker{i});
ClosePrice(:,i)=temp(:,2);
end
y=ClosePrice;
end
当我在阵列中有三个证券时它起作用,但是当阵列中有超过3个证券时它会抛出错误。错误消息如下:
Subscripted assignment dimension mismatch.
Error in fetchDataFromYahoo (line 7)
ClosePrice(:,i)=temp(:,2);
你能帮我解决这个问题吗?
答案 0 :(得分:2)
您假设所有系列都是相同的长度。只需将其保留在结构中:
fetchDataFromYahoo({'ABFS','TCB','NE','FGP'})
我将你的功能修改为:
function Price = fetchDataFromYahoo(ticker)
c = yahoo;
for i = 1:numel(ticker)
Price.(ticker{i}) = fetch(c,ticker(i),'Adj Close','Jan 1 00','Apr 19 13','d');
end
end
通话结果(第一行代码):
ans =
ABFS: [3337x2 double]
TCB: [3337x2 double]
NE: [3337x2 double]
FGP: [3343x2 double]
编辑以发表评论
要在矩阵中容纳具有不同长度的金融时间序列,您需要填写缺少特定日期数据的NaN。您需要rude()
和我的Pivot()
:
% Use the modified function that returns a structure
D = fetchDataFromYahoo({'ABFS','TCB','NE','FGP'});
% Convert to cell
C = struct2cell(D);
% Count how many rows each cell
len = cellfun('size',C,1);
% Expand id to match each series length
Out = Pivot([rude(len,1:numel(C))', cat(1,C{:})]);
您可以在Out
中看到ABFS,TCB和NE缺少与第37行相对应的那一天(您也可以在D中仔细检查,缺少日期730539)。