当前位置: 首页 > news >正文

期权量化交易系列教程(二):期权基础——规则、数据与定价模型

摘要:本文是“从零开始搭建期权量化交易系统”系列的第二篇。上一篇我们讨论了期权量化交易的意义,今天将正式踏入期权世界的大门。我们将梳理期权交易的核心术语、国内期权市场格局,然后使用免费开源的akshare库获取真实期权数据。在此基础上,我们会用 Python 实现 Black-Scholes 期权定价模型,并计算期权的五大希腊字母(Delta、Gamma、Theta、Vega、Rho),为后续的策略回测和风险管理打下坚实基础。


大家好,我是你们的老朋友。

上一篇文章我们聊了期权量化交易的优势:非线性收益、多维度交易、以及量化系统如何克服主观交易的局限。但工欲善其事,必先利其器。在动手写任何期权策略之前,我们必须先把基础打好。

今天这篇文章,我们就来系统地学习期权交易的核心概念、数据获取方法,以及最重要的——用 Python 实现 Black-Scholes 定价模型和希腊字母计算。这些代码将成为我们后续所有策略回测的基石。

一、期权核心术语详解

在进入代码之前,先把概念搞清楚。以下是期权交易中最常见的术语,它们会在代码中反复出现。

1.1 行权价与权利金

  • 行权价:期权合约约定的买卖标的资产的价格。比如沪深300ETF期权行权价 4.0 元,意味着买方有权以 4.0 元买入或卖出。
  • 权利金:买方为了获得这个权利而支付给卖方的费用。它是期权的市场价格。

1.2 内在价值与时间价值

期权的价格(权利金)由两部分组成:

  • 内在价值:如果现在立即行权,期权能赚多少钱。看涨期权的内在价值 = max(标的价格 - 行权价, 0);看跌期权 = max(行权价 - 标的价格, 0)。内在价值不可能为负。
  • 时间价值:权利金减去内在价值。反映的是未来不确定性带来的溢价。离到期日越远,时间价值越高。

1.3 实值、平值与虚值

根据标的价格与行权价的关系,期权可以分为三种状态:

  • 实值:内在价值 > 0。对于看涨期权,标的价格 > 行权价。
  • 平值:标的价格 ≈ 行权价。
  • 虚值:内在价值 = 0。对于看涨期权,标的价格 < 行权价。

虚值期权只有时间价值,没有内在价值。它们很便宜,但到期时成为实值的概率较低。

1.4 隐含波动率与历史波动率

  • 历史波动率:用标的历史价格数据计算的实际波动率,反映过去一段时间价格的“颠簸”程度。
  • 隐含波动率:从期权当前市场价格反推出来的波动率,代表市场对未来波动的预期。隐含波动率越高,期权越贵。

隐含波动率是期权交易的核心变量。很多期权策略(如跨式策略、波动率套利)本质上都是在交易隐含波动率与实际波动率之间的差异。

二、国内期权市场概况

目前国内期权市场主要分为三大板块:

2.1 金融期权(交易所交易)

  • 上证50ETF期权:代码510050,在上海证券交易所交易,是国内最早上市的场内股票期权(2015年)。
  • 沪深300ETF期权:有两个,上交所的代码510300,深交所的代码159919(2019年上市)。
  • 中证500ETF期权:上交所代码510500,深交所代码159922(2022年上市)。
  • 股指期权:中国金融期货交易所的沪深300股指期权(IO)和中证1000股指期权(MO),是现金交割的。

这些期权的合约乘数通常为 10000 份。即一张期权合约代表 10000 份 ETF 份额。

2.2 商品期货期权

大连、郑州、上海三家商品交易所都有商品期货期权,覆盖农产品、金属、能源化工等品种,如豆粕期权、白糖期权、铜期权、铁矿石期权等。商品期权以对应的期货合约为标的,乘数取决于具体品种。

