gs-quant FXOptionStrategy 实战指南:用 Python 构建多腿外汇期权策略
gs-quant FXOptionStrategy 实战指南用 Python 构建多腿外汇期权策略【免费下载链接】gs-quantPython toolkit for quantitative finance项目地址: https://gitcode.com/GitHub_Trending/gs/gs-quant导读FXOptionStrategy是 gs-quant 量化金融工具包中用于刻画多腿外汇期权策略如跨式 straddle、宽跨式 strangle、价差组合的核心仪器类。它通过一组FXOptionLeg腿结构组合出完整的期权策略并继承了Priceable的全部定价与解析能力。读完本文你将掌握FXOptionStrategy的完整字段语义、腿的构造方式、序列化规则以及如何将策略接入 gs-quant 的定价上下文中完成估值。一、FXOptionStrategy 的定位与源码出处本文对应的官方类参考页为 docs/classes/gs_quant.instrument.FXOptionStrategy.rst。该页面以 Sphinx autodoc 形式展示了类的全部公开属性并明确指出本类的方法解析、定价等继承自Priceable详见 docs/classes/gs_quant.base.Priceable.rst。从源码看类的真实定义位于 gs_quant/target/instrument.py 第 2133 行handle_camel_case_args dataclass_json(letter_caseLetterCase.CAMEL) dataclass(unsafe_hashTrue, reprFalse) class FXOptionStrategy(Instrument): pair: Optional[str] field(defaultNone, metadatafield_metadata) buy_sell: Optional[BuySell] field(defaultNone, metadatafield_metadata) strategy_name: Optional[str] field(defaultNone, metadatafield_metadata) legs: Optional[tuple[FXOptionLeg, ...]] field(defaultNone, metadatafield_metadata) option_type: Optional[OptionType] field(defaultNone, metadatafield_metadata) # ...其余字段见下文属性表 asset_class: Optional[AssetClass] field(initFalse, defaultAssetClass.FX, metadatafield_metadata) type_: Optional[AssetType] field(initFalse, defaultAssetType.OptionStrategy, metadataconfig(field_nametype, excludeexclude_none)) name: Optional[str] field(defaultNone, metadataname_metadata)类定义前的三个装饰器决定了它的核心行为handle_camel_case_args允许以驼峰命名如notionalAmount传入构造参数与 JSON 报文习惯对齐dataclass_json(letter_caseLetterCase.CAMEL)提供to_dict()/from_dict()序列化序列化输出为 camelCasedataclass(unsafe_hashTrue, reprFalse)作为 dataclass 支持按值哈希比较便于在组合、缓存场景中使用。对外导出的入口是 gs_quant/instrument/init.py 中的from gs_quant.target.instrument import *因此业务代码中直接from gs_quant.instrument import FXOptionStrategy即可。asset_class固定为AssetClass.FXtype固定为AssetType.OptionStrategy两者不可通过构造函数修改用于在计算服务端路由到对应的外汇期权定价引擎。二、完整属性清单与字段语义参考文档页列出了FXOptionStrategy的全部公开属性结合源码可整理为以下语义分组。除特别说明外所有字段均可选Optional未赋值字段在序列化时被排除。2.1 策略级字段属性类型说明pairOptional[str]外汇货币对如EURUSD、USDJPYbuy_sellOptional[BuySell]买卖方向取BuySell.Buy/BuySell.Sellstrategy_nameOptional[str]策略名称标签用于标识该策略组合legsOptional[tuple[FXOptionLeg, ...]]构成策略的腿序列是策略的核心载体option_typeOptional[OptionType]期权类型如OptionType.Call/OptionType.PutnameOptional[str]仪器名称仅作标识用途2.2 名义与金额字段属性类型说明notional_amountOptional[Union[float, str]]名义本金支持数值或表达式字符串如1mnotional_currencyOptional[Currency]名义本金币种如Currency.USDnotional_amount_in_other_currencyOptional[Union[float, str]]以对手货币计价的名义金额用于非本金币种计量的场景settlement_currencyOptional[Currency]结算币种settlement_dateOptional[Union[datetime.date, str]]结算日期settlement_rate_optionOptional[str]结算汇率选项指定结算时采用的汇率确定方式2.3 合约条款字段属性类型说明strike_priceOptional[Union[float, str]]执行价支持数值或表达式如atm、atm0.02expiration_dateOptional[Union[datetime.date, str]]到期日支持日期对象或相对表达式如3mexpiration_timeOptional[str]到期时间exercise_styleOptional[OptionExerciseStyle]行权方式European/American等method_of_settlementOptional[OptionSettlementMethod]结算方式现金结算Cash或实物交割PhysicalpremiumOptional[Union[float, str]]期权费premium_currencyOptional[Currency]期权费币种premium_payment_dateOptional[str]期权费支付日2.4 继承自 Instrument 基类的属性以下属性同样出现在参考文档的属性列表中但定义在基类Instrument中metadata附加元数据字典instrument_quantity/quantity_仪器数量provider数据/定价提供商标识resolution_key解析键用于标识解析结果对应的市场数据快照unresolved未解析字段列表解析前存在、解析后被清空dataclass_json_configdataclass-json 序列化配置。这些字段与Priceable的resolve()流程强相关调用解析后表达式形式的参数如3m、atm会被替换为具体数值unresolved与resolution_key反映解析状态。三、腿结构FXOptionLeg 详解策略的基本单元是腿。源码中 FXOptionLeg 是一个独立的Instrument子类字段如下class FXOptionLeg(Instrument): buy_sell: Optional[BuySell] # 该腿买卖方向 option_type: Optional[OptionType] # Call / Put notional_amount: Optional[Union[float, str]] # 腿的名义本金 notional_currency: Optional[Currency] # 名义本金币种 notional_amount_in_other_currency: Optional[Union[float, str]] strike_price: Optional[Union[float, str]] # 执行价可含 atm 表达式 expiration_date: Optional[Union[datetime.date, str]] settlement_date: Optional[Union[datetime.date, str]] premium: Optional[Union[float, str]] premium_currency: Optional[Currency] premium_payment_date: Optional[str] settlement_currency: Optional[Currency] settlement_rate_option: Optional[str] method_of_settlement: Optional[OptionSettlementMethod] expiration_time: Optional[str] exercise_style: Optional[OptionExerciseStyle] asset_class: Optional[AssetClass] # 固定 AssetClass.FX type_: Optional[AssetType] # 固定 AssetType.OptionLeg序列化键为 type name: Optional[str]腿自身也是handle_camel_case_argsdataclass_json(CAMEL)的 dataclass序列化行为与策略一致。构造策略时将若干条FXOptionLeg组装为元组赋给legs字段即可例如经典的跨式组合一条 Call 腿 一条 Put 腿、同执行价同到期日。四、实战示例构造并定价一个外汇期权策略以下示例展示如何用FXOptionStrategy构造一个 EURUSD 跨式组合straddle并接入定价上下文。此模式与仓库 documentation/02_pricing_and_risk/00_instruments_and_measures 中的外汇期权示例用法一致。from datetime import date from gs_quant.common import BuySell, OptionType, OptionExerciseStyle, Currency from gs_quant.instrument import FXOptionStrategy, FXOptionLeg from gs_quant.markets import PricingContext # 1. 定义两条腿同执行价、同到期的 Call 与 Put call_leg FXOptionLeg( buy_sellBuySell.Buy, option_typeOptionType.Call, notional_amount10_000_000, notional_currencyCurrency.USD, strike_priceatm, # 表达式以市价 ATM 确定执行价 expiration_date3m, # 相对到期表达式 expiration_time10:00, exercise_styleOptionExerciseStyle.European, ) put_leg FXOptionLeg( buy_sellBuySell.Buy, option_typeOptionType.Put, notional_amount10_000_000, notional_currencyCurrency.USD, strike_priceatm, expiration_date3m, expiration_time10:00, exercise_styleOptionExerciseStyle.European, ) # 2. 组装策略 straddle FXOptionStrategy( pairEURUSD, strategy_nameEURUSD 3M Straddle, legs(call_leg, put_leg), buy_sellBuySell.Buy, notional_currencyCurrency.USD, expiration_date3m, expiration_time10:00, ) # 3. 在定价上下文中解析并定价 with PricingContext(pricing_datedate(2026, 9, 14), marketLOCAL, currencyCurrency.USD): resolved straddle.resolve() # 将 atm、3m 等表达式解析为具体值 price straddle.price() # 计算策略公允价值ReportJobFuture print(price.to_frame())要点说明strike_price、expiration_date等支持字符串表达式这是 gs-quant 的通用约定resolve()阶段会结合市场数据将其落定为具体数值解析前策略对象处于未解析状态unresolved属性会列出尚未解析的字段策略级字段如buy_sell、expiration_date可对整个组合生效各腿级字段则用于刻画腿的独立条款price()返回异步结果对象ReportJobFuture调用.to_frame()或.result()获取估值结果这是Priceable定价接口的通用返回模式该策略在计算服务端按typeOptionStrategy路由定价引擎服务端需要pair对应的外汇市场数据可用本地模式marketLOCAL时受本地缓存限制。五、序列化与 JSON 报文无缝对接由于策略与腿均标注dataclass_json(letter_caseLetterCase.CAMEL)可以一键导出/导入标准 camelCase JSON便于存储、传输或在 Marquee 平台侧复用payload straddle.to_dict() # 输出片段 # { # type: OptionStrategy, # pair: EURUSD, # strategyName: EURUSD 3M Straddle, # buySell: Buy, # legs: [ # {type: OptionLeg, buySell: Buy, optionType: Call, strikePrice: atm, ...}, # {type: OptionLeg, buySell: Buy, optionType: Put, strikePrice: atm, ...} # ], # ... # } restored FXOptionStrategy.from_dict(payload)同时handle_camel_case_args允许构造时直接使用notionalAmount、strikePrice等驼峰参数名与 JSON 字段一一对应。未赋值的可选字段在序列化时会被排除字段元数据中的excludeexclude_none配置保证报文最小化。六、与单腿 FXOption 及其他 FX 策略的关系仓库中还存在同族的仪器类均在 gs_quant/target/instrument.pyFXOption第 1170 行单腿外汇期权字段与FXOptionLeg高度相似适合单个期权场景FXOptionStrategy第 2133 行多腿组合用legs: tuple[FXOptionLeg, ...]承载结构化策略FXPivot第 2161 行、FXTarf第 2198 行带目标条款的路径依赖型外汇结构通过schedulesFXPivotScheduleLeg/FXTarfScheduleLeg定义分段条款FXWorstOf/FXWorstOfKO第 2233 / 2250 行多资产最差收益类结构同样以腿元组组织。选择依据若只需表达单个期权用FXOption需要把多个期权组合成一个可整体定价、整体报价的策略对象时使用FXOptionStrategy涉及目标收益、障碍与分段的复杂结构则对应上述专用类。它们的共同点是都继承自Instrument并享有Priceable的解析、定价、风险度量能力。七、扩展阅读类参考页docs/classes/gs_quant.instrument.FXOptionStrategy.rst、docs/classes/gs_quant.instrument.FXOptionLeg.rst基类能力docs/classes/gs_quant.base.Priceable.rstresolve/price/calc等方法来源源码实现gs_quant/target/instrument.pyFXOptionLeg见 L1215FXOptionStrategy见 L2133定价上下文docs/classes/gs_quant.markets.core.PricingContext.rst实战示例documentation/02_pricing_and_risk/00_instruments_and_measures 目录下的外汇期权 Notebook【免费下载链接】gs-quantPython toolkit for quantitative finance项目地址: https://gitcode.com/GitHub_Trending/gs/gs-quant创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考