有谁知道如何获取适用于从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.
由于
答案 0 :(得分:4)
首先,如果您仔细阅读文档:
注意一次检索多个证券的历史数据 雅虎不支持。您只能获取历史数据 一次一个安全。
所以你必须一次指定一个......
至于另一部分,这是我尝试的一个例子:
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。有一个更新的基于REST的API,用于使用返回XML / JSON的YQL访问数据,但我没有相关经验。你可以玩YQL console但是...... {/ p>
HTH
我刚刚在MATLAB R2016b中对上述内容进行了测试,雅虎财经API似乎发生了变化;如果基数不是美元,它不再返回历史货币汇率。换句话说,使用的符号只能是???=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控制台query,如下所示:
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 clues符合URL中参数的含义。)
如果您要查找支持的货币符号列表,请参阅此API调用:
http://finance.yahoo.com/webservice/v1/symbols/allcurrencies/quote
对于它的价值,似乎Yahoo Finance API从未打算用作公共服务!引用this answer:
缺少文档的原因是我们没有财务API 。似乎有些人反向设计了一个用于提取财务数据的API,但他们违反了我们的服务条款(没有重新分配财务数据)这样做,所以我鼓励您避免使用这些网络服务。
所以不能保证它将来不会破裂......
答案 1 :(得分:0)
YQL只是在后台使用“旧”CSV API作为基础,因为YQL是CSV API的容器。区别仅在于请求类型(REST或YQL)。结果是一样的。