You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过C#版Interactive Brokers API获取SPY的期权到期日?

获取特定标的期权到期日及期权链加载方案

以下是几种常用工具的实现方式,以SPY为例:

1. 使用Python的yfinance库(免费无API密钥)

这是最便捷的免费方案,步骤如下:

  • 先安装库:pip install yfinance
  • 编写代码:
import yfinance as yf
from datetime import datetime

# 获取SPY的期权数据对象
spy = yf.Ticker("SPY")

# 获取所有期权到期日列表(返回字符串格式日期)
expiration_dates = spy.options

# 转换为日期对象并筛选未过期的到期日
today = datetime.today().date()
valid_expirations = []
for date_str in expiration_dates:
    date = datetime.strptime(date_str, "%Y-%m-%d").date()
    if date >= today:
        valid_expirations.append(date_str)

# 排序后取第一个(下一个到期日)
next_expiration = sorted(valid_expirations)[0]

# 加载对应到期日的期权链
option_chain = spy.option_chain(next_expiration)
# 查看认购/认沽期权数据
print("认购期权:", option_chain.calls.head())
print("认沽期权:", option_chain.puts.head())

2. 使用Interactive Brokers(IB)API

专业交易场景常用,需先连接IB网关或TWS客户端:

  • 调用reqSecDefOptParams方法获取SPY的期权定义参数,从中提取到期日列表:
from ibapi.client import EClient
from ibapi.wrapper import EWrapper
from datetime import datetime

class IBApp(EWrapper, EClient):
    def __init__(self):
        EClient.__init__(self, self)
        self.expirations = []

    def securityDefinitionOptionParameter(self, reqId, exchange, underlyingConId, tradingClass, multiplier, expirations, strikes):
        # 提取到期日列表并筛选未过期的
        self.expirations = expirations
        today = datetime.today().strftime("%Y%m%d")
        valid_exp = [e for e in expirations if e >= today]
        next_exp = sorted(valid_exp)[0]
        print("下一个到期日:", next_exp)
        # 后续可调用reqContractDetails加载对应到期日的期权链

app = IBApp()
app.connect("127.0.0.1", 7497, 0)
# 请求SPY的期权参数(SPY的conId可通过reqContractDetails提前获取)
app.reqSecDefOptParams(0, "SPY", "", "STK", 756733)
app.run()

3. 使用TD Ameritrade API

需先申请API密钥,核心逻辑:

  • 调用GET /v1/marketdata/chains接口,不带expirationDate参数时,返回结果的expirationDates字段即为所有到期日列表
  • 筛选出大于当前日期的到期日,取排序后的第一个作为下一个到期日
  • 再次调用该接口并带上expirationDate参数,即可获取对应日期的期权链

关键注意点

  • 筛选到期日时务必排除已过期日期,避免加载无效期权链
  • 不同工具返回的日期格式可能存在差异(如yfinance是YYYY-MM-DD,IB是YYYYMMDD),需统一格式后再做对比

内容的提问来源于stack exchange,提问作者Petr Žampach

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 23:52:47