【问题标题】:Yahoo fetching currency in Matlab?雅虎在 Matlab 中获取货币?
【发布时间】:2011-10-06 17:30:20
【问题描述】:

有谁知道如何获取适用于从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.

谢谢

【问题讨论】:

    标签: matlab datafeed yahoo-finance


    【解决方案1】:

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

    注意一次检索多个证券的历史数据 不支持雅虎。您只能获取历史数据 一次只有一个安全性。

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

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

    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=XCAD=XEUR=XGBP=X,它们都返回了有效结果...

    附带说明:我进行了快速研究,据我了解,MATLAB 函数使用的是较旧的Yahoo CSV API。有一个更新的基于 REST 的 API 用于使用返回 XML/JSON 的 YQL 访问数据,但我没有这方面的经验。有一个 YQL console 你可以玩玩...

    HTH


    更新(2017 年 4 月)

    我刚刚在 MATLAB R2016b 中测试了上述内容,在 Yahoo Finance API 中似乎发生了一些变化;它不再返回历史货币汇率如果基础不是美元。换句话说,使用的符号只能是???=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=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 Not Found”错误

    (顺便说一句,YQL 查询在下面使用相同的 CSV 端点。如果您感兴趣,这里是 some clues 对 URL 中参数的含义)。 p>

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

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

    不管怎样,Yahoo Finance API 似乎从来没有打算用作公共服务!引用this answer

    缺少文档的原因是我们没有 Finance API。似乎有些人对用于提取财务数据的 API 进行了逆向工程,但他们这样做违反了我们的服务条款(不重新分发财务数据),因此我建议您避免使用这些网络服务。

    所以不能保证它在未来不会崩溃......

    【讨论】:

    • 哇!非常感谢。我可以一次有 1 名保安。
    • @heavyrockerdude:很高兴我能帮上忙。如果您认为这已经解决了您的问题,请考虑将其标记为已接受的答案...
    • 也就是说,不再支持历史数据了。
    • @JohnAndrews 部分支持(仅当基数为美元时)
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2012-12-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-18
      • 2014-12-07
      相关资源
      最近更新 更多