ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

gs-quant 外汇累购计划腿 FXAccumulatorScheduleLeg 全解析:字段、继承体系与 FXAccumulator 集成实践

gs-quant 外汇累购计划腿 FXAccumulatorScheduleLeg 全解析:字段、继承体系与 FXAccumulator 集成实践 gs-quant 外汇累购计划腿 FXAccumulatorScheduleLeg 全解析字段、继承体系与 FXAccumulator 集成实践【免费下载链接】gs-quantPython toolkit for quantitative finance项目地址: https://gitcode.com/GitHub_Trending/gs/gs-quantFXAccumulatorScheduleLeg 是 gs-quantGoldman Sachs 开源的 Python 量化金融工具包中用于描述外汇累购/累沽Accumulator/Decumulator产品单期计划的腿级数据结构。本文以仓库内 Sphinx 文档页 docs/classes/gs_quant.instrument.FXAccumulatorScheduleLeg.rst 为骨架结合 gs_quant/target/instrument.py 中该类的源码实现系统讲解其 16 个可访问属性、从 InstrumentBase/Instrument 继承的解析与定价能力以及如何作为FXAccumulator.schedules的一部分构建完整的外汇累购产品。一、外汇累购产品与 ScheduleLeg 的定位外汇累购FX Accumulator是一类结构化的奇异期权产品投资者在约定期限内按固定行权价分批买入或卖出外汇通常附带杠杆leverage ratio与敲出/敲入屏障knock-out/knock-in barrier。一份完整的累购合约由多个计划腿Schedule Leg组成每个腿承载一期具体的执行条款——行权价、敲出水平、欧式敲入水平、定价日、支付日与名义本金。在 gs-quant 中这种整单-腿的建模方式被严格贯彻腿级类型 FXAccumulatorScheduleLeg 定义于 gs_quant/target/instrument.py整单类型FXAccumulator定义于同一文件的 第 2015 行通过schedules: Optional[tuple[FXAccumulatorScheduleLeg, ...]]字段将多条腿聚合为一张完整合约。腿本身也是Instrument的子类因此具备独立的命名、解析resolve、定价calc与序列化能力可单独使用也可嵌套在整单中使用。二、类定义与序列化基础源码级解读从源码看FXAccumulatorScheduleLeg的完整类定义如下gs_quant/target/instrument.pyhandle_camel_case_args dataclass_json(letter_caseLetterCase.CAMEL) dataclass(unsafe_hashTrue, reprFalse) class FXAccumulatorScheduleLeg(Instrument): strike: Optional[Union[float, str]] field(defaultNone, metadatafield_metadata) european_knock_in: Optional[Union[float, str]] field(defaultNone, metadatafield_metadata) knock_out_level: Optional[Union[float, str]] field(defaultNone, metadatafield_metadata) fixing_date: Optional[Union[datetime.date, str]] field(defaultNone, metadatafield_metadata) payment_date: Optional[Union[datetime.date, str]] field(defaultNone, metadatafield_metadata) notional_amount: Optional[Union[float, str]] field(defaultNone, metadatafield_metadata) leverage_ratio: Optional[Union[float, str]] field(defaultNone, metadatafield_metadata) asset_class: Optional[AssetClass] field(initFalse, defaultAssetClass.FX, metadatafield_metadata) type_: Optional[AssetType] field(initFalse, defaultAssetType.AccumulatorScheduleLeg, metadataconfig(field_nametype, excludeexclude_none)) name: Optional[str] field(defaultNone, metadataname_metadata)三个装饰器决定了该类的底层行为装饰器作用dataclass_json(letter_caseLetterCase.CAMEL)序列化时自动将 Python 蛇形字段名转换为驼峰 JSON 键例如notional_amount对外写作notionalAmount与 Goldman Sachs 服务端契约保持一致handle_camel_case_args允许构造时直接传入驼峰形式的关键字参数方便与外部系统对接dataclass(unsafe_hashTrue, reprFalse)提供基于全部字段的哈希可放入集合/作为字典键并启用自定义__repr__见下文Instrument.__repr__其中field_metadata与name_metadata定义在 gs_quant/base.pyfield_metadata config(excludeexclude_none)表示字段值为None时序列化自动剔除name_metadata config(excludeexclude_always)表示name字段在任何情况下都不随默认序列化输出仅在显式指定时携带。三、腿级业务字段详解PropertiesSphinx 文档页罗列的属性中前 7 个是腿自己的业务字段全部可选Optional类型为float/str或日期属性类型语义strikeOptional[Union[float, str]]本期计划的行权价可为数值或引用市场值的字符串表达式european_knock_inOptional[Union[float, str]]欧式敲入水平到期/定价时刻汇率低于或高于该水平时本期计划生效knock_out_levelOptional[Union[float, str]]敲出水平触及后本期或整单计划提前终止fixing_dateOptional[Union[datetime.date, str]]定价日观测汇率确定结算数量的日期payment_dateOptional[Union[float, str]]源码中为Optional[Union[datetime.date, str]]支付日结算资金实际划转的日期notional_amountOptional[Union[float, str]]本期名义本金leverage_ratioOptional[Union[float, str]]杠杆倍数决定每期实际交割量相对本金的放大比例注文档页docs/classes/gs_quant.instrument.FXAccumulatorScheduleLeg.rst中payment_date标注的静态类型为Optional[Union[float, str]]而 gs_quant/target/instrument.py 中实现为Optional[Union[datetime.date, str]]实际使用中以源码实现为准日期语义也符合支付日的业务含义。不可直接赋值的派生字段除业务字段外还有两个由dataclass_json序列化机制生成/派生的属性dataclass_json_configdataclass_json库自动附加的配置对象承载LetterCase.CAMEL等序列化选项一般无需手动操作type_以config(field_nametype, excludeexclude_none)映射为 JSON 键type值固定为AssetType.AccumulatorScheduleLeg且initFalse——序列化/反序列化时用于类型识别不能在构造时覆盖。此外Instrument.from_dictgs_quant/instrument/core.py在反序列化时正是依据asset_class与type两个键通过Instrument.__asset_class_and_type_to_instrument()构建的映射表gs_quant/instrument/core.py定位到FXAccumulatorScheduleLeg类并完成还原因此type/asset_class是 JSON 往返的关键。四、继承属性与方法Priceable → InstrumentBase → InstrumentSphinx 文档页首行注明For methods of this class, see gs_quant.base.Priceable。FXAccumulatorScheduleLeg的继承链为Instrument→InstrumentBase→Base其中Instrument又继承自PriceableImpl文档列出的其余属性均来自该继承体系4.1 InstrumentBase 提供的运行时属性gs_quant/base.py属性说明name可选名称序列化时默认剔除exclude_always通常由使用者显式赋值instrument_quantity只读属性返回quantity_持仓数量默认为 1用于组合层面数量缩放quantity_内部初始化变量InitVar默认 1不参与序列化resolution_key只读记录该实例最近一次resolve所使用的定价上下文键RiskKey未解析时为Noneunresolved只读保存解析前原始实例的快照副本便于追溯解析前长什么样metadata可读写的附加元数据字典clone()时会随实例一同复制4.2 Instrument 提供的核心能力gs_quant/instrument/core.py成员说明provider只读属性固定返回GsRiskApicore.py 第 45、70-72 行声明该产品的数据提供方resolve(in_placeTrue)调用定价服务补齐未提供的字段如由市场数据反解行权价默认就地更新实例在HistoricalPricingContext或MultiScenario下不允许就地解析core.py 第 108-112 行calc(risk_measure, fnNone)在PricingContext中计算指定风险度量如 FX 类 Delta/Vega返回数值或PricingFutureclone(**kwargs)深拷贝并支持覆写字段unresolved/metadata/resolution_key一并保留from_dict / to_dict与驼峰 JSON 契约互通from_dict支持按$type/assetClasstype自动识别具体子类from_quick_entry(text)用自然语言快速创建产品内部经GsParserApi解析__repr__输出形如FXAccumulatorScheduleLeg(name)的简洁表示core.py 第 48-49 行五、与 FXAccumulator 整单的集成schedules 字段腿不是孤立存在的其核心使用场景是作为FXAccumulator.schedules元组的元素。整单类gs_quant/target/instrument.py定义了如下整单级参数class FXAccumulator(Instrument): pair: Optional[str] # 货币对如 USDJPY new_or_unwind: Optional[NewOrUnwind] # 新建还是平仓 notional_amount: Optional[Union[float, str]] # 整单名义本金 notional_currency: Optional[Currency] # 名义本金币种 leverage_ratio: Optional[Union[float, str]] # 整单杠杆 european_knock_in: Optional[Union[float, str]] # 整单级欧式敲入 strike: Optional[Union[float, str]] # 整单级行权价 knock_out_level: Optional[Union[float, str]] # 整单级敲出 accum_or_decum: Optional[AccumOrDecum] # 累购(Accum)/累沽(Decum) accumulator_type: Optional[AccumulatorType] # Terminating / Non-Terminating expiration_date / settlement_date # 到期日与结算日 premium / premium_currency / premium_payment_date # 期权费 first_fixing_date / coupon_frequency # 首次定价日与频率 guaranteed_coupons / number_of_expiry # 保底收益/到期次数 fixing_rate_option / method_of_settlement # 定价源/结算方式 settlement_currency / settlement_rate_option # 结算币种/结算汇率源 schedules: Optional[tuple[FXAccumulatorScheduleLeg, ...]] # 计划腿集合其中accum_or_decum与accumulator_type的取值定义在 gs_quant/target/common.pyAccumOrDecumAccum累购/Decum累沽/Non-Standard非标准AccumulatorTypeTerminating终止型/Non-Terminating非终止型。整单级参数与腿级参数互为覆盖关系整单参数作为默认值/兜底schedules中每条腿可独立覆盖行权价、敲出、敲入、定价日、支付日、名义本金与杠杆实现同一合约内多期不同条款的真实业务建模。六、实操示例构建带两条计划腿的累购整单以下示例基于上述源码字段构造字段名与 gs_quant/target/instrument.py 一一对应展示腿与整单的组合方式import datetime as dt from gs_quant.instrument import FXAccumulatorScheduleLeg, FXAccumulator from gs_quant.common import AccumOrDecum, AccumulatorType, NewOrUnwind # 腿 1第一期计划敲出屏障较高杠杆 2 倍 leg_1 FXAccumulatorScheduleLeg( strike105.0, knock_out_level115.0, european_knock_in100.0, fixing_datedt.date(2026, 10, 1), payment_datedt.date(2026, 10, 5), notional_amount1_000_000, leverage_ratio2.0, nameleg-1 ) # 腿 2第二期计划无敲入杠杆 1 倍 leg_2 FXAccumulatorScheduleLeg( strike106.0, knock_out_level112.0, fixing_datedt.date(2026, 11, 1), payment_datedt.date(2026, 11, 5), notional_amount1_000_000, leverage_ratio1.0, nameleg-2 ) # 整单两腿累购 accumulator FXAccumulator( pairUSDJPY, new_or_unwindNewOrUnwind.New, notional_currencyJPY, accum_or_decumAccumOrDecum.Accum, accumulator_typeAccumulatorType.Terminating, expiration_datedt.date(2026, 12, 1), settlement_datedt.date(2026, 12, 3), first_fixing_datedt.date(2026, 10, 1), schedules(leg_1, leg_2), nameUSDJPY Accumulator ) print(accumulator) # FXAccumulator(USDJPY Accumulator) print(leg_1.instrument_quantity) # 1.0来自 quantity_ print(leg_1.to_dict()) # 驼峰键输出如 {strike: 105.0, knockOutLevel: 115.0, ...}提示strike、knock_out_level、european_knock_in等字段同时接受字符串表达式如ATMF、spot * 0.98可在字段未确定时先以表达式占位随后调用resolve()交由定价服务补全为具体数值。注意resolve()需要有效的服务端会话与市场数据访问权限。如需将腿单独用于风险度量计算可沿用所有Instrument共用的模式参考 core.py 中calc的文档示例from gs_quant.markets import PricingContext from gs_quant.risk import FXVega with PricingContext(): future leg_1.calc(FXVega) # 异步提交定价 vega future.result() # 获取计算结果七、最佳实践与注意事项字段语义分级strike/knock_out_level/european_knock_in可传数值或市场表达式字符串日期字段推荐使用datetime.date序列化时自动转换为 ISO 字符串。整单参数优先在FXAccumulator声明仅当单期条款与整单不一致时才在腿级覆写避免冗余与歧义。序列化往返由于type_固定为AssetType.AccumulatorScheduleLeg、asset_class固定为AssetClass.FX均为initFalse反序列化时可被Instrument.from_dict自动识别还原无需手工指定类型。name的序列化特性name采用exclude_always元数据to_dict()默认不携带如需保留名称需显式处理这与 gs_quant/base.py 中name_metadata的定义一致。解析状态追踪resolve()后可通过unresolved对比原始定义、通过resolution_key确认定价上下文便于审计与复现。依赖与服务本类为 thin-model 型定义仅承载字段与序列化实际定价依赖 gs-quant 的会话GsSession与服务端 API本地离线环境仅能完成对象建模与序列化无法执行resolve/calc。八、延伸阅读完整类文档 FXAccumulatorScheduleLegAPI 参考页、FXAccumulatorAPI 参考页基类能力 Priceable方法总览源码入口 腿与整单定义、FXAccumulator 整单定义、Instrument 核心方法、InstrumentBase 属性相关枚举 AccumOrDecum / AccumulatorType / NewOrUnwind项目总览 instrument 模块文档【免费下载链接】gs-quantPython toolkit for quantitative finance项目地址: https://gitcode.com/GitHub_Trending/gs/gs-quant创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表