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

S(Situation)

部门需要一套日度可用的期权组合风控工具,能够跨市场(上/深交所 ETF 期权、IF/IO 等股指期权、商品期权等)统一口径地做组合级别的矩阵化情景分析(S×IV 二维网格),并输出按标的组合聚合的 P&L、现金希腊()与保证金压力。
现有 Wind 终端虽有单合约定价与希腊,但存在两点现实不足:
  1. 无法按组合统一风控:难以用企业内部持仓口径(净额、乘数、方向、分市场)进行一体化聚合;
  1. 缺少“矩阵化”情景扫描:难以在固定网格(例如 S±10% × IV±10%,11×11)下批量、可追溯地输出面阵用于盘前会;
为支撑部门的次日盘前风险例会,需要一个可自动化运行、输出 Excel(按日期建文件夹、按标的建分表,含总表)的组合统一风控引擎
💡

T(Target)

盘后完成对“次日”的情景扫描,产出:
  1. 隐含波稳健反解:欧式用BSM+牛顿法(失活/越界时用平价修正),美式用 BAW+二分法;
  1. 按标的、按组合聚合的 P&L 与现金希腊)二维网格(S±10% × IV±10%,步长 2% 与 2 vol,共 11×11);
  1. 保证金情景(仅对空头分交易所口径计算,并汇总组合层面);
  1. 与 Wind 校核差异在可控阈值内。
💡

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 与总保证金情景。
💡

R(Result)

  • 数值准确性:经一周对账,欧式隐含波与 Wind 差异 <0.1%;情景矩阵(P&L/Greeks)组合口径与 Wind 对齐误差 <5%
  • 效率与可复用:常用组合在盘后一次运行即可产出盘前所需全部矩阵与汇总表;支持跨市场统一口径,便于风控交流与留痕复核。
💡

可改进板块

  1. 标的价格的调整:ETF 的收盘价来自收盘集合竞价,容易被大额挂单、撤单和微观结构噪声拉偏,往往不能代表市场对标的的真实定价。用平值附近 5 档 C/P,通过平价公式反推一个“公允标的价”再取均值,本质动机是:让用来定价和做情景分析的 与期权市场内部自洽、同时降低单一报价的噪音,这个做法在理论和实务上都是合理的,只要清楚这个“标的价”其实更像“隐含远期/隐含现价”,而不是简单的收盘现货价。
  1. 欧式期权隐含波动率的调整:用平价 + 深度虚值合约“修正”深度实值合约价格,再反解隐含波动率,这个思路在实务中是合理的,而且比直接拿那条深度实值的成交价要靠谱得多,但是这种方法解决的是“价格错得太离谱导致根本算不出 IV”这个问题,不是万能钥匙。真正稳健的做法应该是:用平价 + 深度虚值价 +(最好)一整条波动率曲面拟合
  1. 欧式 IV 反解改为“lets-be-rational / py_vollib”的鲁棒闭式反解(重要,稳定性)
      • 现状:牛顿法需要初值与 vega 非零,深 ITM/OTM 或近到期时有不稳定;你已做了越界判定与平价修正,但仍有长尾风险。
      • 改进:使用 lets_be_rational(Jäckel)或 py_vollib.black_scholes.implied_volatility,在极端价差vega→0场景也能稳定收敛;作为首选,牛顿法作后备。
  1. 美式期权隐含波动率无法应对市场极端情形:
      • 现状:二分区间固定为 [0.1, 1]。若真实 IV 超界(<10% 或 >100%),会抛错并回 -1。
      • 改进:采用自适应括号:从 起步,若函数同号则指数扩张上界直至变号;或换用 Brentscipy.optimize.brentq)。同时近到期 时直接以内在价值时间价值判断回退逻辑,或不反解。
Loading...
务醒
务醒
慢慢搭一座知识楼📖
小红书
统计
文章数:
1
公告
type
Notice
status
Published
date
Jul 2, 2021
slug
#
summary
类型为Notice的文章将被显示为公告
tags
category
icon
password
comment
🎉务醒‘s Blog 已经上线🎉
-- 感谢您的支持 ---