Yahoo покупает валюту в Matlab? - PullRequest
2 голосов
/ 16 июля 2011

Кто-нибудь знает, как получить диапазон дат, который работает для извлечения валютных пар из 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.

Спасибо

Ответы [ 2 ]

4 голосов
/ 16 июля 2011

Во-первых, если вы внимательно прочитали документацию:

Примечание. Получение исторических данных для нескольких ценных бумаг одновременно не поддерживается для Yahoo. Вы можете получить исторические данные только для единый залог за раз.

То есть вы должны указывать по одному ...

Что касается другой части, вот пример, который я попробовал:

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 . Существует более новый API на основе REST для доступа к данным с использованием YQL , который возвращает XML / JSON, но у меня нет никакого опыта в этом. Существует консоль YQL , с которой вы можете поиграть, хотя ...

НТН


Обновление (апрель 2017 г.)

Я только что протестировал вышеупомянутое в MATLAB R2016b, и, похоже, что-то изменилось в Yahoo Finance API; Он больше не возвращает исторические курсы обмена валют , если база не USD . Другими словами, используемый символ может иметь форму только ???=X (где ??? - трехбуквенный код):

% 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 внизу. Если вам интересно, вот some подсказок о значении параметров в URL ).

Если вы ищете список поддерживаемых символов валюты, посмотрите этот вызов API:

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

Что бы это ни стоило, похоже, что Yahoo Finance API никогда не предназначался для использования в качестве публичной службы! Цитировать этот ответ :

Причина отсутствия документации в том, что у нас нет Финансового API . Похоже, что некоторые разработали API-интерфейс, который они используют для получения финансовых данных, но при этом нарушают наши Условия предоставления услуг (без перераспределения финансовых данных), поэтому я призываю вас избегать использования этих веб-сервисов.

Так что никаких гарантий, что оно не сломается в будущем ...

0 голосов
/ 03 августа 2011

YQL просто использует «старый» CSV API в фоновом режиме / в качестве базы, поскольку YQL является контейнером для CSV API. Разница только в типе запроса (REST или YQL). Результаты одинаковы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...