2.3 交易规则简述

  • 行权方式:国内 ETF 期权采用欧式行权(只能在到期日行权),商品期货期权大多采用美式行权(到期前任何交易日可随时行权)。
  • 合约月份:通常有当月、下月及随后两个季月共四个到期月份。
  • 到期日:ETF 期权为到期月份的第四个星期三,股指期权为到期月份的第三个星期五。

个人投资者参与期权交易有资金门槛(50万资产)、考试和仿真交易经历要求,但可以通过模拟盘或购买期权相关的书籍和工具来学习。

三、用 akshare 获取期权数据

akshare提供了免费的期权数据接口,可以获取合约列表、实时行情和历史数据。无需注册,安装即可用。

pip install akshare

3.1 获取 ETF 期权合约列表

以获取上交所沪深300ETF(510300)的期权合约列表为例:

importakshareasak# 获取上交所沪深300ETF期权合约列表option_list=ak.option_sse_list(symbol='510300')print(option_list.head(10))

返回的 DataFrame 包含合约代码、行权价、到期日等信息。合约代码中包含了标的信息、到期月份、行权价和期权类型(C 为看涨,P 为看跌)。

3.2 获取单个合约的日线历史行情

得到合约代码后,可以获取其日线数据:

# 获取某只期权合约的历史日线数据# 以 '510300C2503M04000' 为例(代码格式可能随akshare更新变化)option_daily=ak.option_sse_daily(symbol='10006871')# 使用akshare返回的合约代码print(option_daily.tail())

注意:akshare接口的参数和返回值可能随版本更新而变化,请参考最新文档。如果接口暂时不可用,也可以从东方财富等网站直接下载期权数据,或使用tqsdk等商业数据源。

3.3 获取标的资产价格

同一代码下的标的 ETF 数据可以通过之前系列中使用的股票数据接口获取:

importakshareasak etf_daily=ak.fund_etf_hist_em(symbol='510300',period='daily',start_date='20240101',end_date='20241231')etf_daily['日期']=pd.to_datetime(etf_daily['日期'])etf_daily.set_index('日期',inplace=True)print(etf_daily[['收盘']].tail())

四、Black-Scholes 期权定价模型

4.1 模型简介与公式

Black-Scholes(BS)模型是期权定价的基石。它假设标的资产价格服从对数正态分布,市场上不存在无风险套利机会。

对于不分红的欧式看涨期权,BS 公式为:

C = S * N(d1) - K * e^(-rT) * N(d2)

对于看跌期权:

P = K * e^(-rT) * N(-d2) - S * N(-d1)

其中:

d1 = [ln(S/K) + (r + σ²/2) * T] / (σ * √T) d2 = d1 - σ * √T

符号含义:

  • S:标的价格
  • K:行权价
  • T:剩余到期时间(年化)
  • r:无风险利率(年化)
  • σ:波动率(年化)
  • N():标准正态分布的累积分布函数

4.2 Python 实现

使用scipy.stats.norm来计算 N(d1) 和 N(d2):

importnumpyasnpfromscipy.statsimportnormdefblack_scholes(S,K,T,r,sigma,option_type='call'):""" 计算欧式期权的理论价格 Parameters: - S: 标的现价 - K: 行权价 - T: 剩余到期时间(年) - r: 无风险利率 - sigma: 年化波动率 - option_type: 'call' 或 'put' Returns: - 期权理论价格 """ifT<=0:# 到期时,价格就是内在价值ifoption_type=='call':returnmax(0,S-K)else:returnmax(0,K-S)d1=(np.log(S/K)+(r+0.5*sigma**2)*T)/(sigma*np.sqrt(T))d2=d1-sigma*np.sqrt(T)ifoption_type=='call':price=S*norm.cdf(d1)-K*np.exp(-r*T)*norm.cdf(d2)else:price=K*np.exp(-r*T)*norm.cdf(-d2)-S*norm.cdf(-d1)returnprice

4.3 应用示例

假设沪深300ETF现价 3.8 元,行权价 3.9 元,剩余30天,无风险利率 2%,波动率 20%:

