首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >YQL期权到期

YQL期权到期
EN

Stack Overflow用户
提问于 2011-06-25 19:52:07
回答 4查看 2.7K关注 0票数 3

我正在迁移一些Yahoo Finance CSV/屏幕抓取接口以使用YQL,并努力使用yahoo.finance.options表。如果我查询给定符号的所有选项,则找不到与这些选项相关联的到期日期。如果我查询符号和过期,那么我会找到与链关联的过期日期,但找不到其中的选项。虽然我熟悉期权到期的周期,并且可以从给定的日期启动它,但这是一个糟糕的解决方案;首先,它会生成更多的查询。我更喜欢从数据中反思它,因为它应该是可用的(它可以是屏幕抓取的)。有谁知道如何在YQL中做到这一点,还是我不走运?

下面是我正在使用的一些python代码:

代码语言:javascript
复制
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
EN

回答 4

Stack Overflow用户

发布于 2012-02-02 13:10:19

您可以进一步利用YQL链接查询的能力

代码语言:javascript
复制
SELECT * FROM yahoo.finance.options WHERE symbol="%s" AND expiration in (SELECT contract FROM yahoo.finance.option_contracts WHERE symbol="%s")

很明显,%s是您要查找的符号。这将从所有可用的到期日期中提取所有选项链,并为您节省多个查询。

票数 4
EN

Stack Overflow用户

发布于 2011-06-25 20:52:00

如果您不在YQL查询中设置过期日期,那么我认为数据集的过期日期将是该月即将到来的third Friday。使用dateutil,您可以使用以下命令在Python语言中定义此日期:

代码语言:javascript
复制
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查询,例如:

代码语言:javascript
复制
chain = YQL.query('''
    select * from yahoo.finance.options
    where symbol="WFC" and expiration="2011-08"''')[0]

可以在一个YQL查询中获得多个过期的数据:

代码语言:javascript
复制
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密钥:

代码语言:javascript
复制
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)

收益率

代码语言:javascript
复制
{'symbol': 'WFC', 'expiration': '2011-08-19'}
{'symbol': 'WFC', 'expiration': '2011-10-21'}
{'symbol': 'WFC', 'expiration': '2012-01-20'}
票数 1
EN

Stack Overflow用户

发布于 2011-10-13 05:06:58

要获得可用合同日期列表,请使用yahoo.finance.option_contracts。要继续您的代码(我很欣赏),您可以打印所有可能的看跌期权,如下所示:

代码语言:javascript
复制
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='+ expiration
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6477551

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档