项目状态
已完成
项目类型
风险管理
起始时间
May 1, 2025 → May 30, 2025
项目描述
基于BSM与BAW定价模型及二阶泰勒近似,自主开发情景分析与业绩归因双模块,实现期权组合P&L、Greeks与保证金的盘后全流程测算与归因;以每日持仓表为输入,输出情景分析与归因结果表,结果与Wind系统偏差小于5%。
负责人

所属板块
盘后期权风险管理体系
学习收获
Attribution-Analysis-of-Options-Trading
Yuyang-Yao75 • Updated Nov 30, 2025

S(Situation)
部门需要一套日度可用的期权组合风控工具,能够跨市场(上/深交所 ETF 期权、IF/IO 等股指期权、商品期权等)统一口径地做组合级别的矩阵化情景分析(S×IV 二维网格),并输出按标的与组合聚合的 P&L、现金希腊()与保证金压力。
现有 Wind 终端虽有单合约定价与希腊,但存在两点现实不足:
- 无法按组合统一风控:难以用企业内部持仓口径(净额、乘数、方向、分市场)进行一体化聚合;
- 缺少“矩阵化”情景扫描:难以在固定网格(例如 S±10% × IV±10%,11×11)下批量、可追溯地输出面阵用于盘前会;
为支撑部门的次日盘前风险例会,需要一个可自动化运行、输出 Excel(按日期建文件夹、按标的建分表,含总表)的组合统一风控引擎。
A(Action)
所有理论部分均参考CQG QTrader平台或Wind平台
数据与预处理
- 以“期权持仓表.csv”为输入(列含:同花顺代码
代码与数量),通过 iFinDPy批量拉取并扩充为完整持仓表(fill_data):标的代码/收盘价、执行价、到期日、剩余交易日、收盘价、期权类型、合约乘数、行权方式、交易所等;若数据有缺失先备份并报出缺失列(check_and_backup_out)。
- 交易时段口径:统一校验
session ∈ {盘前/盘中/盘后}(validate_session),并按口径调整日期(盘后=当日、盘前/盘中=前一日)。
- 剩余交易日口径统一:同花顺“剩余交易日”包含当天,因此先减 1 再除以 244(日化基数
ANN_TRADING_DAYS=244),做完隐含波后,为模拟“次日”再减 1/244。
欧式标的基准价(为情景基准而非直接用收盘价)
- 计算“平值标的价”
calculate_atm_underlying_price:在平值附近各取5 档看涨/看跌,按平价公式 逐档估算后取均值。
这么做的原因:降低收盘价的异动与不活跃成交噪声;利用 C-P 合成远期(隐含 carry),更稳健地作为情景扫描的 S 基准。
隐含波反解(欧式/美式)
- 欧式(
implied_vol: - 价格先做无套利边界检查(看涨:;看跌:),越界时打印并通过平价用对端合约(C↔P)修正市场价;仍越界则按边界截断;
- 牛顿法迭代,
vega<1e-8或 时退出保护,返回初值; - 定价用自写 BS 定价
bs_price(支持网格向量化),vega 用bs_vega。
- 美式(
implied_vol_bisect): - 采用 Barone-Adesi & Whaley (BAW) 近似定价
baw_american_option_price,并在 区间上二分法求 ; - 股指期权按 处理,使美式看涨在 时退化为欧式价格(符合 BAW 理论)。
情景网格与定价
- 生成 S 比例变动 、IV 变化 的 11×11 网格(
generate_grid);
- 欧式价格面
bs_price(向量化,含 b=r-q),美式价格面baw_american_option_price(向量化);
现金希腊(组合口径)
- 欧式:解析解
calculate_european_greeks(),以现金希腊口径聚合(与 Wind 对齐): - 行:按 0.01·S·Δ·multiplier·数量 汇总(对 1% 价格变动的现金 P&L 效应);
- 行:按 0.5·(0.01·S)^2·Γ;
- (Vega):对 1% 波动率变化的现金效应;
- :按日衰减(/244)现金效应。
- 美式:
calculate_american_greeks采用中心差分近似(),并用同一现金口径聚合。
- 结果按标的(groupby 标的资产)与组合两级输出矩阵,并写入 Excel 的分标的 sheet 与总表。
保证金情景(空头)
- 仅对空头计算;
- 上/深交所:;
- 中金所:0.12/0.06 系数口径;
- 其他期货交易所:调用 iFinD 字段
ths_contract_short_deposit_future获取期货保证金率,取
。
工程化与可用性
- 异常保护:数据缺失先备份并打印缺失列占比;牛顿法收敛保护;美式 IV 求解异常回退;
- 向量化与复用:价格函数(欧/美)支持二维网格输入,避免重复循环;
- 输出规范:按日期建文件夹,单个 Excel 汇总;每个标的一个工作表,斜线表头区分“横轴 S、纵轴 IV”,总表汇总所有标的的 P&L/Greeks 与总保证金情景。
可改进板块
- 标的价格的调整:ETF 的收盘价来自收盘集合竞价,容易被大额挂单、撤单和微观结构噪声拉偏,往往不能代表市场对标的的真实定价。用平值附近 5 档 C/P,通过平价公式反推一个“公允标的价”再取均值,本质动机是:让用来定价和做情景分析的 与期权市场内部自洽、同时降低单一报价的噪音,这个做法在理论和实务上都是合理的,只要清楚这个“标的价”其实更像“隐含远期/隐含现价”,而不是简单的收盘现货价。
- 欧式期权隐含波动率的调整:用平价 + 深度虚值合约“修正”深度实值合约价格,再反解隐含波动率,这个思路在实务中是合理的,而且比直接拿那条深度实值的成交价要靠谱得多,但是这种方法解决的是“价格错得太离谱导致根本算不出 IV”这个问题,不是万能钥匙。真正稳健的做法应该是:用平价 + 深度虚值价 +(最好)一整条波动率曲面拟合。
- 欧式 IV 反解改为“lets-be-rational / py_vollib”的鲁棒闭式反解(重要,稳定性)
- 现状:牛顿法需要初值与 vega 非零,深 ITM/OTM 或近到期时有不稳定;你已做了越界判定与平价修正,但仍有长尾风险。
- 改进:使用
lets_be_rational(Jäckel)或py_vollib.black_scholes.implied_volatility,在极端价差与vega→0场景也能稳定收敛;作为首选,牛顿法作后备。
- 美式期权隐含波动率无法应对市场极端情形:
- 现状:二分区间固定为 [0.1, 1]。若真实 IV 超界(<10% 或 >100%),会抛错并回 -1。
- 改进:采用自适应括号:从 起步,若函数同号则指数扩张上界直至变号;或换用 Brent(
scipy.optimize.brentq)。同时近到期 时直接以内在价值与时间价值判断回退逻辑,或不反解。


