Skip to content

期权数据

中国期权市场数据获取指南。

合约列表

import finvista as fv

# 获取 50ETF 期权合约
df = fv.list_cn_option_contracts("510050")

# 获取沪深 300ETF 期权
df = fv.list_cn_option_contracts("510300")

返回字段

字段 说明
symbol 合约代码
name 合约名称
underlying 标的代码
type 期权类型(C/P)
strike 行权价
expiry 到期日

期权行情

# 获取期权实时行情
df = fv.get_cn_option_quote("10004456")

返回字段

字段 说明
symbol 合约代码
price 最新价
change 涨跌额
change_pct 涨跌幅
volume 成交量
open_interest 持仓量
bid 买一价
ask 卖一价

日线数据

df = fv.get_cn_option_daily("10004456", start_date="2024-01-01")

返回字段

字段 说明
date 交易日期
open 开盘价
high 最高价
low 最低价
close 收盘价
settle 结算价
volume 成交量
open_interest 持仓量

使用示例

构建 T 型报价

# 获取所有合约
contracts = fv.list_cn_option_contracts("510050")

# 筛选当月合约
import pandas as pd
from datetime import datetime

current_month = datetime.now().strftime("%Y%m")
monthly = contracts[contracts['expiry'].str.contains(current_month)]

# 分离认购和认沽
calls = monthly[monthly['type'] == 'C'].sort_values('strike')
puts = monthly[monthly['type'] == 'P'].sort_values('strike')

# 构建 T 型报价
t_quote = pd.merge(
    calls[['strike', 'symbol']].rename(columns={'symbol': 'call_symbol'}),
    puts[['strike', 'symbol']].rename(columns={'symbol': 'put_symbol'}),
    on='strike'
)
print(t_quote)

计算隐含波动率(简化)

# 获取期权价格
option = fv.get_cn_option_quote("10004456")
option_price = option['price'].iloc[0]

# 获取标的价格
etf = fv.get_cn_stock_quote("510050")
spot_price = etf['price'].iloc[0]

# 获取合约信息
contracts = fv.list_cn_option_contracts("510050")
contract = contracts[contracts['symbol'] == "10004456"].iloc[0]
strike = contract['strike']

# 简化的隐含波动率估算(实际应使用 Black-Scholes)
moneyness = spot_price / strike - 1
print(f"虚实程度: {moneyness:.2%}")

PCR 比率

contracts = fv.list_cn_option_contracts("510050")

# 获取所有合约行情
total_call_volume = 0
total_put_volume = 0

for _, row in contracts.head(20).iterrows():
    try:
        quote = fv.get_cn_option_quote(row['symbol'])
        if row['type'] == 'C':
            total_call_volume += quote['volume'].iloc[0]
        else:
            total_put_volume += quote['volume'].iloc[0]
    except:
        continue

pcr = total_put_volume / total_call_volume if total_call_volume > 0 else 0
print(f"成交量 PCR: {pcr:.2f}")

期权策略分析

# 获取平值期权
contracts = fv.list_cn_option_contracts("510050")
etf = fv.get_cn_stock_quote("510050")
spot = etf['price'].iloc[0]

# 找到最接近平值的合约
contracts['atm_diff'] = abs(contracts['strike'] - spot)
atm_call = contracts[contracts['type'] == 'C'].nsmallest(1, 'atm_diff')
atm_put = contracts[contracts['type'] == 'P'].nsmallest(1, 'atm_diff')

print(f"平值认购: {atm_call['symbol'].iloc[0]}")
print(f"平值认沽: {atm_put['symbol'].iloc[0]}")

可交易标的

上交所

标的 代码 说明
50ETF 510050 上证50ETF期权
300ETF 510300 沪深300ETF期权
500ETF 510500 中证500ETF期权

深交所

标的 代码 说明
300ETF 159919 沪深300ETF期权
创业板ETF 159915 创业板ETF期权

中金所

标的 代码 说明
沪深300 IO 沪深300股指期权
中证1000 MO 中证1000股指期权

风险提示

期权交易具有杠杆效应,风险较高:

  • 期权可能归零,损失全部权利金
  • 卖方面临无限亏损风险
  • 需要开通期权交易权限