雅虎提取数据MATLAB

时间:2013-04-19 14:19:43

标签: 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','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);

你能帮我解决这个问题吗?

1 个答案:

答案 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)。