R中获取Yahoo期权数据时出错?Python或C#更好的示例?

-1 投票
1 回答
1122 浏览
提问于 2025-04-16 19:49

我正在尝试运行一个R脚本,地址是: http://www.math.tu-berlin.de/~mkeller/R-progs/yahoo_opt.R 相关描述在这里: http://www.math.tu-berlin.de/~mkeller/index.php?target=rcode

我对R还很陌生,但当我按照指示运行以下代码时,遇到了一个很奇怪的错误:

opt <- yahoo.getAllOptions("IBM")

错误信息是:

尝试访问网址 'http://finance.yahoo.com/q/op?s=IBM&m=2011-06' 内容类型为 'text/html; charset=utf-8',长度未知 已打开网址 下载了57 Kb

读取了2616个项目 在yahoo.getOption(ticker = ticker, maturity = mat[j], get.short.rate = FALSE)中出错: 意外的数据格式

有没有人知道怎么解决这个问题?我对R很陌生,这可能是个新手问题,但我真的不知道该怎么办。 有没有人知道用C#或Python的更好示例?我不介意,我只想获取Yahoo的期权数据。 谢谢

1 个回答

0

你听说过YQL控制台和datatables.org吗?它们可以通过REST请求访问很多Yahoo(还有其他)数据表,返回的结果是XML或JSON格式的对象。你可以很方便地用Python的urllib来访问一个很不错的选项表。看看下面这个例子:

>>> import urllib2
>>> import json
>>> url='http://query.yahooapis.com/v1/public/yql?q=SELECT%20*%20FROM%20yahoo.finance.options%20WHERE%20symbol%3D\"goog\"%20AND%20expiration%3D\"2011-08\"&format=json&env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys&callback='
>>> req = urllib2.Request(url)
>>> response = urllib2.urlopen(req)
>>> result = json.loads(response.read())

这里的结果是一个JSON对象,里面包含了GOOG(谷歌)的所有选项,过期时间是2011年8月。如果你仔细看这个网址,你会看到谷歌的股票代码和过期日期。这个内容可以通过编程轻松修改。

>>> result['query']['results']['optionsChain']['option'][0]
{u'strikePrice': u'400', u'lastPrice': u'110.10', u'vol': u'1', u'type': u'C', u'symbol': u'GOOG110820C00400000', u'openInt': u'9', u'ask': u'90.5', u'changeDir': None, u'bid': u'87', u'change': u'0'}
>>> result['query']['results']['optionsChain']['option'][10]
{u'strikePrice': u'490', u'lastPrice': u'21.20', u'vol': u'350', u'type': u'C', u'symbol': u'GOOG110820C00490000', u'openInt': u'56', u'ask': u'21.3', u'changeDir': u'Down', u'bid': u'20.8', u'change': u'-6.9'}

另外,你也可以选择返回XML格式的结果。

在谷歌上搜索“yql console”,点击第一个链接。在右侧,点击“显示社区表格”的链接。向下滚动找到Yahoo,点击yahoo.finance.options。接下来你应该能搞定剩下的事情 :)

撰写回答