Learning
VOL. VII · NO. 129 · OTC Derivatives · 19 JUL 2026

Pricing Engine Product Families

OTC 衍生品 · 19 JUL 2026 · 6 min read · 1,039 words
· · ·

ODTS 79 — 定价引擎的产品族:引擎到底能算哪些产品结构

为什么需要这篇文档

08-Pricing-Models-and-EOD-Valuation 讲了定价的机制(EOD 估值、行情依赖、基准价 fallback、Payoff 函数),但没回答一个 PM/BA 最该先知道的问题:

这个定价引擎,到底支持算哪些产品结构?

代码库里 eds-price-serverstructuredproducts/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 / ACSSimulatorACS / ACPS 系列
AsianValue亚式(均价)结构
BinaryBarrier / DoubleBarrier / DoubleBarrierBinary / DoubleSharkfin二元/障碍/鲨鱼鳍
CPSValue / DCCSPValue / DCCSValue / ForwardCPSCPS 系列(收益凭证)
DSFValueDSF(对应 77 本金保障型变体)
DIGValueDIG(对应 77 本金保障型变体)
ESFValue / ESF2ValueESF 系列
ETRSValue / ETRSETRS(收益互换类)
FINValue / FSValueFIN / FS 系列
BR3Value / CLQValue / CCSFValueBR3 / CLQ / CCSF 系列
CallPutSpread / EnhancedRevenueValue / EnhancedRevenue价差 / 增益收益
IDPValue / IPKValue / IPPValue / LINValue / OTValue / OTMultiValue各类结构化变体
DeltaOneProductDelta 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/ 里有没有 XValueinstruments/ 里有没有对应构件?

  • 有 → 多半只需补参数映射和确认书模板(如 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(新增品种)