Во-первых, если вы внимательно прочитали документацию:
Примечание. Получение исторических данных для нескольких ценных бумаг одновременно
не поддерживается для 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-интерфейс, который они используют для получения финансовых данных, но при этом нарушают наши Условия предоставления услуг (без перераспределения финансовых данных), поэтому я призываю вас избегать использования этих веб-сервисов.
Так что никаких гарантий, что оно не сломается в будущем ...