2011-07-16 49 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)。結果是一樣的。