我正在迁移一些Yahoo Finance CSV/屏幕抓取接口以使用YQL,并努力使用yahoo.finance.options表。如果我查询给定符号的所有选项,则找不到与这些选项相关联的到期日期。如果我查询符号和过期,那么我会找到与链关联的过期日期,但找不到其中的选项。虽然我熟悉期权到期的周期,并且可以从给定的日期启动它,但这是一个糟糕的解决方案;首先,它会生成更多的查询。我更喜欢从数据中反思它,因为它应该是可用的(它可以是屏幕抓取的)。有谁知道如何在YQL中做到这一点,还是我不走运?
下面是我正在使用的一些python代码:
from xml.etree.ElementTree import ElementTree
import urllib, urllib2
class YQL(object):
url = 'http://query.yahooapis.com/v1/public/yql'
env = 'store://datatables.org/alltableswithkeys'
format = 'xml'
@classmethod
def query(cls, string):
q = urllib.quote(string)
url = cls.url + '&'.join(('?q=%s' % q, 'env=%s' % cls.env,
'format=%s' % cls.format))
resp = urllib2.urlopen(url)
return ElementTree(file=resp).getroot().find('results')[:]
chain = YQL.query('select * from yahoo.finance.options where symbol="WFC"')[0]
chain.attrib
option = chain[0]
option.attrib
for attr in option:
print attr.tag, attr.text发布于 2012-02-02 13:10:19
您可以进一步利用YQL链接查询的能力
SELECT * FROM yahoo.finance.options WHERE symbol="%s" AND expiration in (SELECT contract FROM yahoo.finance.option_contracts WHERE symbol="%s")很明显,%s是您要查找的符号。这将从所有可用的到期日期中提取所有选项链,并为您节省多个查询。
发布于 2011-06-25 20:52:00
如果您不在YQL查询中设置过期日期,那么我认为数据集的过期日期将是该月即将到来的third Friday。使用dateutil,您可以使用以下命令在Python语言中定义此日期:
import dateutil.relativedelta as relativedelta
import dateutil.rrule as rrule
import datetime as dt
expiration=rrule.rrule(
rrule.MONTHLY,
byweekday=(relativedelta.FR(3)), dtstart=dt.datetime.now())[0](注意:上面的代码忽略了假日,在这种情况下,到期日期将是第三个星期四...如果你使用这个代码,一定要检查雅虎决定在当前日期是本月的第三个星期五返回什么--我不确定到期日是当前日期,还是下个月的第三个星期五。)
要查看特定到期年/月的期权链(除了即将到来的第三个星期五),您可以使用YQL查询,例如:
chain = YQL.query('''
select * from yahoo.finance.options
where symbol="WFC" and expiration="2011-08"''')[0]可以在一个YQL查询中获得多个过期的数据:
chains = YQL.query('''
select * from yahoo.finance.options
where symbol="WFC" and (
expiration="2011-08" or
expiration="2011-10" or
expiration="2012-01"
)
''')有趣的是,当请求多个过期的数据时,chain.attrib确实包含一个expiration密钥:
for chain in chains:
print(chain.attrib)
# for option in chain:
# print(option.attrib)
# for attr in option:
# print attr.tag, attr.text
# print('-'*80)收益率
{'symbol': 'WFC', 'expiration': '2011-08-19'}
{'symbol': 'WFC', 'expiration': '2011-10-21'}
{'symbol': 'WFC', 'expiration': '2012-01-20'}发布于 2011-10-13 05:06:58
要获得可用合同日期列表,请使用yahoo.finance.option_contracts。要继续您的代码(我很欣赏),您可以打印所有可能的看跌期权,如下所示:
xml_dates = YQL.query('select * from yahoo.finance.option_contracts where ' +
'symbol="HYG"')[0]
dates = []
for attr in xml_dates:
print attr.tag, attr.text
dates.append(attr.text)
for expiration in dates:
xml_contracts = YQL.query('select * from yahoo.finance.options where '
+'symbol="HYG" AND expiration="' + expiration +'"')
for option in xml_contracts[0]:
if (option.attrib['type']=='P'):
print 'Put: strike=' + option.findtext('strikePrice')+ ', lowball '
+ 'ask=' + option.findtext('ask') + ', date='+ expirationhttps://stackoverflow.com/questions/6477551
复制相似问题