Product Option
· · ·
题目进度 0 / 0 ✓ 0
产品深度:场外期权(OTC Options)
期权是结构化产品的”乐高积木”。理解期权,你就理解了结构化产品的全部。
一、你需要知道的关键业务规则
flowchart LR
subgraph 期权要素
A[标的 Underlying]
B[行权价 Strike]
C[期限 Tenor]
D[期权费 Premium]
end
subgraph 方向
Call[看涨 Call<br/>买入上涨权利]
Put[看跌 Put<br/>买入下跌保护]
end
subgraph 行权方式
EU[欧式 European<br/>到期日行权]
US[美式 American<br/>随时行权]
BER[百慕大 Bermuda<br/>指定日行权]
end
A & B & C --> Call
A & B & C --> Put
Call --> EU & US & BER
Put --> EU & US & BER
1.1 期权合约要素
| 要素 | 说明 | 系统字段 |
|---|---|---|
| 标的(Underlying) | 挂钩资产 | underlying_code |
| 行权方式 | 欧式(到期行权)/美式(随时行权) | exercise_style |
| 期权方向 | 看涨(Call)/看跌(Put) | option_type |
| 行权价(Strike) | 约定买卖价格 | strike_price |
| 期限 | 生效日→到期日 | expiry_date |
| 名义本金 | 期权覆盖的金额 | notional |
| 期权费(Premium) | 买方支付的权利金 | premium |
| 权利金支付日 | 期权费支付时间 | premium_payment_date |
| 结算方式 | 现金结算/实物交割 | settlement_type |
1.2 常见的业务场景
场景一:保护性对冲
客户持有100万股茅台股票,担心短期下跌
→ 买入欧式看跌Put,行权价在当前价95%
→ 如果茅台跌超5%,Put盈利弥补持仓亏损
→ 成本:支付期权费(假设 2% 名义本金)
场景二:方向性投资
客户看好券商板块
→ 买入一篮子券商股的看涨Call
→ 如果券商股涨了,获得杠杆收益
→ 如果跌了,最大损失 = 期权费
场景三:收益增强
客户持有中证500ETF不动,但预期近期不涨
→ 卖出虚值看涨Call(Covered Call)
→ 收到期权费作为额外收益
→ 如果暴涨超过行权价,客户可能被行权
二、定价输入参数
系统里需要维护的定价参数(PM需知道每个参数的来源):
| 参数 | 符号 | 数据来源 | 更新频率 |
|---|---|---|---|
| 标的价格 | S | 市场实时行情 | 实时 |
| 行权价 | K | 合约条款 | 固定 |
| 剩余期限 | T | 计算:到期日-当前日 | 每日更新 |
| 无风险利率 | r | LPR/SHIBOR/国债收益率 | 每日/每次利率变动 |
| 隐含波动率 | σ | 彭博/Wind/自建曲面 | 每日 |
| 分红率 | q | 券商预期/历史数据 | 季度更新 |
对设计系统的含义:定价引擎是”参数入→价格出”的黑盒,你的工作不是写引擎,而是确保参数正确输入、结果正确输出。
三、Greeks——交易员每天都在看的东西
3.1 每个Greek的含义
| Greek | 含义 | 举例 | 交易员怎么说 |
|---|---|---|---|
| Delta | 标的价格涨1元,期权价格变多少 | Call的Delta=0.6 → 股票涨1元,期权涨0.6元 | ”今天Delta偏了,得买点股票对冲” |
| Gamma | 标的价格涨1元,Delta变多少 | Gamma大的期权→Delta变化快→需频繁对冲 | ”这个期权Gamma太大,对冲不过来” |
| Vega | 波动率变1%,期权价格变多少 | Vega=500 → 波动率涨1%→期權价值涨500元 | ”波动率起来了,Vega要小心” |
| Theta | 过一天,期权价值损失多少 | Theta=-200 → 每天亏200元时间价值 | ”时间在流逝,这个期权每天亏2万” |
| Rho | 利率变1%,期权价格变多少 | 长期期权Rho显著 | ”利率降了,我的看涨Rho在亏” |
3.2 Greeks 在系统里的用法
Greeks 计算不是一次性的——它需要:
- 每日计算(用于风险报告)
- 实时监控(用于预警)
- 历史回溯(用于分析)
系统数据字段(每个持仓、每天一条):
{
"position_id": "OPT20240101-001",
"calc_date": "2024-06-26",
"delta": 0.6532,
"gamma": 0.0087,
"vega": 12500.00,
"theta": -3800.00,
"rho": 2100.00,
"delta_cny": 6532000.00, // Delta × 名义本金
"vega_cny": 1250000.00 // Vega × 1% 波动率变动
}
四、行权与结算处理
4.1 行权流程
到期日
↓
判断:到期是否实值(Call: S > K, Put: S < K)
↓
是实值 → 自动行权(默认)
↓
计算行权盈亏 = max(S-K, 0) × 数量(Call)
↓
现金结算(支付差额)或实物交割(交付股票)
↓
交易关闭
4.2 提前平仓
客户可以在到期前申请平仓(需要双向报价):
平仓价 = 当前期权市场价值
平仓损益 = 平仓价 - 建仓时期权费
五、场外期权的黑话
| 黑话 | 意思 | 业务含义 |
|---|---|---|
| ”平价/平值” | 行权价=当前价(ATM) | Delta ≈ 0.5 |
| ”实值” | 行权价<当前价(Call)(ITM) | Delta > 0.5 |
| ”虚值” | 行权价>当前价(Call)(OTM) | Delta < 0.5 |
| ”波动率曲面” | 不同行权价+期限的波动率矩阵 | 定价核心输入 |
| ”波动率微笑” | 虚值和实值波动率高于平值 | 市场特征 |
| ”时间价值” | 期权价-内在价值(纯粹的时间价值) | Theta的源 |
| ”内在价值” | 立即行权的价值 | max(S-K, 0) |
| “期权费” | 买方支付的权利金 | premium |
| ”自动行权” | 到期实值自动执行 | 系统自动处理 |
| ”overwrite” | 卖出备兑看涨(Covered Call) | 收益增强策略 |
六、系统实现(ODTS 中的期权处理)
以下基于
~/odts1/hedging-as和~/odts1/eds-price-server的实际代码。
6.1 定价引擎入口
| 步骤 | 系统 | 核心代码路径 |
|---|---|---|
| 询价 | hedging-as | action/quotation/QuotationAction.java |
| 定价编排 | hedging-as | pricing/service/PricingService.java → getPrice() |
| 产品识别 | edslib | payoff/PayoffFactory.create(productType, params) |
| 估值方法 | edslib | valuation/MonteCarloValuation.evaluate() 或 ClosedFormValuation.evaluate() |
| 独立引擎 | eds-price-server | PricingEngine.java(始自 2016,30+ 产品) |
| Greeks | gpricingengine | pricing/GPricingEngine.java — Delta/Gamma/Vega/Theta/Rho 完整计算 |
6.2 交易簿记
| 步骤 | 系统 | 核心代码路径 |
|---|---|---|
| 前端录入 | new-edsweb | src/views/option-contract/ (Vue 2 SPA) |
| 后端合约 | eds-web-app | ContractController.java, ContractAction.java |
| 领域模型 | hedging-as | contract/Contract.java |
| 持久化 | hedging-as | contract/ContractSaveService.java → Oracle ODTSDB |
6.3 Greeks 在代码里的实际落地
Greeks 是每笔交易的每日计算结果,存储在 EOD 批处理的结果中:
hedging-as/src/com/cicc/service/eod/GreeksStep.java — EOD 第 6 步
hedging-as/src/com/cicc/service/strHedgePositionEod/
├── DeltaCalculator.java — 每笔合约 Delta
├── GammaCalculator.java — 每笔合约 Gamma
└── VegaCalculator.java — 每笔合约 Vega
输出字段映射:OptionNPV / DeltaNPV / GammaNPV / ThetaNPV / VegaNPV / RhoNPV,汇总时用 PositionAggregator.java 按标的维度聚合全台头寸。
6.4 行权处理代码
hedging-as/src/com/cicc/action/eod/
├── FixingStep.java — EOD 第 2 步:定盘价(行权判定基础)
└── BarrierCheckStep.java — EOD 第 4 步:期权是否为实值
更多细节见 ODTS-05 交易生命周期、ODTS-35 定价引擎演变、ODTS-15 对冲工作流
下一产品:product-snowball.md 雪球深度