S=3.8K=3.9T=30/365# 剩余30天,转换成年r=0.02sigma=0.20call_price=black_scholes(S,K,T,r,sigma,'call')put_price=black_scholes(S,K,T,r,sigma,'put')print(f'看涨期权理论价格:{call_price:.4f}')print(f'看跌期权理论价格:{put_price:.4f}')

4.4 隐含波动率的计算

隐含波动率是已知期权市场价格,反解 BS 公式中的 σ。由于 BS 公式无法直接求逆,通常使用牛顿迭代法等数值方法求解。我们在后续文章中将专门介绍。这里给出一个简单的二分法实现思路:

defimplied_volatility(price,S,K,T,r,option_type='call',tol=1e-6,max_iter=100):lo,hi=0.001,5.0for_inrange(max_iter):mid=(lo+hi)/2bs_price=black_scholes(S,K,T,r,mid,option_type)ifabs(bs_price-price)<tol:returnmidifbs_price<price:lo=midelse:hi=midreturn(lo+hi)/2

五、希腊字母的计算

希腊字母衡量期权价格对各个变量的敏感度。它们在风险管理中至关重要。

5.1 Delta

Delta 衡量期权价格对标的资产价格变化的敏感度。看涨期权的 Delta 在 0 到 1 之间,看跌期权在 -1 到 0 之间。

defdelta(S,K,T,r,sigma,option_type='call'):d1=(np.log(S/K)+(r+0.5*sigma**2)*T)/(sigma*np.sqrt(T))ifoption_type=='call':returnnorm.cdf(d1)else:returnnorm.cdf(d1)-1

5.2 Gamma

Gamma 衡量 Delta 对标的资产价格变化的敏感度,即 Delta 的变化速率。Gamma 对于平值期权最大,对于深度实值或虚值期权趋近于零。

defgamma(S,K,T,r,sigma):d1=(np.log(S/K)+(r+0.5*sigma**2)*T)/(sigma*np.sqrt(T))returnnorm.pdf(d1)/(S*sigma*np.sqrt(T))

5.3 Theta

Theta 衡量期权价格对时间流逝的敏感度,通常为负值,表示时间每过去一天,期权价值损耗多少。买方每天在“流血”,卖方每天在“收租”。

deftheta(S,K,T,r,sigma,option_type='call'):d1=(np.log(S/K)+(r+0.5*sigma**2)*T)/(sigma*np.sqrt(T))d2=d1-sigma*np.sqrt(T)term1=-(S*norm.pdf(d1)*sigma)/(2*np.sqrt(T))ifoption_type=='call':term2=r*K*np.exp(-r*T)*norm.cdf(d2)return(term1-term2)/365# 每日thetaelse:term2=r*K*np.exp(-r*T)*norm.cdf(-d2)return(term1+term2)/365

5.4 Vega

Vega 衡量期权价格对隐含波动率变化的敏感度。Vega 总是正值,且对于平值期权最大。由于 BS 假设波动率恒定,Vega 并不存在于 BS 公式中,但我们通常计算 BS 价格的 σ 导数。

defvega(S,K,T,r,sigma):d1=(np.log(S/K)+(r+0.5*sigma**2)*T)/(sigma*np.sqrt(T))returnS*norm.pdf(d1)*np.sqrt(T)/100# 每1%波动率变化对应的价格变化

5.5 Rho

Rho 衡量期权价格对无风险利率变化的敏感度。对于短期期权,Rho 的影响很小,通常忽略不计。

defrho(S,K,T,r,sigma,option_type='call'):d1=(np.log(S/K)+(r+0.5*sigma**2)*T)/(sigma*np.sqrt(T))d2=d1-sigma*np.sqrt(T)ifoption_type=='call':returnK*T*np.exp(-r*T)*norm.cdf(d2)/100else:return-K*T*np.exp(-r*T)*norm.cdf(-d2)/100

5.6 希腊字母计算示例

