OTC 交易生命周期:从询价到终止
把 0001 的语汇串成一条主线——一笔交易在端到端路径上,哪一步发生、哪段代码跑了、什么顺序。
这一节是你作为 PM/BA 的核心骨架。客户问”一个 6 个月中证500雪球,报价多少?“之后发生了什么?哪一节、哪段代码、什么顺序?记住这条主线,后面每个产品、每个系统章节都能挂上来。两条线同时讲:业务事件(发生了什么、对应什么纸质单据)和 系统锚点(哪个组件、哪个类处理)。
一、阶段全景(一图记)
| 阶段 | 业务事件 | 系统锚点 |
|---|---|---|
| 1 询价报价 | 销售配参数试算,交易台加利润发客户 | QuotationAction → PricingService.getPrice() |
| 2 簿记 | 交易员录入条款,成为有约束力合约 | ContractSaveService → CtrContract 表 |
| 3 信用/合规+确认书 | 额度/黑名单检查,生成 ISDA 确认书 | BlackOrWhiteListController · DocAgent |
| 4 存续期管理 | 每日定盘、MTM、追保、公司行动 | EOD 10 步(见第三节) |
| 5 对冲 | 交易台平掉卖给客户的风险 | OMS / DeltaCalculator |
| 6 监管会计 | SAC 报送、会计凭证、客户估值报告 | ofareg · SacReportController |
| 7 终止 | 到期/提前终止/更替 | ContractSettleHelper.finalSettle() |
二、阶段 1–3:从询价到生效(一次性事件)
1. 询价报价
业务:销售在前台配参数(标的、期限、障碍、名义本金),这是试算(what-if),还没有交易。定价速度就是业务速度——窗口通常 15–30 分钟,超时就可能丢客户。
系统锚点(IT 侧)
hedging-as/.../action/quotation/QuotationAction 收参数 → PricingService.getPrice():加载市场数据 → edslib.payoff.PayoffFactory.create() 构建收益函数 → MonteCarloValuation 或 ClosedFormValuation 计算。结果(中间价、价差、Greeks)返回 QuotationResult。报价存为 QuotationRecord(status=PENDING)——还没约束力。
2. 簿记 Booking
业务:交易员把商定条款录入系统,这是交易成为有约束力合约的时刻。TRS/Swap 等多数 OTC 有 2 个以上 leg(如 TRS = 融资 leg + 价格回报 leg),每个 leg 单独定义。
系统锚点(IT 侧)
eds-web-app 的 ContractController → ContractSaveService.validateTerms()(校验产品/leg/标的/额度)→ 生成 contractId(如 TRS20250716001)→ 持久化到 CtrContract 主表 + CtrContractLeg。状态先 PENDING_APPROVAL。
业务代价:80 字段表格几分钟内填完,2019–21 平均每月 2–3 笔录入错误(名义多打一个零等),每笔修正耗时 2–4 工作日;若确认书环节才发现,需对手方重签 +1–2 周。
3. 信用/合规 + 确认书
业务:交易生效前中台查授信额度、ISDA 资质、制裁名单。信用检查是软性的(失败进人工),黑名单检查是硬性的(永久阻止)。通过后状态 PENDING_APPROVAL → ACTIVE。确认书是 ISDA 法律文本,双方签署;约 2–3% 有争议,解决 2–4 周。
系统锚点(IT 侧)
BlackOrWhiteListController(OFAC/制裁硬阻断)· CustomerMarginController(授信使用率)· 确认书引擎 DocAgent(读 Word 模板→渲染→PDF→S3→推送 JUMS)。状态在 CtrContract.confirmationStatus:PENDING/SIGNED/DISPUTED。
三、阶段 4:存续期管理(每日 EOD 循环)★重点
签约后,每个交易日 17:00 起系统跑一遍 EOD 批处理。这就是 0001 里”敲出判定""定盘价”真正发生的地方。10 步顺序(来自 EodScheduler):
MarketDataRefresh → Fixing → CorporateAction → BarrierCheck
→ Valuation → Greeks → Margin → CashMovement → Reporting → Cleanup
| EOD 步 | 做什么 | 代码锚点 | 对应 0001 概念 |
|---|---|---|---|
| 2 Fixing | 取官方定盘价/利率(如中证500收盘、CFETS 16:30) | FixingStep / FixingManager | 定盘价(上一问) |
| 3 CorpAction | 标的分红/拆股调整现金流 | CorporateActionStep | — |
| 4 BarrierCheck | 价格 vs 敲入/敲出障碍 | BarrierCheckStep | 敲出/敲入 |
| 5 Valuation | 按市值计价,算当日 PnL、累积票息 | ValuationStep | MTM |
| 6 Greeks | 算 Delta/Gamma/Vega/Theta + DV01 | GreeksStep → DeltaCalculator | Greeks / DV01 |
| 7 Margin | 算 IM/VM,判保证金缺口 | MarginStep → cash-manager | 追保 |
BarrierCheckStep;DV01→GreeksStep 输出的利率敏感度。这就是为什么先打地基(0001)再走主线(0002)。BarrierCheck 用 T 日收盘定盘价判,定盘价 15:00 才生成——会有约 4 小时"已敲出但状态仍活跃"灰色地带。后来加了盘中轻量 IntradayBarrierCheck(用实时价,只预警不改正式状态)。这是 EOD 包里新人最易看懵的"双轨"逻辑。四、阶段 5–7:对冲、监管、终止
5. 对冲
业务:卖给客户的雪球,交易台不会保留风险,会买入/卖出标的或指数期货对冲。定价引擎算每笔 delta,对冲台汇总净 delta → 交易期货/再平衡期权。
系统锚点
DeltaCalculator 算 delta → OMS 录入对冲单 → odts-option-web 实时对冲仪表盘监控对冲 PnL vs 客户 PnL。
6. 监管与会计
业务:每笔 OTC 须限时报 SAC;每笔资金变动产生会计凭证;客户每月收估值报告。
系统锚点
SacReportController 生成 SAC XML → ofareg 报送中证报价/CSRC;cash-manager 处理资金与凭证。
7. 终止
业务:到期(最终结算)、提前终止(算终止支付额)、更替(改 counterpartyId)。
系统锚点
ContractSettleHelper.finalSettle() → 状态 ACTIVE → EXPIRED/TERMINATED。
五、每日时间表(记住节奏)
| 时间 | 系统 | 活动 | 出问题 |
|---|---|---|---|
| 08:00 | eds-price-server | 市场数据导入 | 未完成→用昨天数据开盘 |
| 15:00 | eds-web-app | 同日簿记截止 | 交易员催”等我5分钟” |
| 17:00 | hedging-as | EOD 估值/定盘 | 卡住→保证金计算推迟 |
| 18:30 | ofareg | SAC 监管报送 | 报错→运营加班重跑 |
六、测验(Recall 练习)
凭记忆作答,不要回看。每题选项等长,避免暗示。
交易"成为有约束力合约"的时刻是哪一步?
EOD 批处理中,判断雪球敲出/敲入的是第几步?
下列哪项检查是"硬性永久阻止"交易?
"定盘价"在 EOD 里主要用于什么?
DV01 是在 EOD 哪一步被算出的?
雪球盘中敲出但 EOD 状态仍活跃的"灰色地带",根因是什么?
交易录入错误(名义本金多一个零)通常在哪一步被发现?
EOD 第7步 Margin 主要计算什么?
七、错题本与复习
本课错题记录
八、延伸阅读(Primary Source)
- 内部:ODTS-05 交易生命周期 —— 本节所有代码锚点的母文档,含”幽灵状态机”与敲出灰色地带的完整踩坑。
- 内部:end-to-end-scenario.md §系统实现 —— 雪球一笔交易的 EOD 逐步代码映射。
- 监管:NAFMII 主协议 —— 理解确认书/ISDA 的法律骨架。
product-swap.md 的 CS01 代码锚点。Lesson 0002 · 上游 0001 全景与语汇 · 母文档 ODTS-05 · 错题追踪 0011 错题本 · MISSION: 产品 + IT 双线精通 · 样式 base.css