gs-quant FXBinary 快速指南从构造到定价吃透外汇数字期权的关键做法【免费下载链接】gs-quantPython toolkit for quantitative finance项目地址: https://gitcode.com/GitHub_Trending/gs/gs-quant你想用 gs-quant 搭一笔 EURUSD 三个月期的数字期权到期汇率达标就支付固定比例。下面带你把 FXBinary 外汇二元期权从构造、行权价求解到定价跑通并避开几个会让估值看起来正常实则跑偏的坑。场景引入这笔外汇数字期权交易要算出什么动手写代码之前先把这笔交易的交付物列清楚行权价定在什么水平平价还是溢价若干、期权当前值多少、对应的支付比例是多少、成交条款确认前头寸如何快速放大或反转。FXBinary 的整条链路就是围绕这四个问题展开的前三个靠resolve()和calc()最后一个靠scale()完成。动手前准备FXBinary 构造所需的会话与权限建立与定价服务的会话是写交易之前的第一件事。依赖只需要 gs-quant 本身安装方式见 README.md代码侧只用两个类。from gs_quant.session import GsSession GsSession.use(client_idyour_id, client_secretyour_secret, scopes(run_analytics,))⚠️ 外部用户要把client_id/client_secret换成自己的凭证并确认账号具备run_analytics权限否则后面所有resolve()与calc()都会以认证失败告终。会话是全局的notebook 里建一次后文全部有效。三步跑通 FXBinary 最小实例最小参数构造 FXBinary三个字段就够货币对、买卖方向、到期期限。其余全部留空。from gs_quant.instrument import FXBinary d FXBinary(pairUSDJPY, buy_sellBuy, expiration_date3m)用 resolve() 让服务端补齐缺失字段构造完立刻resolve()服务端把没写的要素补齐。没有显式行权价时默认拿当前即期汇率当行权价等价于直接得到一个平价ATM数字期权与 FXOption 的行为一致结算日、结算汇率参考等字段也一并填上。d.resolve() print(d.as_dict())用 calc(FXSpot) 校验解析结果as_dict()里所有字段都有了值strikePrice变成具体数字结算相关字段也落地了。校验思路很简单——如果你把行权价写成1.1*s那么解析后的strike_price应该恰好等于calc(FXSpot) * 1.1写成F-2%则拿calc(FXFwd)对账。两个数对得上字符串就被按预期解析了这一招后面每次换行权价写法都可以复用。FXBinary 参数速查该填的、可不填的与基础字段最小实例跑通后接下来要决定参数怎么填。FXBinary 的字段按谁来填分成三组你主动填的决定交易性质、服务端会补的有明确需求才写、基础设施字段基本不动逐字段说明见 docs/classes/gs_quant.instrument.FXBinary.rst。组别字段类型 / 示例填写建议交易要素pairEURUSD、USDJPY必填交易要素buy_sellBuy/Sell必填交易要素option_typeCall/Put定看涨还是看跌交易要素notional_amount/notional_currency1e6、100k、Currency.USD定支付规模建议写交易要素strike_price数值或求解字符串留空 平价交易要素expiration_date3m或绝对日期必填交易要素expiration_time16:00 London日内到期场景才写交易要素settlement_date/settlement_rate_option日期或相对期限自定义结算条款才写权利金premium0或数值建议永远显式写权利金premium_currencyCurrency.USD权利金非零时配合写权利金premium_payment_date日期字符串涉及支付日才写基础字段nameEURUSD 3m Dig组合识别用基础字段quantity_/instrument_quantity浮点数数量调整用基础字段metadatadict携带自定义信息基础字段provider/resolution_key/type_/unresolved只读服务端管理别填取舍上记住两点类型为数值或字符串的字段strike_price、notional_amount、premium都支持100k这类简写能留空的字段虽会被服务端补齐但补出来的结果你事先看不见——凡是你在意的就显式写出来再解析后核对。行权价求解两种写法与 S/F/P/D 四个求解键参数填法清楚了最关键的还是行权价。strike_price有数值与字符串两种写法数值直接锁定价格如1.085字符串则交给服务端求解器算。求解器认四个键键含义用法示例s当前即期汇率s、1.1*sF对应到期的远期汇率F-2%、F10bpP按目标权利金比例反推行权价p10%D按期权 delta 反推行权价25D、20D-.01s和F支持乘加组合s*1.1、F10%这类写法直接可用。三个小例子覆盖三种典型场景from gs_quant.risk import FXSpot, FXFwd pay10 FXBinary(pairEURUSD, buy_sellSell, option_typePut, expiration_date1m, strike_pricep10%, premium0) itm FXBinary(pairAUDUSD, buy_sellBuy, expiration_date3m, strike_price1.1*s) otm FXBinary(pairAUDUSD, buy_sellBuy, expiration_date3m, notional_amount100k, strike_priceF-2%) for b in (pay10, itm, otm): b.resolve() print(b.strike_price, b.calc(FXSpot), b.calc(FXFwd))第一笔是按支付比例 10% 求解行权价注意它显式写了premium0否则求解目标会被自动补的权利金污染第二笔是即期上方 10% 的价内单第三笔是远期下方 2% 的价外单100k是名义本金的字符串简写。对账方式如前所述itm.strike_price应等于itm.calc(FXSpot) * 1.1otm.strike_price应等于otm.calc(FXFwd) * 0.98。估值与组合操作calc 度量与 scale 缩放行权价定了就可以取价值。calc()有两种用法传单个体量拿到标量或 DataFrame传元组一次算多个。放进PricingContext后calc()返回PricingFuture不阻塞——同一上下文中提交的多笔头寸会被批量计算之后统一.result()取数这就是组合级估值的标准姿势。from gs_quant.risk import DollarPrice, FairPremium dp pay10.calc(DollarPrice) with PricingContext(): f itm.calc((DollarPrice, FairPremium)) print(f.result())调整头寸规模与方向用scale()/flip()FXBinary 的缩放规则如下scaling为None或1时直接返回实例不做任何修改已解析实例按notional_amount * |scaling|缩放名义本金scaling 0时缩放名义本金同时把Buy/Sell翻转未解析实例要缩放前提是notional_amount与buy_sell都已设置且名义为数值否则抛RuntimeErrorflip()等价于scale(-1)一行生成镜像头寸。答疑区FXBinary 的五个高频坑✅ 下面五个问题环境一切正常时也最容易踩。Q1resolve() 之后 DollarPrice 为什么恒为 0因为没写premium时服务端解析会自动补一笔公允价值权利金——它恰好抵消期权价值交易本身是公允的但DollarPrice永远是 0你看不到期权的真实价值。两种解法构造时显式传premium0DollarPrice就返回期权的实际现值或者改用FairPremium/FairPremiumInPercent度量它们忽略交易上已设的权利金直接返回公允权利金。Q2FXBinary 用 Call/Put为什么多腿二元要用 Binary_Call/Binary_Put两类工具的枚举值不通用单腿的FXBinary用OptionType.Call/OptionType.Put而FXMultiCrossBinaryLeg多交叉二元期权的腿必须用OptionType.Binary_Call/OptionType.Binary_Put。混着用会解析出错或得到完全不相干的结果。Q3蛇形和驼峰参数写法等价吗等价。构造 FXBinary 时notional_amount...与notionalAmount...指的是同一个字段方便你直接对齐外部 JSON 交易定义序列化侧as_dict()/from_dict()也统一走驼峰命名所以 Python 侧的notional_amount对应 JSON 里的notionalAmount。Q4字符串行权价怎么校验求解结果resolve()后拿strike_price与你按calc(FXSpot)/calc(FXFwd)推算的期望值比对写1.1*s就核对strike_price calc(FXSpot) * 1.1写F-2%就核对strike_price calc(FXFwd) * 0.98。对不上时优先怀疑解析口径或检查市场数据时点与到期期限是否匹配。Q5未解析实例缩放时什么条件会报错check_resolved为默认的True时实例未解析就调用scale()直接抛RuntimeError。若传check_resolvedFalse强制缩放还要求notional_amount与buy_sell都非空、且名义本金是数值——写成100k字符串会再次抛出RuntimeError。延伸学习以上流程吃透后下面这些仓库内资源可以帮你继续深入gs_quant/target/instrument.pyFXBinary 字段声明与scale_in_place缩放实现gs_quant/instrument/core.pyInstrument基类中resolve/calc/scale/flip的定义04_fx_binary_trade_construction.ipynb构造、求解、校验全流程的可运行 notebookinstruments.mdGS 官方技能文档外汇工具共性坑点与对照写法docs/classes/gs_quant.instrument.FXBinary.rstFXBinary 全部字段的文档页gs_quant/priceable.pyPriceable基类及其与PricingContext的配合方式下一步可以做的三件事把pair换成USDJPY、AUDNZD等交叉盘同一名义下对比平价二元与 vanilla 期权的DollarPrice、FairPremium差异用循环扫描strike_pricep5%到p20%输出支付比例 — 行权价对照表定位客户能接受的档位把不同期限的两笔 FXBinary 放进同一个PricingContext批量估值练熟.result()的异步取数模式【免费下载链接】gs-quantPython toolkit for quantitative finance项目地址: https://gitcode.com/GitHub_Trending/gs/gs-quant创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考