S,K,T,r,sigma=3.8,3.9,30/365,0.02,0.20print(f'Call Delta:{delta(S,K,T,r,sigma,"call"):.4f}')print(f'Gamma:{gamma(S,K,T,r,sigma):.4f}')print(f'Theta (per day):{theta(S,K,T,r,sigma,"call"):.4f}')print(f'Vega (per 1% vol):{vega(S,K,T,r,sigma):.4f}')print(f'Rho (per 1% rate):{rho(S,K,T,r,sigma,"call"):.4f}')

六、本篇总结

今天我们完成了期权量化交易的奠基工作:

  • 核心术语:明确了行权价、权利金、内在价值、时间价值、实值/平值/虚值,以及隐含波动率与历史波动率的区别。
  • 市场概况:了解了国内 ETF 期权、商品期权和股指期权的交易场所和基本规则。
  • 数据获取:用akshare获取了期权合约列表和日线历史数据。
  • 定价模型:用 Python 实现了 Black-Scholes 公式,能够计算欧式期权的理论价格。
  • 希腊字母:实现了五大希腊字母的计算,这是风险管理和动态对冲的基础。

有了这些工具,我们就能够开始构建和回测期权交易策略了。在下一篇文章中,我们将深入期权量化的核心——波动率分析:如何计算历史波动率,如何从市场数据中提取隐含波动率,以及如何利用 GARCH 模型预测波动率。这些是判断期权贵贱、执行波动率交易策略的关键。

下一篇预告:期权量化交易系列(三)——波动率分析与预测:隐含波动率、波动率曲面与GARCH模型

你准备好深入期权定价的“黑箱”了吗?咱们下篇见!

http://www.jsqmd.com/news/1103040/

相关文章:

  • MagiskHide Props Config完整指南:7个步骤轻松伪装Android设备指纹
  • 本地实体家装行业 GEO 落地实战:2026 成都装修企业如何靠生成式引擎优化精准捕获同城业主
  • ChatGPT vs 通义千问:从Token计费陷阱、上下文窗口衰减曲线到推理成本建模(含可复现Python测算脚本)
  • Bilibili Toolkit会员购抢购功能详解:实现高效抢单的实用指南
  • 鸣潮自动化助手:3大核心功能解放你的游戏时间
  • 抖音批量下载神器:告别繁琐,一键收藏你的灵感宝库
  • 工业HMI也能“开口说话“:通过Modbus RTU驱动语音播报器
  • 告别分化紊乱、批次不稳!武汉云克隆犬骨骼肌原代细胞,筑牢肌肉研究硬核根基
  • 比赛现场调试环节的建议
  • 如何通过Python通达信接口免费获取金融数据:量化分析实战指南
  • 一键掌握MuJoCo环境配置全流程(适合新手小白)
  • Windows系统文件AppVIntegration.dll丢失找不到问题解决
  • ICM-42688-P与STM32F417ZG在机器人技术中的高效应用
  • 鸣潮自动化工具终极指南:免费实现后台智能战斗与资源收集
  • 揭秘Adobe Illustrator自动化革命:30+专业脚本如何颠覆设计工作流
  • Gofile批量下载神器:5分钟告别手动下载的烦恼
  • 容错与韧性设计:断点续传、补偿事务与幂等操作实现
  • IT爱学堂-博学谷AI大模型实战就业班第八期2026年2月版
  • 普及一下0基础自学网络安全需要达到的强度!
  • 中考志愿填报不踩坑✨数字人小信教你科学填报避风险
  • Midscene.js:3大优势重塑跨平台AI自动化测试的技术范式
  • 如何在 C# 中灵活调整 Excel 表格列的位置
  • MC6470与PIC18F2455的6DOF运动控制方案解析
  • 高效抖音内容下载方案:基于API的多线程批量下载工具
  • 激光雷达采购答疑:IP65到IP68分别适合哪些户外潮湿场景
  • Windows 11终极优化神器:Win11Debloat完整指南
  • Unlock-Music:三步解锁音乐自由,告别平台束缚的音乐管理革命
  • TVA与具身智能:感知-行动闭环的技术范式革命(15)
  • 3步搞定B站视频转换:免费跨平台工具让m4s秒变MP4
  • 三步快速下载VK视频:终极免费解决方案告别缓冲烦恼