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

如何用Python获取到期前30天特定行权价的期权历史价格

解决yfinance获取指定到期日/行权价的期权历史价格问题

原代码核心问题

  1. yf.download不支持直接获取期权历史数据,也没有expiration_date参数,该接口仅用于股票/指数行情下载
  2. 行权参数strike="at-the-money"是无效值,必须传入具体行权价数值(比如140)
  3. 函数调用与定义不匹配:调用时未传递strike和option_type参数,导致筛选逻辑失效

正确实现方案

要获取历史日期T时,距离到期日还有30天、行权价为X的期权价格,需分两步:

  • 找到到期日为T+30天的对应行权价期权合约
  • 获取该合约在日期T的历史行情数据

以下是可运行的代码实现:

import yfinance as yf
import datetime as dt

def get_option_price_at_t_minus_30(ticker_symbol, target_strike, target_date, option_type="call"):
    # 计算到期日:目标日期 + 30天
    expiration_date = target_date + dt.timedelta(days=30)
    exp_str = expiration_date.strftime("%Y-%m-%d")
    
    # 初始化标的Ticker对象
    ticker = yf.Ticker(ticker_symbol)
    
    # 获取指定到期日的期权链
    try:
        opt_chain = ticker.option_chain(exp_str)
    except Exception as e:
        print(f"获取到期日{exp_str}的期权链失败: {str(e)}")
        return None
    
    # 筛选对应类型的期权合约
    contracts = opt_chain.calls if option_type == "call" else opt_chain.puts
    target_contract = contracts[contracts["strike"] == target_strike]
    
    if target_contract.empty:
        print(f"到期日{exp_str}无行权价{target_strike}的{option_type}期权")
        return None
    
    # 获取目标合约的历史数据(取target_date当天的行情)
    contract_symbol = target_contract["contractSymbol"].iloc[0]
    contract_ticker = yf.Ticker(contract_symbol)
    hist_data = contract_ticker.history(start=target_date, end=target_date + dt.timedelta(days=1))
    
    if hist_data.empty:
        print(f"合约{contract_symbol}在{target_date.strftime('%Y-%m-%d')}无历史数据")
        return None
    
    # 返回当天收盘价(回测中常用收盘价作为当日价格)
    return hist_data["Close"].iloc[0]

# 示例调用
if __name__ == "__main__":
    # 目标日期:我们要获取期权价格的那天
    target_date = dt.datetime(2023, 9, 20)
    # 获取AAPL在该日期、距离到期日30天、行权价140的看涨期权价格
    option_price = get_option_price_at_t_minus_30("AAPL", 140, target_date, "call")
    print(f"期权价格: {option_price}")

注意事项

  • yfinance的期权链数据仅能获取当前及未来的到期合约,较久的历史到期合约可能无法获取(受限于雅虎财经数据源)
  • 若回测需要大量历史期权数据,建议考虑专业期权数据服务
  • 历史合约行情数据可能存在缺失,需做好异常处理逻辑

内容的提问来源于stack exchange,提问作者Hello

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 05:14:53