1

私は証券のティッカーのリストを持っています。終値をダウンロードして変数に保存したいと思います。私はこのスクリプトを書きました:

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 つの証券がある場合は機能しますが、配列に 3 つ以上の証券がある場合はエラーがスローされます。エラーメッセージは次のとおりです。

Subscripted assignment dimension mismatch.

    Error in fetchDataFromYahoo (line 7)
            ClosePrice(:,i)=temp(:,2);

これを修正する方法を教えてください。

4

1 に答える 1

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行 37 に対応する日が ABFS、TCB、および NE にないことがわかります (D でこれを再確認することもできます。日付 730539 がありません)。

于 2013-04-19T14:31:10.427 に答える