Yahoo获取数据MATLAB

Yahoo获取数据MATLAB,matlab,yahoo,Matlab,Yahoo,我有证券公司的名单。我想下载收盘价并将其存储到变量中。我写了这个剧本: 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','Ap

我有证券公司的名单。我想下载收盘价并将其存储到变量中。我写了这个剧本:

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
当数组中有三个证券时,它会工作,但当数组中有三个以上证券时,它会抛出错误。错误消息如下所示:

Subscripted assignment dimension mismatch.

    Error in fetchDataFromYahoo (line 7)
            ClosePrice(:,i)=temp(:,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
调用的结果(第一行代码):

编辑以处理评论

为了适应矩阵中不同长度的金融时间序列,您需要在缺少特定天数数据的地方填写NAN。您将需要和我的:


您可以在
Out
中看到ABFS、TCB和NE缺少第37行对应的日期(您也可以在D中再次检查此项,缺少日期730539)。

感谢您的回答!然而,我想得到一个包含所有价格的矩阵(不是结构),因为我想应用matlab的price2ret函数。这是一个完全不同的问题,因为你们需要将填充FGP空白点的日期和NAN对齐。你们能详细说明你们的建议吗?什么意思:FGP?谢谢你,奥列格!Спасибо большое, Вы мне очень сильно помогли =)
ans = 
    ABFS: [3337x2 double]
     TCB: [3337x2 double]
      NE: [3337x2 double]
     FGP: [3343x2 double]
% 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{:})]);