2017-01-06 49 views
0

我试图通过将下面的代码来下载符号MACQ的数据: getSymbols.yahoo("MACQ",.GlobalEnv,from="2010-02-02",to="2016-12-28")quantmod`getSymbols.yahoo`使用不正确的日期(月数),并创建无效的URL

不过,我收到错误的警告:

Error in download.file(paste(yahoo.URL, "s=", Symbols.name, "&a=", from.m, : 
cannot open URL 'http://ichart.finance.yahoo.com/table.csv?s=MACQ&a=1&b=02&c=2010&d=11&e=28&f=2016&g=d&q=q&y=0&z=MACQ&x=.csv' 
In addition: Warning message: 
In download.file(paste(yahoo.URL, "s=", Symbols.name, "&a=", from.m, : 
cannot open URL 'http://ichart.finance.yahoo.com/table.csv?s=MACQ&a=1&b=02&c=2010&d=11&e=28&f=2016&g=d&q=q&y=0&z=MACQ&x=.csv': HTTP status was '404 Not Found' 

从上述消息可以看出,下列URL正在使用: “http://ichart.finance.yahoo.com/table.csv?s=MACQ&a=1&b=02&c=2010&d=11&e=28&f=2016&g=d&q=q&y=0&z=MACQ&x=.csv

如果你复制/粘贴此网址到网页浏览器中,你将会真的遇到Yahoo! 404找不到问题。

但是,如果仔细查看网址,您会注意到它在URL中使用了不正确的日期引用,从而创建了无效的url链接。第一个“错误”是开始日期(即月份)写入地址为1&b,但它应该写为02&b,并且结束月份11&e应该是12&e

所以链接: http://ichart.finance.yahoo.com/table.csv?s=MACQ&a=1&b=02&c=2010&d=11&e=28&f=2016&g=d&q=q&y=0&z=MACQ&x=.csv

应该是这个样子的: http://ichart.finance.yahoo.com/table.csv?s=MACQ&a=02&b=02&c=2010&d=12&e=28&f=2016&g=d&q=q&y=0&z=MACQ&x=.csv

为什么使用不正确的日期,以及如何预防呢?这发生在我身上时才使用“MACQ”符号。

+0

看起来你可以在这里用'quantmod'报告问题:https://github.com/joshuaulrich/quantmod/issues;你可以考虑在那里发布你的例子,直接与软件包作者联系。 –

回答

1

看起来好像是因为MACQ ticker on Yahoo没有太多的历史记录,因此日期超出了范围。 Google Finance证实了这一点,它似乎股票只有价格数据回到2016年12月16日。

+0

是的,但事情是,我想下载从特定日期的许多股票的每日报价。我为它创建了一个循环。但是,如果我遇到无法下载数据的股票,我会返回一个错误,并停止整个循环。 为了防止这种情况,我通过应用url.exists() 来检查url是否可用为此,我创建了与getSymbols中相同的url结构。 MACQ能够绕过url.exists,但是在getSymbols中遇到问题,因为由于某种原因使用此股票,url的结构会发生变化。 –

+0

@PatAmat:查看[这个问题]的答案(http://stackoverflow.com/q/27892150/271616)。 tl; dr是:使用'try'来捕获错误并在不中断循环的情况下跳过代码。 –

+0

非常感谢。这就是我现在正在寻找的! –

0

URL中的日期是不是不正确。月份应该是以零为基础,而不是以一为主。

我不知道为什么会发生这种情况"MACQ",但它可能与可用的非常短的历史数据有关。 historical data page for MACQ最古老的观测是2016-12-23。如果您下载"MACQ"的所有数据,则只能获得2017-01-03到2017-01-05。

另请注意,您不应直接拨打getSymbols.yahoo(如?getSymbols.yahoo中所述)。

相关问题