量化交易中文教材

第 02 章 导数与泰勒展开

久期、Delta、beta 都是「敏感度」,敏感度就是导数。本章把这个直觉变成可计算、可推导的工具,落到一个结论上:久期和凸性就是债券价格的一阶和二阶泰勒近似。Delta–Gamma 近似、伊藤引理、牛顿法都是同一个想法的应用。

学习目标

  • 理解导数的定义和几何意义,会用数值差分验证导数;熟练使用求导法则。
  • 会用一阶、二阶条件找极值、判断凸凹,会用洛必达法则。
  • 会写常用泰勒展开并估计误差,能由此推导久期、凸性、\(\ln(1+x)\approx x\) 和波动率拖累。

1. 导数:变化率的极限

1.1 从久期说起

5 年期、年息 5% 的债券,收益率 6% 时价格 95.7876;收益率升到 6.01% 时价格 95.7467。价格变化与收益率变化之比约为 \(-0.0410/0.0001=-410\),它描述的是此刻的变化速度。把收益率变化缩得越来越小,比值稳定下来的那个数(\(-409.8\))就是导数。

1.2 定义

定义(导数):

\[ f'(x_0)=\lim_{h\to0}\frac{f(x_0+h)-f(x_0)}{h}. \]

若极限存在,称 \(f\) 在 \(x_0\) 处可导。分式叫差商,是平均变化率;导数是区间缩成一点时的瞬时变化率。也写作 \(\dfrac{dy}{dx}\),提醒你它是「\(y\) 的微小变化除以 \(x\) 的微小变化」。

例:\(f(x)=x^2\) 在 \(x_0=3\) 处。

差商 \(\dfrac{(3+h)^2-9}{h}=\dfrac{6h+h^2}{h}=6+h\)(\(h\neq0\) 时约去 \(h\)),\(h\to0\) 时趋于 6,所以 \(f'(3)=6\)。\(h=0.01\) 时差商为 6.01。

1.3 几何意义

差商是割线斜率,\(h\to0\) 时割线变成切线,所以 \(f'(x_0)\) 是切线斜率。切线方程:

\[ y=f(x_0)+f'(x_0)(x-x_0). \]

这条直线是 \(f\) 在 \(x_0\) 附近的最佳线性近似。例:\(f(x)=x^2\) 在 3 处的切线是 \(y=9+6(x-3)\)。\(x=3.1\) 时切线给出 9.6,真值 9.61,误差 0.01 \(=(0.1)^2\)。误差是 \(h^2\) 量级,比 \(h\) 小得多,这就是「最佳」的含义。

1.4 可导与连续

可导一定连续:\(f(x_0+h)-f(x_0)=\dfrac{f(x_0+h)-f(x_0)}{h}\cdot h\to f'(x_0)\cdot0=0\)。

反过来不成立:\(|x|\) 在 0 处连续,但左右差商分别为 \(-1\) 和 \(1\),有个尖角。看涨期权到期收益 \(\max(S-K,0)\) 在 \(S=K\) 处也是如此,临近到期时平值 Gamma 急剧变大,就是在逼近这个尖角。

1.5 数值求导

没有解析导数时(例如蒙特卡洛定价),用差分近似:

  • 前向差分:\(\dfrac{f(x+h)-f(x)}{h}\),误差约为 \(\dfrac{h}{2}f''(x)\)。
  • 中心差分:\(\dfrac{f(x+h)-f(x-h)}{2h}\),误差约为 \(\dfrac{h^2}{6}f'''(x)\)。

误差公式来自第 7 节的泰勒展开。\(h\) 也不能太小,否则浮点数相减会损失有效数字。

import numpy as np

# 数值求导:前向差分与中心差分的误差,f(x) = e^x 在 x = 0 处,真值 f'(0) = 1
f = np.exp
for h in [1e-1, 1e-2, 1e-4, 1e-6, 1e-8, 1e-10]:
    fwd = (f(h) - f(0)) / h
    ctr = (f(h) - f(-h)) / (2 * h)
    print(f"h={h:.0e}  forward err={abs(fwd-1):.2e}  central err={abs(ctr-1):.2e}")

输出:

h=1e-01  forward err=5.17e-02  central err=1.67e-03
h=1e-02  forward err=5.02e-03  central err=1.67e-05
h=1e-04  forward err=5.00e-05  central err=1.67e-09
h=1e-06  forward err=5.00e-07  central err=2.68e-11
h=1e-08  forward err=6.08e-09  central err=6.08e-09
h=1e-10  forward err=8.27e-08  central err=8.27e-08

误差分别约为 \(h/2\) 和 \(h^2/6\),与理论一致。\(h<10^{-6}\) 后舍入误差占上风。经验:中心差分取 \(h\approx10^{-4}\) 到 \(10^{-5}\)(按变量量级缩放)。


2. 求导法则

2.1 四条基本法则

设 \(f,g\) 可导,\(c\) 为常数:

法则 公式
线性 \((cf+g)'=cf'+g'\)
乘积 \((fg)'=f'g+fg'\)
商 \(\left(\dfrac fg\right)'=\dfrac{f'g-fg'}{g^2}\),\(g\neq0\)
链式 \([f(g(x))]'=f'(g(x))\cdot g'(x)\)

2.2 线性法则

组合的敏感度等于各部分敏感度之和,所以债券组合的美元久期可以直接相加。

例:\(f(x)=3x^2+5x\),\(f'(x)=6x+5\),\(f'(2)=17\)。

2.3 乘积法则

推导:

  • 第 1 步,差商拆开:\(\dfrac{f(x+h)g(x+h)-f(x)g(x)}{h}\)。
  • 第 2 步,分子加一项减一项 \(f(x)g(x+h)\):\(=\dfrac{f(x+h)-f(x)}{h}g(x+h)+f(x)\dfrac{g(x+h)-g(x)}{h}\)。
  • 第 3 步,取极限:第一项 \(\to f'(x)g(x)\)(用到 \(g\) 可导所以连续),第二项 \(\to f(x)g'(x)\)。

金融例子:外币资产的本币价值 \(V=S\cdot X\),\(\dfrac{dV}{dt}=\dfrac{dS}{dt}X+S\dfrac{dX}{dt}\),两边除以 \(V\) 得:本币收益率 \(\approx\) 资产收益率 \(+\) 汇率收益率。

数值例:\(f(x)=x^2e^x\),\(f'(x)=2xe^x+x^2e^x=(2x+x^2)e^x\),\(f'(1)=3e=8.155\)。

2.4 商法则

例:\(f(x)=\dfrac{x}{1+x}\)。\(f'(x)=\dfrac{1\cdot(1+x)-x\cdot1}{(1+x)^2}=\dfrac{1}{(1+x)^2}\),\(f'(1)=0.25\)。

记不住商法则时,把 \(f/g\) 写成 \(f\cdot g^{-1}\) 用乘积和链式法则推。

2.5 链式法则

结论:\(\dfrac{dy}{dx}=\dfrac{dy}{du}\cdot\dfrac{du}{dx}\),其中 \(u=g(x)\),\(y=f(u)\)。

直观:\(x\) 变一点,\(u\) 跟着变 \(g'(x)\) 倍;\(u\) 变一点,\(y\) 跟着变 \(f'(u)\) 倍。连起来,\(y\) 变 \(f'(u)g'(x)\) 倍。敏感度沿链条相乘。

金融例子:期权价值 \(V\) 依赖股价 \(S\),股价依赖指数 \(M\),期权对指数的敏感度 \(=\dfrac{dV}{dS}\cdot\dfrac{dS}{dM}\),即 Delta 乘以股价对指数的敏感度(由 beta 决定)。

例 1:零息债券 \(P(y)=100e^{-yT}\),连续复利。令 \(u=-yT\),\(P=100e^u\)。

  • \(\dfrac{dP}{du}=100e^u\),\(\dfrac{du}{dy}=-T\)。
  • \(\dfrac{dP}{dy}=100e^{-yT}\cdot(-T)=-TP\)。

所以 \(-\dfrac{1}{P}\dfrac{dP}{dy}=T\):连续复利下零息债券的久期正好是期限。\(T=5\),\(y=4\%\):\(P=81.873\),\(dP/dy=-409.37\)。

例 2:\(f(x)=\ln(1+x^2)\)。外层 \(\ln u\) 导数 \(1/u\),内层 \(1+x^2\) 导数 \(2x\)。\(f'(x)=\dfrac{2x}{1+x^2}\),\(f'(1)=1\)。

神经网络是一长串复合函数,反向传播(第 10 册第 11 章)就是沿链条把局部导数乘起来。


3. 常用导数表

\(f(x)\) \(f'(x)\) 备注
\(x^n\) \(nx^{n-1}\) \(n\) 为任意实数
\(e^x\) \(e^x\) 唯一导数等于自身的指数函数
\(a^x\) \(a^x\ln a\) 由 \(a^x=e^{x\ln a}\) 和链式法则
\(\ln x\) \(1/x\) \(x>0\)
\(\Phi(x)\) \(\varphi(x)=\dfrac{1}{\sqrt{2\pi}}e^{-x^2/2}\) 正态分布函数的导数是密度
\(\ln f(x)\) \(f'(x)/f(x)\) 「对数导数」,即相对变化率

两个推导:

\((e^x)'=e^x\)。\(\dfrac{e^{x+h}-e^x}{h}=e^x\cdot\dfrac{e^h-1}{h}\to e^x\cdot1\)。用到第 01 章的重要极限。

\((\ln x)'=1/x\)。设 \(y=\ln x\),则 \(x=e^y\)。两边对 \(x\) 求导:\(1=e^y\cdot y'\)(链式法则),所以 \(y'=1/e^y=1/x\)。

对数导数 \(\dfrac{d}{dt}\ln P(t)=\dfrac{P'(t)}{P(t)}\) 是瞬时收益率;久期 \(-\dfrac{1}{P}\dfrac{dP}{dy}=-\dfrac{d\ln P}{dy}\) 也是相对变化率。


4. 高阶导数

对导数再求导得二阶导数 \(f''(x)=\dfrac{d^2f}{dx^2}\),依此类推有 \(f^{(n)}\)。一阶导数是变化速度,二阶导数是速度的变化速度,描述弯曲程度。期权的 Gamma \(=\dfrac{\partial^2V}{\partial S^2}\) 就是二阶导数:Gamma 大,Delta 变化快,对冲要频繁调整。

例:\(f(x)=x^3\),\(f'=3x^2\),\(f''=6x\),\(f'''=6\),\(f^{(4)}=0\)。\(e^x\) 的各阶导数都是 \(e^x\)。\(\ln(1+x)\):\(f'=(1+x)^{-1}\),\(f''=-(1+x)^{-2}\),\(f'''=2(1+x)^{-3}\),在 0 处分别为 \(1,-1,2\)。


5. 极值与凸性

5.1 一阶条件

定理(费马):若 \(f\) 在内点 \(x^*\) 取得局部极值且可导,则 \(f'(x^*)=0\)。

直观:在山顶,切线是水平的。如果切线斜率为正,往右走还能更高,就不是山顶。

注意:\(f'(x^*)=0\) 只是必要条件(\(x^3\) 在 0 处导数为 0 却不是极值);定理只管内点,权重约束 \(w\in[0,1]\) 的边界上最优解的导数可以不为零;不可导点(如 \(|x|\) 在 0 处)也可能是极值点。

5.2 二阶条件

若 \(f'(x^*)=0\),并且

  • \(f''(x^*)>0\):局部极小(底部向上弯);
  • \(f''(x^*)<0\):局部极大;
  • \(f''(x^*)=0\):无法判断,需要更多信息。

5.3 例:均值–方差最优仓位

投资者把比例 \(w\) 投入风险资产(超额收益期望 \(\mu\)、波动率 \(\sigma\)),其余放无风险资产。均值–方差效用:

\[ U(w)=w\mu-\frac{\gamma}{2}w^2\sigma^2, \]

\(\gamma\) 为风险厌恶系数。

  • 第 1 步,一阶条件:\(U'(w)=\mu-\gamma w\sigma^2=0\),解得 \(w^*=\dfrac{\mu}{\gamma\sigma^2}\)。
  • 第 2 步,二阶条件:\(U''(w)=-\gamma\sigma^2<0\),所以是极大。

数值:\(\mu=6\%\),\(\sigma=20\%\),\(\gamma=3\)。\(w^*=0.06/(3\times0.04)=0.5\),最大效用 \(U=0.03-0.015=0.015\)。

最优仓位与预期超额收益成正比、与方差成反比,是多资产 \(w^*=\frac1\gamma\Sigma^{-1}\mu\)(第 05、06 章)的一维版本。

5.4 凸函数

定义(凸函数):若对区间内任意 \(x_1,x_2\) 和 \(\lambda\in[0,1]\),

\[ f(\lambda x_1+(1-\lambda)x_2)\le\lambda f(x_1)+(1-\lambda)f(x_2), \]

称 \(f\) 为凸函数。白话:连接图像上任意两点的弦,都在图像上方。不等号反向是凹函数。

判别法:二阶可导时,\(f''(x)\ge0\) 处处成立 \(\iff\) \(f\) 是凸函数。

例:\(e^x\)(\(f''=e^x>0\))凸;\(\ln x\)(\(f''=-1/x^2<0\))凹;\(x^2\) 凸。债券价格 \(P(y)\) 对 \(y\) 凸(第 8 节的 \(P''>0\))。

数值:\(\ln2=0.693>\frac12(\ln1+\ln3)=0.549\),函数值在弦上方,符合凹函数。

凸性的重要意义:凸函数的局部极小就是全局极小。所以凸优化问题(如均值–方差优化)只要找到一阶条件的解就是最优解,不必担心陷入局部最优。第 04 册整册都在利用这一点。

凸性还带来 Jensen 不等式 \(\mathbb E[f(X)]\ge f(\mathbb E[X])\)(第 07 章)。


6. 洛必达法则

定理(洛必达):若 \(x\to a\) 时 \(f(x)\to0\)、\(g(x)\to0\)(或都趋于 \(\pm\infty\)),且 \(\lim\dfrac{f'(x)}{g'(x)}\) 存在,则

\[ \lim_{x\to a}\frac{f(x)}{g(x)}=\lim_{x\to a}\frac{f'(x)}{g'(x)}. \]

直观:两个都趋于 0 的量,比值由它们「趋于 0 的速度」决定,而速度就是导数。

例 1:\(\lim_{x\to0}\dfrac{e^x-1-x}{x^2}\)(第 01 章遗留的问题)。

\(0/0\) 型,求导得 \(\dfrac{e^x-1}{2x}\),仍是 \(0/0\) 型,再求导得 \(\dfrac{e^x}{2}\to\dfrac12\)。

例 2:\(\lim_{x\to\infty}\dfrac{x^2}{e^x}\)。\(\infty/\infty\) 型,求导两次得 \(\dfrac{2}{e^x}\to0\)。这就是第 01 章「指数快于幂」的证明。

例 3:\(\lim_{r\to0}\dfrac{1-e^{-rT}}{r}\),\(0/0\) 型,求导得 \(Te^{-rT}\to T\):零利率下连续年金的现值因子就是期限 \(T\)。

常见错误:不是 \(0/0\) 或 \(\infty/\infty\) 时不能用。\(\lim_{x\to0}\dfrac{x+1}{x+2}=\dfrac12\),若硬用洛必达会得 \(1\),错误。用之前一定先检查类型。


7. 泰勒展开

7.1 思路

切线是一次多项式近似。想把弯曲也近似进去,就加二次项、三次项。目标是:找一个多项式,在 \(a\) 点的函数值、一阶导、二阶导……都和 \(f\) 相同。

设 \(p(x)=c_0+c_1(x-a)+c_2(x-a)^2+\cdots+c_n(x-a)^n\)。逐次求导再代入 \(x=a\):\(p(a)=c_0\),\(p'(a)=c_1\),\(p''(a)=2c_2\),\(p'''(a)=3!\,c_3\),……,\(p^{(k)}(a)=k!\,c_k\)。要求 \(p^{(k)}(a)=f^{(k)}(a)\),得 \(c_k=\dfrac{f^{(k)}(a)}{k!}\)。

7.2 公式

泰勒公式:

\[ f(x)=f(a)+f'(a)(x-a)+\frac{f''(a)}{2!}(x-a)^2+\cdots+\frac{f^{(n)}(a)}{n!}(x-a)^n+R_n(x). \]

余项 \(R_n\) 有两种常用写法:

  • 拉格朗日余项:\(R_n(x)=\dfrac{f^{(n+1)}(\xi)}{(n+1)!}(x-a)^{n+1}\),\(\xi\) 是 \(a\) 与 \(x\) 之间的某个点。可以用来给误差定上界。
  • 佩亚诺余项:\(R_n(x)=o\big((x-a)^n\big)\),表示余项比 \((x-a)^n\) 更快趋于 0。只说明误差的阶,不给具体大小。

\(a=0\) 时也叫麦克劳林展开。最常用的形式是把 \(x-a\) 写成 \(h\):

\[ f(a+h)=f(a)+f'(a)h+\frac12f''(a)h^2+o(h^2). \]

这一行是本章最重要的公式。读法:函数的变化量 \(\approx\) 一阶导 \(\times\) 变化 \(+\ \frac12\times\) 二阶导 \(\times\) 变化的平方。

7.3 常用展开(在 0 处)

函数 展开 收敛范围
\(e^x\) \(1+x+\dfrac{x^2}{2}+\dfrac{x^3}{6}+\cdots\) 所有 \(x\)
\(\ln(1+x)\) \(x-\dfrac{x^2}{2}+\dfrac{x^3}{3}-\cdots\) \(-1<x\le1\)
\((1+x)^\alpha\) \(1+\alpha x+\dfrac{\alpha(\alpha-1)}{2}x^2+\cdots\) \(\lvert x\rvert<1\)

推导 \(\ln(1+x)\):第 4 节已算出在 0 处 \(f=0\),\(f'=1\),\(f''=-1\),\(f'''=2\)。代入公式:\(0+x-\dfrac{1}{2}x^2+\dfrac{2}{6}x^3=x-\dfrac{x^2}{2}+\dfrac{x^3}{3}\)。

数值例:\(\sqrt{1.1}=(1+0.1)^{1/2}\approx1+0.05-\dfrac{1}{8}(0.01)=1.04875\)。真值 \(1.048809\),误差 \(6\times10^{-5}\)。收敛范围的来历见第 04 章。

7.4 误差有多大

import numpy as np
from math import factorial

# e^x 在 0 处的泰勒多项式,x = 0.5 与 x = 2,看阶数增加后误差怎样缩小
for x in [0.5, 2.0]:
    for n in [1, 2, 4, 8]:
        Tn = sum(x**k / factorial(k) for k in range(n + 1))
        bound = np.exp(max(x, 0)) * abs(x) ** (n + 1) / factorial(n + 1)  # 拉格朗日余项上界
        print(f"x={x} n={n}  T_n={Tn:.8f}  err={np.exp(x)-Tn:.2e}  bound={bound:.2e}")

输出:

x=0.5 n=1  T_n=1.50000000  err=1.49e-01  bound=2.06e-01
x=0.5 n=2  T_n=1.62500000  err=2.37e-02  bound=3.43e-02
x=0.5 n=4  T_n=1.64843750  err=2.84e-04  bound=4.29e-04
x=0.5 n=8  T_n=1.64872127  err=5.66e-09  bound=8.87e-09
x=2.0 n=1  T_n=3.00000000  err=4.39e+00  bound=1.48e+01
x=2.0 n=2  T_n=5.00000000  err=2.39e+00  bound=9.85e+00
x=2.0 n=4  T_n=7.00000000  err=3.89e-01  bound=1.97e+00
x=2.0 n=8  T_n=7.38730159  err=1.75e-03  bound=1.04e-02

上界的算法:\(e^x\) 的 \(n+1\) 阶导数是 \(e^\xi\),\(\xi\in(0,x)\),所以 \(e^\xi\le e^x\),误差 \(\le e^x\dfrac{x^{n+1}}{(n+1)!}\)。实际误差始终在上界之内。

结论:离展开点越近越准(二阶误差在 \(x=0.5\) 时 0.024,\(x=2\) 时 2.39);阶数越高越准,因为 \((n+1)!\) 最终压过 \(x^{n+1}\)。金融里的小量(日收益、\(\Delta y\))在 0.01 量级,二阶泰勒非常准;大冲击时应全额重估(full revaluation)。


8. 久期与凸性就是一阶、二阶泰勒近似

8.1 推导

债券价格是收益率的函数 \(P(y)\)。收益率从 \(y_0\) 变到 \(y_0+\Delta y\),按 7.2 节的公式展开:

\[ P(y_0+\Delta y)\approx P(y_0)+P'(y_0)\Delta y+\frac12P''(y_0)(\Delta y)^2. \]

两边减去 \(P(y_0)\),再除以 \(P(y_0)\):

\[ \frac{\Delta P}{P}\approx\underbrace{\frac{P'(y_0)}{P(y_0)}}_{=-D_{\text{mod}}}\Delta y+\frac12\underbrace{\frac{P''(y_0)}{P(y_0)}}_{=C}(\Delta y)^2. \]

所以:

\[ \boxed{\ \frac{\Delta P}{P}\approx-D_{\text{mod}}\,\Delta y+\frac12C\,(\Delta y)^2\ } \]

这就是 CFA 里的久期–凸性公式:修正久期 \(D_{\text{mod}}=-\dfrac{1}{P}\dfrac{dP}{dy}\) 是一阶导数除以价格(取负号使其为正),凸性 \(C=\dfrac{1}{P}\dfrac{d^2P}{dy^2}\) 是二阶导数除以价格,\(\frac12\) 就是泰勒展开的 \(\frac{1}{2!}\)。被忽略的项量级是 \((\Delta y)^3\)。

8.2 显式计算

年付息债券 \(P(y)=\sum_{t=1}^{T}\dfrac{CF_t}{(1+y)^t}\)。逐项求导(线性法则 + 幂函数求导,\(\frac{d}{dy}(1+y)^{-t}=-t(1+y)^{-t-1}\)):

\[ P'(y)=-\sum_{t}\frac{t\cdot CF_t}{(1+y)^{t+1}}=-\frac{1}{1+y}\sum_t\frac{t\cdot CF_t}{(1+y)^t}. \]

除以 \(-P\):

\[ D_{\text{mod}}=\frac{1}{1+y}\cdot\underbrace{\frac{1}{P}\sum_t t\cdot\frac{CF_t}{(1+y)^t}}_{D_{\text{mac}}}. \]

\(D_{\text{mac}}\) 是麦考利久期:以现值占比为权重的现金流平均时间。这就推出了 CFA 的关系 \(D_{\text{mod}}=D_{\text{mac}}/(1+y)\)。

再求一次导:

\[ P''(y)=\sum_t\frac{t(t+1)CF_t}{(1+y)^{t+2}}>0,\qquad C=\frac{1}{P}\sum_t\frac{t(t+1)CF_t}{(1+y)^{t+2}}. \]

每一项都是正的,所以普通债券 \(P''>0\),价格是收益率的凸函数,这就是「正凸性」。

8.3 数值验证

import numpy as np

# 5 年期、票面 100、年息 5%、每年付息一次的债券,到期收益率 y = 6%
c, F, T = 5.0, 100.0, 5
t = np.arange(1, T + 1)
cf = np.full(T, c); cf[-1] += F

def price(y):
    return np.sum(cf / (1 + y) ** t)

y0 = 0.06
P0 = price(y0)
# 解析导数
dP = np.sum(-t * cf / (1 + y0) ** (t + 1))
d2P = np.sum(t * (t + 1) * cf / (1 + y0) ** (t + 2))
# 中心差分
h = 1e-4
dP_num = (price(y0 + h) - price(y0 - h)) / (2 * h)
d2P_num = (price(y0 + h) - 2 * P0 + price(y0 - h)) / h**2
D_mod = -dP / P0
C = d2P / P0
D_mac = np.sum(t * cf / (1 + y0) ** t) / P0
print(f"P0={P0:.4f}")
print(f"dP/dy  analytic={dP:.4f}  numeric={dP_num:.4f}")
print(f"d2P/dy2 analytic={d2P:.4f}  numeric={d2P_num:.4f}")
print(f"Macaulay D={D_mac:.4f}  modified D={D_mod:.4f}  D_mac/(1+y)={D_mac/(1+y0):.4f}  convexity={C:.4f}")

for dy in [0.001, 0.01, 0.02, -0.02]:
    exact = price(y0 + dy) - P0
    lin = -D_mod * P0 * dy
    quad = lin + 0.5 * C * P0 * dy**2
    print(f"dy={dy:+.3f} exact={exact:+.4f}  1st-order={lin:+.4f} (err {exact-lin:+.4f})"
          f"  2nd-order={quad:+.4f} (err {exact-quad:+.4f})")

输出:

P0=95.7876
dP/dy  analytic=-409.7770  numeric=-409.7771
d2P/dy2 analytic=2242.4205  numeric=2242.4205
Macaulay D=4.5347  modified D=4.2780  D_mac/(1+y)=4.2780  convexity=23.4103
dy=+0.001 exact=-0.4087  1st-order=-0.4098 (err +0.0011)  2nd-order=-0.4087 (err -0.0000)
dy=+0.010 exact=-3.9880  1st-order=-4.0978 (err +0.1097)  2nd-order=-3.9856 (err -0.0024)
dy=+0.020 exact=-7.7658  1st-order=-8.1955 (err +0.4298)  2nd-order=-7.7471 (err -0.0187)
dy=-0.020 exact=+8.6642  1st-order=+8.1955 (err +0.4686)  2nd-order=+8.6440 (err +0.0202)

读结果:

  • 解析导数与中心差分一致,8.2 节公式正确。中心差分除以 \(P\) 就是有效久期、有效凸性。
  • 升 100bp:久期估计跌 4.098,实际跌 3.988;加上凸性项 \(+\frac12\times23.41\times0.0001\times95.79=+0.112\) 后误差只剩 0.002。
  • 真实价格曲线是凸的,在切线上方,所以一阶近似的误差总是正的:上升时高估跌幅,下降时低估涨幅。这就是「凸性对多头有利」。
  • 二阶误差与 \((\Delta y)^3\) 同阶:\(\Delta y\) 从 1% 到 2%,误差约放大 \(2^3=8\) 倍。

口径提醒:有的终端把凸性除以 100 报价(本例显示 0.234),用别人的数字前先确认口径。

8.4 同一个想法的其他化身

把「价格对某个变量做二阶泰勒展开」套到别处:

场景 变量 一阶项 二阶项
债券 收益率 \(y\) 久期 凸性
期权 标的价格 \(S\) Delta Gamma
优化 参数 \(x\) 梯度下降 牛顿法

期权的 Delta–Gamma 近似 \(\Delta V\approx\Delta\cdot\Delta S+\frac12\Gamma(\Delta S)^2\) 与久期–凸性公式在结构上完全一样(第 08 册第 19b 章)。伊藤引理(第 08 册第 14 章)也是二阶泰勒展开,区别在于随机项的平方 \((dW)^2\) 的量级与 \(dt\) 相同,二阶项不能扔,于是多出 \(\frac12f''\sigma^2dt\)。


9. 对数收益与 \(\ln(1+x)\approx x\)

9.1 为什么约等于

由 \(\ln(1+x)=x-\dfrac{x^2}{2}+\dfrac{x^3}{3}-\cdots\):

  • 一阶近似:\(\ln(1+x)\approx x\),误差约 \(x^2/2\)。
  • 二阶近似:\(\ln(1+x)\approx x-\dfrac{x^2}{2}\),误差约 \(x^3/3\)。

令 \(x=R\) 为简单收益,\(r=\ln(1+R)\) 为对数收益,则 \(r\approx R-\dfrac{R^2}{2}\),对数收益总是略小于简单收益(\(R\neq0\) 时)。

import numpy as np

# ln(1+x) ≈ x 的误差,以及加上二阶项 x - x^2/2 后的误差
for x in [0.01, 0.10, 0.20, -0.20]:
    exact = np.log1p(x)
    print(f"x={x:+.3f} ln(1+x)={exact:+.6f}  x-ln(1+x)={x-exact:.2e}"
          f"  x^2/2={x*x/2:.2e}  (x-x^2/2)-ln(1+x)={x - x*x/2 - exact:+.2e}")

# 简单收益与对数收益:多期累加
r = np.array([0.10, -0.10, 0.05, -0.05])
print("simple returns sum:", round(r.sum(), 6), " compound:", round(np.prod(1 + r) - 1, 6))
lr = np.log1p(r)
print("log returns sum:", round(lr.sum(), 6), " exp(sum)-1:", round(np.expm1(lr.sum()), 6))

输出:

x=+0.010 ln(1+x)=+0.009950  x-ln(1+x)=4.97e-05  x^2/2=5.00e-05  (x-x^2/2)-ln(1+x)=-3.31e-07
x=+0.100 ln(1+x)=+0.095310  x-ln(1+x)=4.69e-03  x^2/2=5.00e-03  (x-x^2/2)-ln(1+x)=-3.10e-04
x=+0.200 ln(1+x)=+0.182322  x-ln(1+x)=1.77e-02  x^2/2=2.00e-02  (x-x^2/2)-ln(1+x)=-2.32e-03
x=-0.200 ln(1+x)=-0.223144  x-ln(1+x)=2.31e-02  x^2/2=2.00e-02  (x-x^2/2)-ln(1+x)=+3.14e-03
simple returns sum: 0.0  compound: -0.012475
log returns sum: -0.012553  exp(sum)-1: -0.012475

日收益 1% 时两种收益只差 0.5bp,可以互换;10% 时差 0.47%,不能忽略;\(\pm20\%\) 时还不对称(\(-22.3\%\) 对 \(+18.2\%\))。二阶近似把误差降低一个数量级,约为 \(x^3/3\)。

后两行:简单收益 \(+10\%,-10\%,+5\%,-5\%\) 加起来是 0,但实际复合收益是 \(-1.25\%\)。对数收益加起来是 \(-0.01255\),取 \(e^{(\cdot)}-1\) 正好还原 \(-1.25\%\)。多期复合用对数收益相加,横截面组合用简单收益加权,这是收益计算的基本规则。

9.2 波动率拖累:\(\mathbb E[\ln(1+R)]\approx\mu-\sigma^2/2\)

设简单收益 \(R\) 很小,均值 \(\mu\)、方差 \(\sigma^2\)。二阶展开再取期望:

  • 第 1 步,展开:\(\ln(1+R)\approx R-\dfrac{R^2}{2}\)。
  • 第 2 步,取期望(期望的线性性):\(\mathbb E[\ln(1+R)]\approx\mu-\dfrac12\mathbb E[R^2]\)。
  • 第 3 步,用 \(\mathbb E[R^2]=\sigma^2+\mu^2\):\(\approx\mu-\dfrac{\sigma^2}{2}-\dfrac{\mu^2}{2}\)。
  • 第 4 步,\(\mu^2\) 比 \(\sigma^2\) 小得多(如 0.0064 对 0.04),略去:\(\approx\mu-\dfrac{\sigma^2}{2}\)。

数值:年化 \(\mu=8\%\),\(\sigma=20\%\),几何平均增长率约为 \(8\%-2\%=6\%\)。波动越大,长期复合增长越被「拖累」。这解释了 CFA 中「几何平均 \(\le\) 算术平均」,也解释了 BSM 模型里 \(\ln S_T\) 的漂移是 \(r-\sigma^2/2\) 而不是 \(r\)(第 08 册第 15a 章)。


本章小结

概念 公式 说明
导数 \(f'(x)=\lim_{h\to0}\dfrac{f(x+h)-f(x)}{h}\) 瞬时变化率,切线斜率
中心差分 \(\dfrac{f(x+h)-f(x-h)}{2h}\) 误差 \(O(h^2)\),有效久期的算法
求导法则 \((fg)'=f'g+fg'\);\(\dfrac{dy}{dx}=\dfrac{dy}{du}\dfrac{du}{dx}\) 链式:敏感度沿链条相乘
极值 一阶 \(f'=0\);二阶 \(f''>0\) 极小,\(f''<0\) 极大
凸函数 \(f''\ge0\);局部极小即全局极小
洛必达 \(0/0\)、\(\infty/\infty\) 型:\(\lim f/g=\lim f'/g'\) 先检查类型
泰勒公式 \(f(a+h)=f(a)+f'(a)h+\frac12f''(a)h^2+o(h^2)\) 本章核心
拉格朗日余项 \(R_n=\dfrac{f^{(n+1)}(\xi)}{(n+1)!}h^{n+1}\) 误差上界
久期凸性 \(\dfrac{\Delta P}{P}\approx-D_{\text{mod}}\Delta y+\frac12C(\Delta y)^2\) 二阶泰勒
久期与凸性 \(D_{\text{mod}}=-P'/P=D_{\text{mac}}/(1+y)\),\(C=P''/P\)
对数收益 \(\ln(1+R)\approx R-R^2/2\)
波动率拖累 \(\mathbb E[\ln(1+R)]\approx\mu-\sigma^2/2\)

练习

1. 用导数定义求 \(f(x)=1/x\) 在 \(x=2\) 处的导数,并用 \(h=0.01\) 的差商核对。

答:\(\dfrac{1/(2+h)-1/2}{h}=\dfrac{-h}{2(2+h)h}=\dfrac{-1}{2(2+h)}\to-\dfrac14\)。\(h=0.01\):\(\dfrac{-1}{4.02}=-0.24876\)。

2. 求 \(f(x)=x^3e^{-2x}\) 的导数,并计算 \(f'(1)\)。

答:乘积 + 链式:\(f'=3x^2e^{-2x}-2x^3e^{-2x}=x^2(3-2x)e^{-2x}\)。\(f'(1)=e^{-2}=0.1353\)。

3. 永续年金每年支付 \(c\),价格 \(P(y)=c/y\)。求修正久期和凸性;\(y=5\%\) 时它们分别是多少?

答:\(P'=-c/y^2\),\(D_{\text{mod}}=1/y=20\)。\(P''=2c/y^3\),\(C=2/y^2=800\)。

4. 用第 3 题结果,估计 \(y\) 从 5% 升到 6% 时永续年金价格的变化百分比,并与精确值比较。

答:\(-20\times0.01+\frac12\times800\times0.0001=-0.20+0.04=-16\%\)。精确:\((1/0.06)/(1/0.05)-1=-16.67\%\)。仅用久期估计为 \(-20\%\)。二阶近似好得多,但 \(\Delta y\) 相对 \(y\) 不小,仍有误差。

5. 求 \(U(w)=0.08w-2w^2\times0.0625\) 的最大值点,并说明是极大。

答:这是 \(\mu=0.08\),\(\gamma=4\),\(\sigma=0.25\) 的情形。\(U'=0.08-0.25w=0\),\(w^*=0.32\)。\(U''=-0.25<0\),是极大。

6. 判断 \(f(x)=x\ln x\)(\(x>0\))的凸凹性,并求最小值。

答:\(f'=\ln x+1\),\(f''=1/x>0\),凸。\(f'=0\) 得 \(x=e^{-1}=0.3679\),最小值 \(-e^{-1}=-0.3679\)。凸函数的局部极小就是全局极小。

7. 用洛必达求 \(\lim_{x\to0}\dfrac{1-\cos x}{x^2}\),再用泰勒展开验证。

答:两次洛必达:\(\dfrac{\sin x}{2x}\to\dfrac{\cos x}{2}\to\dfrac12\)。泰勒:\(1-\cos x=\frac{x^2}{2}-\cdots\),除以 \(x^2\) 得 \(\frac12\)。

8. 写出 \((1+x)^{-1/2}\) 在 0 处的二阶泰勒展开,并估计 \(1/\sqrt{1.04}\)。

答:\(\alpha=-\frac12\):\(1-\frac12x+\frac{(-1/2)(-3/2)}{2}x^2=1-\frac x2+\frac38x^2\)。\(x=0.04\):\(1-0.02+0.0006=0.9806\)。真值 \(0.980581\)。

9. 年化简单收益均值 10%、波动率 30%,用二阶近似估计对数收益的期望;若波动率降到 15%,期望变为多少?

答:\(0.10-0.09/2=5.5\%\);\(0.10-0.0225/2=8.875\%\)。均值相同,低波动的长期复合增长更高。

10. 零息债券(年复利)\(P=100/(1+y)^{10}\),\(y=4\%\)。求修正久期,并用 \(h=10^{-4}\) 的中心差分算有效久期核对。

答:\(P'=-1000(1+y)^{-11}\),\(D_{\text{mod}}=10/1.04=9.6154\)。数值:\(P(0.0401)=67.4915\),\(P(0.0399)=67.6214\),\(P(0.04)=67.5564\),有效久期 \(=(67.6214-67.4915)/(2\times0.0001\times67.5564)=9.6154\)。


在全书中用到的地方

  • 第 08 册第 04 章「利率」、第 06 章「利率期货」:久期、凸性与套期保值。
  • 第 08 册第 14 章「维纳过程与伊藤引理」:保留 \((dW)^2\) 项的二阶泰勒展开。
  • 第 08 册第 15a 章「BSM 模型的基础与偏微分方程」:漂移 \(r-\sigma^2/2\)。
  • 第 08 册第 19b 章「Gamma、Vega 与希腊字母风险管理」:Delta–Gamma 近似。
  • 第 06 册第 01 章「金融收益率及其统计特征」:简单收益与对数收益。
  • 第 04 册第 02 章「无约束优化基础」、第 07 章「导数计算」:最优性条件、有限差分。
  • 第 10 册第 11 章「反向传播」:链式法则。
  • 第 03 册第 09 章「参数推断」:Delta 方法。