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

Colab构建0DTE期权隐含波动率曲面遇DataFrame属性错误

0DTE期权隐含波动率曲面开发中的AttributeError问题

问题背景

在Colab环境开发0DTE期权交易用的Python隐含波动率曲面,已成功导入yfinance、pandas、numpy,但运行代码时触发AttributeError错误。

报错信息

AttributeError                            Traceback (most recent call last)
<ipython-input-31-494e77cf0df4> in <module>
----> 1 options = option_chains("ES")
      2 
      3 puts = [options["optionType"] == "put"]
      4 
      5 # print the expirations

1 frames
/usr/local/lib/python3.7/dist-packages/pandas/core/generic.py in __getattr__(self, name)
   5485         ):
   5486             return self[name]
-> 5487         return object.__getattribute__(self, name)
   5488 
   5489     def __setattr__(self, name: str, value) -> None:

AttributeError: 'DataFrame' object has no attribute 'expiration'

相关代码

options = option_chains("SPY")

puts = [options["optionType"] == "put"]

# print the expirations
set(puts.expiration)

# select an expiration to plot
puts_at_expiry = puts[puts["expiration"] == "2022-12-2 23:59:59"]

# filter out low vols
filtered_puts_at_expiry = puts_at_expiry[puts_at_expiry.impliedVolatility >= 0.001]

# set the strike as the index so pandas plots nicely 
filtered_puts_at_expiry[["strike","impliedVolatility"]].set_index("strike").plot(title="Implied Volatility Skew", figsize=(7, 4))

已执行操作

  • 安装yfinance:!pip install yfinance
  • 导入pandas_datareader:from pandas_datareader import data as pdr

问题原因及修复方案

核心问题1:筛选语法错误

代码中puts = [options["optionType"] == "put"]使用了方括号[],得到的是包含布尔Series的列表,而非筛选后的DataFrame。列表没有expiration属性,因此调用puts.expiration会触发错误。

修复:
将筛选代码改为布尔索引直接筛选DataFrame:

puts = options[options["optionType"] == "put"]

核心问题2:yfinance期权链调用方式错误

yfinance中没有直接的option_chains()全局函数,需要通过Ticker对象调用相关方法:

import yfinance as yf

# 实例化Ticker对象
ticker = yf.Ticker("SPY")
# 获取所有到期日列表
exp_dates = ticker.options
# 遍历到期日获取对应期权链
for exp in exp_dates:
    opt_chain = ticker.option_chain(exp)
    # 获取put期权数据
    puts = opt_chain.puts
    # 后续处理逻辑
    set(puts["expiration"])
    # ...其他代码

修正后的完整示例代码

import yfinance as yf
import pandas as pd
import numpy as np

# 获取SPY期权数据
ticker = yf.Ticker("SPY")
# 选择目标到期日(可从ticker.options中查看所有到期日)
target_exp = "2022-12-02"
opt_chain = ticker.option_chain(target_exp)
puts = opt_chain.puts

# 打印到期日集合
print(set(puts["expiration"]))

# 筛选指定到期日的put期权(如果需要精确匹配时间)
puts_at_expiry = puts[puts["expiration"] == "2022-12-02 23:59:59"]

# 过滤低隐含波动率数据
filtered_puts_at_expiry = puts_at_expiry[puts_at_expiry["impliedVolatility"] >= 0.001]

# 绘制隐含波动率偏度图
filtered_puts_at_expiry[["strike", "impliedVolatility"]].set_index("strike").plot(title="Implied Volatility Skew", figsize=(7, 4))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 03:50:13