2011-07-16 29 views
2

有谁知道如何获取从Yahoo获取货币对的日期范围?下面的代码适用于捕获所需的最新费率吗?我正在寻找一个完整的时间序列或一系列日期相同信息的矩阵。我尝试使用来自Mathworks.com的示例,但在下面显示错误。此代码工作正常:Yahoo在Matlab中提取货币?

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

首先,如果你仔细阅读文档:

Note Retrieving historical data for multiple securities at one time is not supported for Yahoo. You can fetch historical data for only a single security at a time.

所以,你必须指定一次一个......

至于其他部分,这里是我试过一个例子:

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',您会收到错误:

Unable to return historical data for given security.

通过通过代码,用来获取数据的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=XCAD=XEUR=XGBP=X,他们都返回有效结果...

作为一个方面说明:我已经做了一个快速的研究,从我的理解,MATLAB的功能是使用旧的Yahoo CSV API。有一个更新的基于REST的API用于访问使用YQL的数据,该数据返回XML/JSON,但我没有这方面的经验。有一个YQL console你可以玩的,但...

HTH


更新(2017年4月)

我只是测试上述在MATLAB R2016b,似乎什么东西在改变雅虎财经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=XUSDEUR=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未找到”错误(BTW的YQL查询使用相同的CSV端点之下。如果你有兴趣,这里有someclues来的意思URL中的参数)。

如果您正在寻找支持的货币符号的列表,请参阅该API调用:

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

对于它的价值,它看来,雅虎财经API从来就不是被用作公共服务!引述this answer

The reason for the lack of documentation is that we don't have a Finance API. It appears some have reverse engineered an API that they use to pull Finance data, but they are breaking our Terms of Service (no redistribution of Finance data) in doing this so I would encourage you to avoid using these webservices.

所以不能保证它不会在未来的突破...

+0

哇!非常感谢。我一次只能使用1个安全性。 –

+0

@heavyrockerdude:很高兴我能帮上忙。考虑将其标记为接受的答案,如果您觉得这已经解决了您的问题... – Amro

+0

不适用于我。这可能过时了吗? – JohnAndrews

0

YQL只是使用背景“老” CSV API /为基础,因为YQL是一个容器为CSV API。区别仅在于请求类型(REST或YQL)。结果是一样的。