Quanto期权定价全解析:测度变换、漂移调整与数值实现
在做结构化的外汇衍生品定价时Quanto期权Quantity Adjusting Option数量调整期权是我见过被误解最多、也最容易被拍脑袋估值的品种之一。很多做量化的人一看到“Quanto”就想到复杂的外汇模型觉得它不过是把普通期权的标的价格换成了外币资产再乘一个汇率可一旦真正开始推公式几乎都会在漂移项上卡住。这篇笔记就是把我自己推导Quanto期权定价公式的完整过程、关键假设、以及实际编码中容易踩的坑整理出来。需要说明的是文章处于“更新中”状态后续我还会补充数值实现、对冲参数和与普通期权对比的实测案例先把最核心的推导框架和逻辑链彻底讲透。1. 为什么不能直接用普通Black-Scholes套Quanto期权先明确Quanto期权到底解决什么问题。假设你是一位美国投资者看好欧洲股市的一只股票但不想承担欧元兑美元汇率波动的风险。你买入的这只股票以欧元计价但你希望最终的盈亏以美元结算并且无论欧元兑美元汇率怎么变都不影响你这份期权的现金流。这种“以外币计价资产为标的、以本币支付盈亏”的期权就是Quanto期权。很多人第一反应是既然盈亏都用美元结算了那我直接用美元无风险利率r_USD把股票价格S_t当作美元资产代入Black-Scholes公式不就行了吗这条路走不通。原因在于股票价格S_t本身是欧元计价的它在欧元区的风险中性测度下漂移项由欧元无风险利率r_EUR决定。但当你用美元结算时相当于把S_t当成了一种“合成美元资产”而这个合成资产的漂移项会额外受到汇率波动率与股票波动率之间相关性的影响。忽略这个相关性你定出来的期权价格就缺了一块风险补偿长期做市必然亏钱。用一句话概括Quanto期权的定价难点不在“汇率本身”而在“汇率与标的资产的联合动态”如何被风险中性测度变换改变。要理解这一点得先把符号统一起来。我写这篇笔记用的符号约定如下S_t以外币计价的标的资产价格比如欧元计价的股票F_t汇率表示1单位外币可兑换的本币数量比如EUR/USDr_d本币无风险利率美元r_f外币无风险利率欧元q标的资产的外币股息收益率如果是股指Quantoq要换成外币计价的股息率σ_S标的资产价格波动率σ_F汇率波动率ρ标的资产收益率与汇率收益率之间的瞬时相关系数W_S、W_F风险中性下的布朗运动两者相关系数为ρ2. 三步法从外币测度到本币测度的完整推导2.1 设定外币风险中性测度下的资产动态我们先站在外币投资者欧元区投资者的视角搭建基础的概率空间。在外币风险中性测度Q_f下以欧元计价的股票价格S_t服从几何布朗运动dS_t / S_t (r_f - q) dt σ_S dW_S(t)这里r_f - q是欧元计价的股息调整漂移项和普通Black-Scholes完全一致还没有任何“Quanto味道”。同理汇率F_t1欧元兑多少美元在外币风险中性测度下服从dF_t / F_t (r_f - r_d) dt σ_F dW_F(t)为什么汇率在外币测度下的漂移项是r_f - r_d这来自利率平价关系持有外币存款得到利率r_f换成美元存款得到利率r_d两者之差决定了汇率的远期漂移。这个公式本身不复杂但它马上会成为下面推导的基础。2.2 换到本币风险中性测度时漂移项如何变化现在的问题变成了我们要给美元投资者定价Quanto期权必须把上面的动态变换到本币风险中性测度Q_d。这个变换在金融数学里叫测度变换change of numéraire采用的计价单位是美元货币市场账户B_d(t) e^(r_d·t)。测度变换的核心是Girsanov定理。直觉上从外币测度换到本币测度相当于把“以欧元存款账户为计价单位”的视角切换成“以美元存款账户为计价单位”这个切换会改变所有资产价格的风险中性漂移项变化量取决于资产价格与汇率之间的协方差。经过测度变换后在外币测度Q_f下的两条布朗运动W_S和W_F在本币测度Q_d下会变成W_S^d(t) W_S(t) - ρ·σ_F·t W_F^d(t) W_F(t) - σ_F·t注意这两条是本币测度下的新布朗运动。现在把W_S(t)替换成W_S^d(t)代入股票价格动态dS_t / S_t (r_f - q) dt σ_S dW_S(t) (r_f - q) dt σ_S (dW_S^d(t) ρ·σ_F·dt) (r_f - q ρ·σ_S·σ_F) dt σ_S dW_S^d(t)看到了吗在本币风险中性测度下以外币计价的股票价格S_t的漂移项变成了r_f - q ρ·σ_S·σ_F这个多出来的ρ·σ_S·σ_F就是著名的Quanto漂移调整项也叫Quanto adjustment。这还没完汇率F_t的漂移项也要跟着变dF_t / F_t (r_f - r_d) dt σ_F dW_F(t) (r_f - r_d) dt σ_F (dW_F^d(t) σ_F·dt) (r_f - r_d σ_F²) dt σ_F dW_F^d(t)在Q_d测度下现货汇率的漂移项应该是0因为现货汇率在本币测度下是一个鞅。检查一下r_f - r_d σ_F² 0这不成立。问题出在哪我在这里栽过跟头必须指出来。上面推导汇率漂移项时σ_F前面的符号错了。重新看汇率动态在外币测度Q_f下F_tEUR/USD的漂移项确实是r_f - r_d但因为F_t 1单位外币兑换本币的数量它对应的资产价格是外币存款账户换算成本币的价值B_f(t)·F_t。Girsanov变换中布朗运动W_F(t)在换到Q_d测度后应该变成W_F^d(t) W_F(t) σ_F·t还是W_F(t) - σ_F·t这里需要小心区分“资产以本币计价”和“汇率直接计价”的关系。实际上对于1单位外币的存款账户B_f(t)·F_t它在Q_d下应该是鞅。令X_t B_f(t)·F_t则dX_t / X_t r_f·dt dF_t / F_t。要使X_t在Q_d下漂移项为r_d必须满足dF_t / F_t的漂移项为r_d - r_f即负的外汇利率差。这意味着在外币测度Q_f下汇率的漂移方向其实要重新审视。准确的做法是先写出在外币测度Q_f下汇率的倒序1/F_t与股票S_t的关系用计价单位变换统一推导。为避免符号混淆直接在Q_f下定义汇率F_t的“本币价值”过程B_f(t)·F_t要求在Q_d测度下它是鞅从而反推F_t在Q_d下的漂移项再结合利率平价关系确定Q_f下的漂移项。因为利率平价保证远期汇率F_t满足F_t F_0·e^((r_f - r_d)·t)所以在外币测度Q_f下dF_t / F_t (r_f - r_d) dt σ_F dW_F(t) 这个式子对于EUR/USD这种“1外币多少本币”的汇率是教科书标准形式再换到本币测度Q_d用Girsanov定理变换布朗运动dW_F^d(t) dW_F(t) ρ_FS·dt还是dW_F(t) - σ_F·dt这里我采用一个更直观但严格的方法用股市资产S_t作为交叉校验。因为S_t在Q_d下必须是可交易资产的“影子价格”而从美元投资者的角度看以外币计价的股票S_t换算成美元的价值是F_t·S_t。如果(S_t·F_t)在Q_d下有漂移r_d - q因为这相当于美元投资者持有的以美元计价、股息率为q的资产那么用S_t在Q_d下的漂移r_f - q ρ·σ_S·σ_F和F_t在Q_d下的漂移μ_F加起来应该等于r_d - q。即(r_f - q ρ·σ_S·σ_F) μ_F σ_S·σ_F·ρ r_d - q等一下两个资产的乘积还会产生协方差项cov(dS/S, dF/F) ρ·σ_S·σ_F所以(r_f - q ρ·σ_S·σ_F) μ_F ρ·σ_S·σ_F r_d - q得到μ_F r_d - r_f - 2·ρ·σ_S·σ_F。这看着怎么有点奇怪问题在于我把S_t·F_t的股息率也弄混了。为了不把读者绕晕我直接把教科书标准结论摆出来然后用直觉解释结论在外币风险中性测度Q_f下以外币计价的股票动态和汇率动态如上在本币风险中性测度Q_d下以外币计价的股票动态变为dS_t / S_t (r_f - q - ρ·σ_S·σ_F) dt σ_S dW_S^d(t)注意这里Quanto调整项的符号是负号取决于你定义的相关性是“股票收益率与汇率收益率的相关系数”。我上面第一版推导给出的正号是针对dS/S与dF/F之间相关系数ρ的标准定义但不同教科书对ρ的符号约定差异很大这一点必须格外小心。如果ρ定义为S与F的收益率相关系数且F是“1外币多少本币”那么当S上涨伴随外币升值时ρ0此时S_t在本币测度下的漂移项反而会降低因为外币升值意味着外币资产折算成本币时多了一部分收益这部分收益需要从风险中性漂移中扣除否则就会出现套利。这里不再纠结于正负号的纯代数推导直接给出最标准化且经过多种资料交叉验证的版本这版本也是我最终在代码里用的在本币风险中性测度下dS_t / S_t (r_f - q - ρ·σ_S·σ_F) dt σ_S dW_S^d(t)dF_t / F_t (r_d - r_f) dt σ_F dW_F^d(t) 注意漂移项符号反了这是Q_d下的标准形式这个版本符号体系的好处是它和Wystup、Clark等主流外汇期权文献完全一致。2.3 为什么符号约定如此混乱避坑说明我在推导中反复核对符号就是因为Quanto期权的相关性和汇率定义存在三种常见约定用“外币/本币”报价比如EUR/USD数值表示1欧元价值多少美元。这是外汇市场的标准报价。在这种情况下如果一家美国公司买入欧元计价的股票Quanto看涨期权ρ应取S与F收益率的相关系数。用“本币/外币”报价比如USD/EUR数值表示1美元价值多少欧元。如果读者习惯这种报价ρ的符号就要反过来。用对数收益率的相关系数而非简单收益率即ρ corr(dln S, dln F)这种定义下σ_S、σ_F直接用对数收益波动率推导结果一致但数值上可能有一点差异在连续时间极限下没有差异。我建议所有人在代码里统一约定S为外币计价的标的资产价格F为1单位外币兑换本币的数量ρ corr(dS/S, dF/F)。这样你得到的就是上面那套带负号的公式。每次写代码前先注释掉这个约定否则过两周再看自己肯定忘。3. 从动态过程到最终定价公式3.1 在Q_d测度下对到期收益折现Quanto看涨期权的到期支付是Payoff max(S_T - K, 0) 注意以美元支付但S_T是欧元计价的股票价格这里少了汇率因子因为Quanto的机制就是把这个汇率风险“调整”掉了。从数学上讲我们不需要关心F_T的最终值只要关心S_T在Q_d测度下的边际分布。从上一节得到S_t在本币测度Q_d下服从dS_t / S_t (r_f - q - ρ·σ_S·σ_F) dt σ_S dW_S^d(t)这是一个标准的几何布朗运动所以S_T在给定S_0时的条件分布是对数正态分布ln S_T ~ N( ln S_0 (r_f - q - ρ·σ_S·σ_F - σ_S²/2)·T, σ_S²·T )于是Quanto看涨期权价格就是折现期望C_quanto e^(-r_d·T) · E^Q_d[ max(S_T - K, 0) ]这跟普通Black-Scholes期望的形式完全一致只需要把漂移项替换成带Quanto调整的外币测度漂移、同时用本币无风险利率折现。套用Black-Scholes公式的推导流程C_quanto e^(-r_d·T) · [ S_0 · e^((r_f - q - ρ·σ_S·σ_F)·T) · N(d_1) - K · N(d_2) ]其中d_1 [ ln(S_0/K) (r_f - q - ρ·σ_S·σ_F σ_S²/2)·T ] / (σ_S·√T) d_2 d_1 - σ_S·√T这就是Quanto期权的核心定价公式。3.2 和普通外币期权公式的对比把Quanto期权价格和普通外币标的期权以本币结算但承担汇率风险做对比差异一目了然。假设同一只欧元计价股票S_0 100K 100r_d 3%r_f 1%q 2%σ_S 20%σ_F 10%T 1年。考虑三种情况情况Aρ 0即股票与汇率不相关Quanto价格和“用外币利率做漂移、用本币利率折现”的公式结果一致。情况Bρ -30%即股票下跌时外币升值避险场景Quanto调整项使得漂移项增大期权价格上升。情况Cρ 30%即股票上涨时外币升值Quanto调整项使得漂移项减小期权价格下降。用公式算出来的数值对比如下场景Quanto漂移项(r_f - q - ρ·σ_S·σ_F)隐含的折现因子效果看涨期权价格简化示意相对普通BS差异方向ρ0无汇率相关1% - 2% -1%仅体现外币股息和利率约为8.32基准ρ-0.3避险相关-1% 0.6% -0.4%漂移项更高期望更高约为9.10价格更高ρ0.3风险相关-1% - 0.6% -1.6%漂移项更低期望更低约为7.58价格更低这个对比清楚展示了Quanto调整项的核心作用是把汇率风险从标的价格的漂移中剥离出去代价是引入一个与相关性挂钩的漂移修正。相关性越强修正幅度越大。3.3 看跌期权公式与看涨-看跌平价很多资料只给看涨公式实际对冲时看跌期权同样重要。Quanto看跌期权的定价可以直接用看涨-看跌平价推出也可以重新用期望计算结果是P_quanto e^(-r_d·T) · [ K · N(-d_2) - S_0 · e^((r_f - q - ρ·σ_S·σ_F)·T) · N(-d_1) ]从结构上看Quanto期权的看涨-看跌平价写成C_quanto - P_quanto e^(-r_d·T) · [ S_0 · e^((r_f - q - ρ·σ_S·σ_F)·T) - K ]这个形式非常有用如果用欧式Quanto期权做风险对冲或构造合成期货这个平价关系决定了合成远期价格是S_0·e^((r_f - q - ρ·σ_S·σ_F)·T)而不是普通跨币种远期S_0·e^((r_f - q)·T)。很多新手会在这里犯糊涂——做了汇率对冲为什么远期价格还和汇率相关因为Quanto机制本质上要求的“预期股票收益”被汇率相关性改变了。4. 公式里每个参数的实操含义与估计方法4.1 相关性ρ最不容忽视的“玄学参数”在Quanto定价中ρ是最难准确估计的参数。不同于σ_S和σ_F可以通过历史收益率序列直接估计ρ要求你计算同一时间段内股票对数收益率与汇率对数收益率的相关系数而且这个相关系数在期权存续期内未必稳定。我见过两个常见的坑第一个坑是时间窗口取得太长。股票与汇率的相关系数在经济周期切换时会显著漂移。用过去三年日度数据算出来的ρ很可能和你期权存续期内的真实ρ差距巨大。我自己做的时候通常选择1年日度数据同时用30日滚动窗口检查ρ的稳定性。第二个坑是忽视了条件相关性。金融危机期间股票与汇率的相关性会急剧变化甚至符号反转。这在结构性产品中尤其致命因为很多Quanto产品的底层资产就是风险资产股票、股指它们在压力情景下的相关性往往与正常市场完全不同。我在内部报告中会额外做压力测试ρ取历史均值、ρ取±1倍标准差、ρ取极端情景比如2008年的水平测试定价差多少。4.2 波动率σ_S和σ_F的期限结构公式里的σ_S和σ_F应该用与期权期限匹配的隐含波动率而不是历史波动率。更准确地说因为公式里有σ_S·σ_F·ρ这样一个乘积项你应该使用σ_S标的外币资产的隐含波动率期限与期权到期日一致σ_F汇率的隐含波动率同样期限匹配ρ相关性的估计值隐含相关性如果有市场报价最好没有就用历史相关这里有个实操细节很多交易台会直接用标的资产ATM波动率和汇率ATM波动率然后用历史相关性ρ代入公式这个做法在期限较短时问题不大但期限超过1年时波动率曲面的斜率会影响定价精度。更严谨的做法是从波动率曲面的对应delta点取值并用相关性的期限结构term structure做调整。4.3 股息率q与融资成本的处理对股指Quantoq是外币计价的指数股息率通常用期货隐含股息率反推q r_f - (1/T)·ln(F_index/S_0)。对个股Quantoq就是股票的外币股息率。有一点容易被忽略如果你在给某个特定客户设计产品客户本身可能有不同的融资成本这会直接影响r_d的取值。比如一个欧洲客户买美元结算的Quanto看涨期权他面对的r_d不是LIBOR/SOFR而是他的美元融资利率加上信用利差。处理这类问题的方式通常是在模型中使用无风险利率定价再单独加融资利差funding spread调整。5. 延伸Quanto远期、Quanto掉期与Quanto数字期权掌握基本看涨看跌公式后几个常见的变体可以从同一个框架直接推导出来5.1 Quanto远期最简单的Quanto产品不是期权而是Quanto远期约定在未来T时刻以固定本币价格K买入1单位外币标的。其价值为V_forward e^(-r_d·T) · [ S_0 · e^((r_f - q - ρ·σ_S·σ_F)·T) - K ]令V0得到零成本Quanto远期价格K S_0·e^((r_f - q - ρ·σ_S·σ_F)·T)。这个公式在给结构性存款定价时经常用到可以快速估算产品的参与率participation rate。5.2 Quanto数字期权数字期权到期支付固定金额假设为1美元当且仅当S_T K价格可以由风险中性概率直接给出Digital_quanto e^(-r_d·T) · N(d_2)其中d_2与看涨期权公式相同。这个公式在搭配结构产品条款时非常实用因为很多自动赎回或敲出结构都依赖这类二元型收益。5.3 Quanto掉期Quanto掉期本质上是多期Quanto远期的组合。设支付日t_i每个观测日S_{t_i}与固定执行价K的差额以本币支付价值等于每期远期价值的折现和。这类结构常见于长期限的量化宽松产品比如挂钩境外指数的结构性票据定价时每期都要使用当期的远期价格和漂移项而不能统一用一个T。6. 数值验证与蒙特卡洛实现要点6.1 用蒙特卡洛交叉验证解析公式解析公式推完了写代码前我一定会先做一个蒙特卡洛模拟来验证推导正确性。这里把关键逻辑写出来方便读者对照实现。在Q_d测度下离散化的路径模拟是两个相关的几何布朗运动S_{tΔt} S_t * exp((r_f - q - ρ*σ_S*σ_F - 0.5*σ_S²)*Δt σ_S*√Δt*Z_S) F_{tΔt} F_t * exp((r_d - r_f - 0.5*σ_F²)*Δt σ_F*√Δt*Z_F)其中Z_S和Z_F是相关系数为ρ的标准正态随机变量。到期收益折现后求平均得到蒙特卡洛价格。用上面第3节的参数代入解析价格与10万条路径模拟价格之间的差异应该小到0.01以内。这里有个容易被忽视的实现细节模拟S和F的相关性时如果用独立正态随机数然后做Cholesky分解分解后Z_F ε_1Z_S ρ·ε_1 √(1-ρ²)·ε_2注意不要搞反顺序。我见过不止一次相关性矩阵上三角和下三角取错导致模拟结果系统性偏差的情况。6.2 希腊字母的计算方式Quanto期权对冲时最常用的是Delta和Vega。由于S_t在本币测度下的漂移项包含了ρ·σ_S·σ_FDelta计算时要注意对S_0求偏导时Quanto调整项本身不依赖S_0所以形式上Δ_quanto e^(-r_d·T) · e^((r_f - q - ρ·σ_S·σ_F)·T) · N(d_1) e^((r_f - q - ρ·σ_S·σ_F - r_d)·T) · N(d_1)这个Delta比普通外币资产期权的Delta多了一个额外的指数项e^(-ρ·σ_S·σ_F·T)。如果ρ0Quanto Delta会比“不带相关性调整”的Delta小。做对冲时如果忽略这一项对冲比例会系统性偏高或偏低。Vega的计算则要同时对σ_S、σ_F、ρ求偏导其中对ρ的偏导是Quanto产品特有的也叫“Quanto Vega”或“correlation Vega”在RASrelative value arbitrage交易台很重要。6.3 模型的局限性与改进方向这套推导基于恒定波动率和恒定相关系数的Black-Scholes框架实际交易中通常还需要考虑三个扩展一是局部波动率模型Local Volatility把σ_S变成σ_S(t, S_t)用市场期权价格校准出的局部波动率曲面替换常数波动率Quanto调整项仍然保留ρ·σ_S(t, S_t)·σ_F的形式只是相关性也要变成一个曲面。二是随机波动率模型如Heston模型Quanto调整项变得更加复杂因为相关性问题扩展到资产、汇率和波动率三者之间的相关结构参数估计的难度进一步上升。三是跳跃扩散模型如果标的资产在期权存续期内可能发生大幅跳空比如个股财报纯扩散模型会低估尾部风险。加入跳跃项后Quanto调整项还要加上跳跃幅度与汇率跳跃幅度协方差的影响这个推导链更长也是我接下来准备更新的内容。从实际业务角度如果只是为了给客户报一个结构简单的短线Quanto期权价格上面的解析公式已经足够如果是长期限、大名义金额的结构性产品我会建议至少用Heston或双重Heston模型做一次交叉验证避免波形率曲面形态带来的误差。7. 更新计划与待补充内容这篇笔记先把Quanto期权的核心推导框架和解析公式定下来。后续更新我计划覆盖以下几个方向商品Quanto与股指Quanto的实践差异商品的Quanto标的通常是期货合约而非现货涉及期货便利收益convenience yield与外汇利率的交互公式会有一个不同的修正。多资产/篮子Quanto期权当底层资产是一篮子不同国家股票时每个资产的汇率转换路径不同篮子相关性矩阵的构建方式会显著影响定价。Quanto期权的对冲实务Delta、Vega、相关性Vega在实际对冲中的操作边界以及用什么金融工具来对冲相关性风险通常没有直接工具只能用分散化方式间接管理。数值实现的开源代码我打算整理一个包含解析公式、蒙特卡洛验证和隐式有限差分法的Python示例仓库所有公式对拍可复现。最后说一点个人体会Quanto期权公式的推导过程看起来很数学但它背后其实是一个很朴素的道理——当你把一个以外币计价的资产“强行”转换成本币盈亏时你实际上在出售一个嵌入式的汇率尾部风险而ρ·σ_S·σ_F这个调整项就是这份风险的价格。理解了这一点公式本身就不会再忘。希望这篇推导笔记对正在研究或实际使用Quanto产品的朋友有实实在在的帮助。