2

Yahooから通貨ペアを取得するために機能する日付の範囲を取得する方法を知っている人はいますか?以下のコードは、必要な最新のレートをキャプチャするために正常に機能しますか?ある範囲の日付について、同じ情報の完全な時系列またはマトリックスを探しています。Mathworks.comの例を使用してみましたが、以下にエラーが表示されます。このコードは正常に機能します。

Connect = yahoo;
k = {'USDJPY=X' 'USDEUR=X' 'USDCAD=X' 'USDGBP=X'};
data = fetch(Connect, k)

どこ

USDJPY=X = USD to JPY
USDEUR=X = USD to EUR
etc...

ある範囲の日付を実行すると、次のエラーが発生します。

>> data = fetch(Connect, k, '24-Oct-2003',datestr(now))
Warning: Historical data fetch does not support multiple security input.
USDJPY=X data reurned. 
> In yahoo.fetch at 310
??? Error using ==> yahoo.fetch at 363
Unable to return historical data for given security.

ありがとう

4

2 に答える 2

4

まず、ドキュメントを注意深く読んだ場合:

注 複数の証券の履歴データを一度に取得することは、Yahoo ではサポートされていません。一度に取得できる証券の履歴データは 1 つだけです。

そのため、一度に 1 つずつ指定する必要があります...

他の部分については、ここに私が試した例があります:

conn = yahoo;
data = fetch(conn, 'EURUSD=X', '01-Jun-2011', datestr(now,'dd-mmm-yyyy'), 'd');
close(conn)

d = [
    {'date' 'open' 'high' 'low' 'close' 'volume' 'adj-close'}
    cellstr(datestr(data(:,1))) num2cell(data(:,2:end))
];

私は得る:

>> d = 
    'date'          'open'   'high'   'low'    'close'    'volume'    'adj-close'
    '15-Jul-2011'   [1.41]   [1.41]   [1.41]   [ 1.41]    [     0]    [     1.41]
    '14-Jul-2011'   [1.42]   [1.42]   [1.42]   [ 1.42]    [     0]    [     1.42]
    ....
    '02-Jun-2011'   [1.45]   [1.45]   [1.45]   [ 1.45]    [     0]    [     1.45]
    '01-Jun-2011'   [1.44]   [1.44]   [1.44]   [ 1.44]    [     0]    [     1.44]

しかし、反対の変換'USDEUR=X'では、次のエラーが発生します。

特定のセキュリティの履歴データを返すことができません。

コードをステップ実行すると、データの取得に使用された URL は次のようになりました。

http://ichart.yahoo.com/table.csv?s=EURUSD=X&a=5&b=1&c=2011&d=6&e=16&f=2011&g=d&ignore=.csv

それをお気に入りのブラウザーに貼り付けると、期待されるデータを含む CSV ファイルが得られます。EURUSDからに変更するとUSDEUR、404 エラーが発生します: Sorry, the page you requested was not found.

これらが正しいコードかどうかはわかりませんが、試してみました: JPY=X, CAD=X, EUR=X,GBP=Xそして、それらはすべて有効な結果を返します...

補足として: 私は簡単な調査を行いました。私が理解したことから、MATLAB 関数は古いYahoo CSV APIを使用しています。XML/JSON を返すYQLを使用してデータにアクセスするための新しい REST ベースの API がありますが、私はその経験がありません。ただし、いじることができるYQLコンソールがあります...

HTH


更新 (2017 年 4 月)

上記を MATLAB R2016b でテストしたところ、Yahoo Finance API で何かが変更されたようです。基準が USD でない場合、過去の通貨の為替レートは返されなくなりました。つまり、使用される記号は次の形式のみです???=X(ここ???で は 3 文字のコードです)。

% US dollar to euro
data = fetch(conn, 'EUR=X', '01-Jun-2011', datestr(now,'dd-mmm-yyyy'), 'd');

% format as table
t = array2table(data, 'VariableNames',{'date' 'open' 'high' 'low' 'close' 'volume' 'adjclose'});
t.date = cellstr(datestr(t.date));
disp(t)

日付または日付範囲を指定しない場合にのみ機能するEURUSD=Xリクエスト:USDEUR=X

data = fetch(conn, 'EURUSD=X')
data = fetch(conn, 'USDEUR=X')

確認するために、次のようなクエリで YQL コンソールを直接使用してみました。

SELECT * 
FROM 
    yahoo.finance.historicaldata 
WHERE 
    symbol = "EUR=X" 
AND 
    startDate = "2017-01-01" 
AND 
    endDate = "2017-04-11"

同様の結果が得られます。シンボルを に変更するUSDEUR=Xと、結果に「404 Not Found」エラーが表示されます

(ところで、YQL クエリでは、同じ CSV エンドポイントが下で使用されます。興味がある場合は、URL のパラメーターの意味の手がかりをいくつか示します)。

サポートされている通貨記号のリストを探している場合は、次の API 呼び出しを参照してください。

http://finance.yahoo.com/webservice/v1/symbols/allcurrencies/quote

価値のあるものとして、Yahoo Finance API は公共サービスとして使用されることを意図していなかったようです! この答えを引用するには:

ドキュメントがないのは、Finance API がないためです。財務データをプルするために使用する API をリバース エンジニアリングした人もいるようですが、これは当社の利用規約 (財務データの再配布なし) に違反しているため、これらの Web サービスの使用を避けることをお勧めします。

今後壊れないという保証はありませんが…

于 2011-07-16T15:09:08.120 に答える
0

YQLはCSV APIのコンテナであるため、YQLはバックグラウンド/ベースとして「古い」CSV APIを使用しているだけです。違いは、リクエスト タイプ (REST または YQL) だけです。結果は同じです。

于 2011-08-03T15:28:31.467 に答える