ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

gs-quant 利率 CMS 价差期权序列(IRCMSSpreadOptionStrip)建模与定价指南

gs-quant 利率 CMS 价差期权序列(IRCMSSpreadOptionStrip)建模与定价指南 gs-quant 利率 CMS 价差期权序列IRCMSSpreadOptionStrip建模与定价指南【免费下载链接】gs-quantPython toolkit for quantitative finance项目地址: https://gitcode.com/GitHub_Trending/gs/gs-quantCMSConstant Maturity Swap恒定到期互换价差期权是利率衍生品中一类以两条不同期限的 CMS 利率之差为标的的期权常用于表达对收益率曲线形态如 5s2s、10s2s 曲率的观点。而期权序列Strip则将这一结构扩展为一组覆盖多个连续到期日的价差期权从而把单点到期结构升级为整条到期曲线上方向性押注的打包工具。本文以开源项目 gs-quant 中IRCMSSpreadOptionStrip类为讲解核心结合其源码实现gs_quant/target/instrument.py与仓库内真实定价 Notebook完整讲解该工具类的字段语义、构造方式、定价调用链与相邻产品族对比帮助你直接用 gs-quant 完成利率 CMS 价差期权序列的建模、估值与风险度量。IRCMSSpreadOptionStrip的官方 API 文档由 Sphinx autodoc 自动生成于 docs/classes/gs_quant.instrument.IRCMSSpreadOptionStrip.rst其生成模板为 docs/_templates/instruments.rst本文所有字段与行为描述均以该文档页面所列属性及对应源码为准。一、产品定位什么是 CMS 价差期权序列在进入类实现之前先厘清 gs-quant 中三个容易混淆的利率工具类它们都位于gs_quant.instrument模块类名标的概念type_序列化值源码位置IRCMSOption单一 CMS 利率的期权cap/floorCMSOptiongs_quant/target/instrument.pyIRCMSOptionStrip单一 CMS 利率、多个连续到期日的期权序列CMSOptionStripgs_quant/target/instrument.pyIRCMSSpreadOption两条 CMS 利率之差的单一期权CMSSpreadOptiongs_quant/target/instrument.pyIRCMSSpreadOptionStrip两条 CMS 利率之差、多个连续到期日的期权序列CMSSpreadOptionStripgs_quant/target/instrument.py可以看到IRCMSSpreadOptionStrip处于价差Spread× 序列Strip两个维度的交叉点它既有index1/index2两个标的利率又通过termination_date与effective_date界定一个包含多个连续观察日/到期日的序列结构。从类定义看其asset_class被固定为AssetClass.RatesinitFalsetype_固定为AssetType.CMSSpreadOptionStrip也就是说该工具在序列化到 JSON 时type字段会被自动写为CMSSpreadOptionStrip标识其在风险平台侧的类型归属。二、类实现剖析dataclass 与序列化机制IRCMSSpreadOptionStrip的完整类定义如下gs_quant/target/instrument.pyhandle_camel_case_args dataclass_json(letter_caseLetterCase.CAMEL) dataclass(unsafe_hashTrue, reprFalse) class IRCMSSpreadOptionStrip(Instrument): cap_floor: Optional[str] field(defaultNone, metadatafield_metadata) termination_date: Optional[Union[datetime.date, str]] field(defaultNone, metadatafield_metadata) notional_currency: Optional[Currency] field(defaultNone, metadatafield_metadata) notional_amount: Optional[Union[float, str]] field(defaultNone, metadatafield_metadata) effective_date: Optional[Union[datetime.date, str]] field(defaultNone, metadatafield_metadata) strike: Optional[Union[float, str]] field(defaultNone, metadatafield_metadata) index1: Optional[str] field(defaultNone, metadatafield_metadata) index2: Optional[str] field(defaultNone, metadatafield_metadata) floating_rate_frequency: Optional[str] field(defaultNone, metadatafield_metadata) floating_rate_day_count_fraction: Optional[DayCountFraction] field(defaultNone, metadatafield_metadata) floating_rate_business_day_convention: Optional[BusinessDayConvention] field(defaultNone, metadatafield_metadata) reset_delay: Optional[str] field(defaultNone, metadatafield_metadata) premium: Optional[Union[float, str]] field(defaultNone, metadatafield_metadata) premium_payment_date: Optional[Union[datetime.date, str]] field(defaultNone, metadatafield_metadata) fee: Optional[float] field(default0.0, metadatafield_metadata) fee_currency: Optional[Currency] field(defaultNone, metadatafield_metadata) fee_payment_date: Optional[Union[datetime.date, str]] field(defaultNone, metadatafield_metadata) buy_sell: Optional[BuySell] field(defaultNone, metadatafield_metadata) asset_class: Optional[AssetClass] field(initFalse, defaultAssetClass.Rates, metadatafield_metadata) type_: Optional[AssetType] field(initFalse, defaultAssetType.CMSSpreadOptionStrip, metadataconfig(field_nametype, excludeexclude_none)) name: Optional[str] field(defaultNone, metadataname_metadata)三个装饰器决定了该类的核心行为dataclass(unsafe_hashTrue, reprFalse)将类实现为 dataclass支持字段级哈希便于在集合中去重/缓存repr由父类Instrument定制——gs_quant/instrument/core.py 中Instrument.__repr__返回ClassName(name)形式的可读表示而非 dataclass 默认的冗长字段转储。dataclass_json(letter_caseLetterCase.CAMEL)提供to_json/from_json序列化能力字段名在 JSON 侧统一为 camelCase例如notional_amount↔notionalAmount、termination_date↔terminationDate。handle_camel_case_args允许在构造时直接使用 camelCase 参数名即IRCMSSpreadOptionStrip(notionalAmount...)与notional_amount...均可接受与平台 API 的字段约定保持一致。从继承关系看IRCMSSpreadOptionStrip继承自InstrumentPriceableImplInstrumentBase见 gs_quant/instrument/core.py其PROVIDER GsRiskApi意味着估值与风险计算默认由 Marquee 风险服务GsRiskApi提供。三、字段全解文档页面属性逐一说明IRCMSSpreadOptionStrip 文档页 通过autoattribute指令列出了类的全部公开属性asset_class、type、PROVIDER按模板约定被隐藏其含义与取值范围如下3.1 标的结构与关键日属性类型说明index1/index2str两个标的 CMS 利率通常以 tenor 表达如5y、2y其利差即期权标的effective_datedate/str生效日序列的起点日期termination_datedate/str终止日序列最后一个到期日与effective_date共同界定 Strip 的到期范围cap_floorstr期权方向Cap看涨利差上限Floor看跌利差下限决定支付结构strikefloat/str行权价可传数值也可传ATMFAt-The-Money-Forward等相对行权表述notional_amountfloat/str名义本金notional_currencyCurrency名义货币Currency枚举为 ISO 4217 货币代码如EUR、USD定义见 gs_quant/target/common.py3.2 浮动利率利差基准约定序列中每个期权的支付/观察频率与计息约定由以下字段控制属性类型说明floating_rate_frequencystr浮动利率频率如3m、6mfloating_rate_day_count_fractionDayCountFraction计息天数字数惯例如ACT/360、30E/360枚举值见 gs_quant/target/common.pyfloating_rate_business_day_conventionBusinessDayConvention营业日调整规则可取Following、Modified Following、Previous、Unadjusted枚举定义见 gs_quant/target/common.pyreset_delaystr重置日相对计息期起点的滞后如0d、2d控制观察利率的实际定价日期3.3 费用与买卖方向属性类型说明premiumfloat/str期权费权利金未显式给定时通常由平台解出premium_payment_datedate/str期权费支付日feefloat前端费用如服务费默认0.0fee_currencyCurrency费用货币fee_payment_datedate/str费用支付日buy_sellBuySell交易方向Buy/Sell枚举见 gs_quant/target/common.py3.4 框架与元数据属性文档页还列出dataclass_json_config、instrument_quantity、quantity_、metadata、name、provider、resolution_key、type_、unresolved等属性它们来自Priceable/Instrument基类框架name用于在组合中标识该工具unresolved/resolution_key与resolve()流程相关详见第五节type_即前文提到的固定序列化类型CMSSpreadOptionStrip。四、构造示例如何创建一条 CMS 价差期权序列参考仓库中价差期权网格定价 Notebook15_spread_option_grid_pricing.ipynb中IRCMSSpreadOption的构造模式IRCMSSpreadOptionStrip的构造方式与之同族字段名差异在于 Strip 用index1/index2直接指定双标的而非index1_tenor/index2_tenorfrom gs_quant.instrument import IRCMSSpreadOptionStrip from gs_quant.markets import PricingContext from gs_quant.risk import Price, IRAnnualImpliedVol # 构造一条 5s2s CMS 价差 Cap 序列以 5y/2y CMS 利差为标的 # 从 2025-03-14 起至 2030-03-14共覆盖约 5 年的连续到期日 strip IRCMSSpreadOptionStrip( cap_floorCap, index15y, index22y, effective_date2025-03-14, termination_date2030-03-14, strikeATMF, # 或给定数值行权价 notional_currencyEUR, notional_amount10000, floating_rate_frequency3m, floating_rate_day_count_fractionACT/360, floating_rate_business_day_conventionModified Following, buy_sellBuy, name5s2s CMS Spread Cap Strip, ) # 在 PricingContext 中批量估值 with PricingContext(): price_f strip.calc(Price) # 期权序列现值 vol_f strip.calc(IRAnnualImpliedVol) # 年化隐含波动率 print(price_f.result()) print(vol_f.result())注意事项上述示例中的index1/index2、cap_floor、strike、floating_rate_*等均为该类源码中真实存在的字段ATMF相对行权与Modified Following等字符串取值符合 gs_quant/target/common.py 中的枚举语义。外部用户使用估值能力前需先建立会话GsSession.use(Environment.PROD, client_id..., client_secret..., scopes(run_analytics,))参见 Notebook 的初始化单元。若需要多条不同 index 组合、不同到期日批量定价可沿用 Notebook 的做法——把 Strip 放入Portfolio再对组合调用calc并to_frame()汇总结果。五、定价与解析流程从构造到风险度量文档页首行写明类的所有方法见gs_quant.base.Priceable即IRCMSSpreadOptionStrip的全部行为方法继承自 gs_quant/base.py 中定义的Priceable基类核心调用链如下5.1resolve()补齐缺失属性Priceable.resolve 用于解析未显式提供的工具属性。例如构造时只给了termination_date而未给strike调用strip.resolve()后平台会按市场数据补全诸如相对行权价格等派生字段使工具达到可定价状态。5.2calc(risk_measure)计算风险度量Priceable.calc 接受gs_quant.risk中的风险度量对象返回标量如Price或结构化结果如利率 Delta、波动率曲面可结合PricingContext批量异步计算with PricingContext(): price strip.calc(Price) # 返回 future退出上下文后取 .result() delta strip.calc(IRDelta) # 利率 Delta 敏感性从源码 docstring 可以看出直接调用返回 float/dataframe进入PricingContext后返回 future需通过.result()获取最终结果——这正是 Notebook 中with PricingContext(): ... result_p.to_frame()写法的底层机制。5.3dollar_price()美元现值Priceable.dollar_price 返回以美元计的现值适合跨币种组合的统一价值比较同样支持在PricingContext下异步获取。六、与相邻工具类的关系如何选型在构建利率结构产品组合时可依据以下维度选择工具类只对单一 CMS 利率表达观点、且只需单个到期日→ 使用IRCMSOption单一 CMS 利率、需要覆盖多个连续到期日→ 使用IRCMSOptionStrip对两条 CMS 利率利差曲线斜率/曲率表达观点、单个到期日→ 使用IRCMSSpreadOption仓库 Notebook 即演示了 5y/2y、10y/2y 两对利差的到期网格批量定价利差观点 多个连续到期日打包→ 使用本文主角IRCMSSpreadOptionStrip。四个类均继承同一Instrument基类因此resolve/calc/dollar_price/to_json等能力完全一致差异仅在标的字段与序列化type值CMSOption/CMSOptionStrip/CMSSpreadOption/CMSSpreadOptionStrip这意味着它们可以无差别地混入同一个Portfolio统一估值。七、进一步阅读类官方文档页docs/classes/gs_quant.instrument.IRCMSSpreadOptionStrip.rst类实现源码gs_quant/target/instrument.py以及同族IRCMSOption、IRCMSOptionStrip、IRCMSSpreadOption同文件 L2396-L2468基类行为定义gs_quant/base.pyPriceable.resolve/calc/dollar_price枚举取值定义gs_quant/target/common.pyBusinessDayConvention、BuySell与 同文件 L1036DayCountFraction价差期权批量定价实战 Notebook15_spread_option_grid_pricing.ipynb全部利率工具类索引docs/instrument.rst掌握IRCMSSpreadOptionStrip之后你便可以将收益率曲线形态观点如 5s2s 利差走阔/收窄工程化为一条可估值、可做敏感性分析的多到期日期权序列并借助 gs-quant 统一的Instrument抽象将其无缝接入组合级定价与风险管理流程。【免费下载链接】gs-quantPython toolkit for quantitative finance项目地址: https://gitcode.com/GitHub_Trending/gs/gs-quant创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表