Pricing Engine Product Families
ODTS 79 — 定价引擎的产品族:引擎到底能算哪些产品结构
为什么需要这篇文档
08-Pricing-Models-and-EOD-Valuation 讲了定价的机制(EOD 估值、行情依赖、基准价 fallback、Payoff 函数),但没回答一个 PM/BA 最该先知道的问题:
这个定价引擎,到底支持算哪些产品结构?
代码库里 eds-price-server 的 structuredproducts/ 和 instruments/ 目录,是一份活的产品族图谱——从雪球、自动赎回(Autocall)、二元障碍,到各种收益凭证变体(ACS/ACPS/CPS/DSF/DIG/ESF/ETRS/FIN/FS…)。这份图谱就是”业务能卖什么产品”的技术真相。一个 PM/BA 如果不看它,就无法判断”某个新结构能不能支持、要改哪里”。
1. 定价引擎的包结构
eds-price-server/src/com/cicc/priceserver/
├── gpricingengine/ — 结构化物(含 autocall 系列)
│ ├── pricing/ — 通用定价
│ └── autocall/
│ ├── GParameters.java
│ ├── calPayOffInterface.java — Payoff 计算接口
│ ├── snowball/SnowBallNotes.java — 雪球
│ ├── acsnotes/ — ACS notes
│ └── triggernotes/ — 触发 notes
├── structuredproducts/ — 各产品估值实现(一大片)
├── pricingengine/ — 期权/通用定价处理器
│ ├── PricingEngine.java
│ ├── OptionManager.java / OptionCalculator.java
│ └── ACSPricingHandler.java
├── instruments/ — 基础衍生品构件( leg 级)
└── common/ util/ peserver/
业务含义: 定价不是”一个公式算所有产品”,而是每个产品结构有自己的 XxxValue 估值类。新增一个结构 = 新增一组 instruments 构件 + 一个 structuredproducts/XxxValue 估值实现。这是 09 “新增业务品种”主题的定价侧对应。
2. structuredproducts/:引擎支持的产品清单(节选)
structuredproducts/ 目录下的 XxxValue.java 直接列出了引擎能估值的产品:
| 类 | 产品结构 |
|---|---|
SnowBallNotes / SnowBallParameters | 雪球(最主流) |
AutoCallableNotes / AutoCallableSeries | 自动赎回票据(Autocall) |
ACPSValue / ACSValue / ACSProcessor / ACSSimulator | ACS / ACPS 系列 |
AsianValue | 亚式(均价)结构 |
BinaryBarrier / DoubleBarrier / DoubleBarrierBinary / DoubleSharkfin | 二元/障碍/鲨鱼鳍 |
CPSValue / DCCSPValue / DCCSValue / ForwardCPS | CPS 系列(收益凭证) |
DSFValue | DSF(对应 77 本金保障型变体) |
DIGValue | DIG(对应 77 本金保障型变体) |
ESFValue / ESF2Value | ESF 系列 |
ETRSValue / ETRS | ETRS(收益互换类) |
FINValue / FSValue | FIN / FS 系列 |
BR3Value / CLQValue / CCSFValue | BR3 / CLQ / CCSF 系列 |
CallPutSpread / EnhancedRevenueValue / EnhancedRevenue | 价差 / 增益收益 |
IDPValue / IPKValue / IPPValue / LINValue / OTValue / OTMultiValue | 各类结构化变体 |
DeltaOneProduct | Delta One(线性)产品 |
业务含义: 这张表就是”业务能卖什么”的技术真相清单。注意它和 77 的 GUARANTEE_VAN/DSF/CPS/DIG/SF 高度呼应——77 里那些”本金保障型变体”在定价引擎里各自有对应的 XxxValue。一个产品能卖的前提,是定价引擎里有它的估值类。
3. instruments/:估值之下的”构件库”
structuredproducts/ 之上,还有更底层的 instruments/(leg 级构件),它们是组合出复杂结构的积木:
instruments/
├── AutoCallableNotes / AutoCallableSeries
├── Asian / BinaryBarrier / DigitalProtection
├── DoubleBarrier / DoubleBarrierBinary / DoubleBarrierBinaryAsymmetric / DoubleSharkfin
├── ETRS / EnhancedRevenue / FakeVanilla / Financing
├── FixedCoupon / ForwardCPS / CashOrNothing
├── Distributions / DividendEvent — 分红/派息事件
└── ACSParameters ...
业务含义: 复杂结构 = 多个 instruments 构件拼起来。比如一只雪球 = 看跌期权(障碍)+ 固定票息(FixedCoupon)+ 自动赎回观察(Autocall 逻辑)。PM/BA 理解”产品结构是构件拼装”之后,对”为什么加一个观察频率就牵动一大片”会有直观感受(呼应 08 §4 观察频率不一致导致的价差)。
4. 定价引擎和产品生命周期的衔接
一笔交易的定价调用链(简化):
EOD 调度 / 实时报价
→ eds-price-server 接收 (产品类型, 参数, 行情)
→ PricingEngine / 对应 XxxValue
→ 调用 instruments 构件算各 leg
→ 返回估值 / 希腊值
→ 写回 hedging-as(08 的 EOD 估值结果)
业务含义: 定价引擎是无状态的计算服务——它不持有交易,只算。交易和参数来自 hedging-as / eds-web-app,行情来自行情源(08)。这解释了为什么 08 反复强调”行情缺失/基准价 fallback”——定价引擎对入参质量极度敏感,垃圾行情进、垃圾估值出。
5. 内行才知道的:产品支持范围 = 估值类清单,不是 PRD
判断”我们要支持一个新的结构 X”能不能做,技术上的第一反应是:structuredproducts/ 里有没有 XValue?instruments/ 里有没有对应构件?
- 有 → 多半只需补参数映射和确认书模板(如 77 的
RiskyConfContractParamGenerator)。 - 没有 → 要新写估值类 + 构件 + 测试,是数周级的工作量,且需要量化同事介入。
很多”业务觉得很简单、技术觉得很难”的需求冲突,根源就是业务在 PRD 里描述的结构,在定价引擎里根本还没有对应的 XxxValue。先查这个目录,再估工作量——这是 PM/BA 和技术对齐最快的办法。
自测
- 判断”要支持一个新的衍生品结构 X”能不能快速做,第一件事应该查定价引擎的哪个目录?
structuredproducts/和instruments/的层级关系是什么?为什么复杂结构要”构件拼装”?- 雪球在代码里对应哪个类?它由哪些底层构件拼成?
- 77 文档里的本金保障型变体(DSF/DIG/CPS…)和本文的
XxxValue清单有什么对应关系? - 定价引擎是”持有交易的系统”还是”无状态计算服务”?这对”行情质量”意味着什么?
相关阅读:08-Pricing-Models-and-EOD-Valuation.md(估值机制)、35-Pricing-Engine-Evolution.md(引擎演化)、77-Third-Party-Guarantee-and-Principal-Protected.md(本金保障型变体)、09-Product-and-Lifecycle-State-Machine.md(新增品种)