σμimplied vol · KKmax(S−K,0)udβρᵢⱼfat tailsPnL · drawdownyield · TdSₜ = μSₜ dt + σSₜ dWₜC = S·N(d₁) − K·e⁻ʳᵀ·N(d₂)σₚ² = wᵀΣwd₁ = [ln(S/K) + (r + σ²⁄2)T] ⁄ σ√T∂V/∂t + ½σ²S²·∂²V/∂S² + rS·∂V/∂S − rV = 0Sharpe = (Rₚ − R_f) ⁄ σₚVaR₉₉ = μ − 2.33σρ = Cov(X,Y) ⁄ σₓσᵧE[Rₚ] = Σ wᵢ·E[Rᵢ]φ(x) = e^(−x²/2) ⁄ √2πE[Rᵢ] = R_f + βᵢ(E[Rₘ] − R_f)dXₜ = θ(μ − Xₜ)dt + σ dWₜσ²ₜ = ω + α·ε²ₜ₋₁ + β·σ²ₜ₋₁C − P = S − K·e⁻ʳᵀΔ = ∂V/∂S Γ = ∂²V/∂S²p = (e^(rΔt) − d) ⁄ (u − d)rₜ = ln(Pₜ ⁄ Pₜ₋₁)E[Xₜ₊₁ | ℱₜ] = Xₜf* = (bp − q) ⁄ bz = (x − μ) ⁄ σP(N=k) = λᵏe^(−λ) ⁄ k!Θ = −∂V/∂Tν = S·φ(d₁)·√Tmin wᵀΣw s.t. wᵀμ = μ*∫Σ∂∞λ
uantCraft Academy路线图学习路线
Ctrl K
AO
+1.2k 位学习者
登录加入 ↗
路线图学习路线
AO
+1.2k 位学习者
登录
  • English
  • Français
  • Español
  • العربية
  • Português
  • Deutsch
  • 日本語
  • 中文
σμimplied vol · KKmax(S−K,0)udβρᵢⱼfat tailsPnL · drawdownyield · TdSₜ = μSₜ dt + σSₜ dWₜC = S·N(d₁) − K·e⁻ʳᵀ·N(d₂)σₚ² = wᵀΣwd₁ = [ln(S/K) + (r + σ²⁄2)T] ⁄ σ√T∂V/∂t + ½σ²S²·∂²V/∂S² + rS·∂V/∂S − rV = 0Sharpe = (Rₚ − R_f) ⁄ σₚVaR₉₉ = μ − 2.33σρ = Cov(X,Y) ⁄ σₓσᵧE[Rₚ] = Σ wᵢ·E[Rᵢ]φ(x) = e^(−x²/2) ⁄ √2πE[Rᵢ] = R_f + βᵢ(E[Rₘ] − R_f)dXₜ = θ(μ − Xₜ)dt + σ dWₜσ²ₜ = ω + α·ε²ₜ₋₁ + β·σ²ₜ₋₁C − P = S − K·e⁻ʳᵀΔ = ∂V/∂S Γ = ∂²V/∂S²p = (e^(rΔt) − d) ⁄ (u − d)rₜ = ln(Pₜ ⁄ Pₜ₋₁)E[Xₜ₊₁ | ℱₜ] = Xₜf* = (bp − q) ⁄ bz = (x − μ) ⁄ σP(N=k) = λᵏe^(−λ) ⁄ k!Θ = −∂V/∂Tν = S·φ(d₁)·√Tmin wᵀΣw s.t. wᵀμ = μ*∫Σ∂∞λ
uantCraft Academy路线图学习路线
Ctrl K
AO
+1.2k 位学习者
登录加入 ↗
路线图学习路线
AO
+1.2k 位学习者
登录
  • English
  • Français
  • Español
  • العربية
  • Português
  • Deutsch
  • 日本語
  • 中文
SciPy 学习路线›模块 1 · 拟合与求解›主题 1.4·~50分钟中级

最小化与求根

路线进度模块 1/3 · 主题 4/6
1.4 最小化与求根
—实验得分— / 100总 XP—连续天数—

两件事:找最低点,找曲线穿过零的位置

scipy.optimize 解决两类问题。第一类是最小化函数 f(x)f(x)f(x),即找输出最小的输入。调用 minimize(f, x0),其中 x0 是你的初始猜测。BFGS 沿着 fff 的斜率下坡。Nelder-Mead 不需要斜率,只比较函数值。SLSQP 还支持边界和约束,例如和必须为 1 的权重。结果只是局部最小值,也就是你出发的那个山谷的谷底,换一个 x0 可能得到不同的答案。一定要检查 res.success。

第二类问题是求根:解 g(x)=0g(x)=0g(x)=0。brentq(g, a, b) 需要一个括区间,即两端 ggg 的符号相反,这样它反复二分区间就一定能找到根。二分 nnn 次后区间宽度为 (b−a)/2n(b-a)/2^n(b−a)/2n。newton(g, x0, fprime) 使用 ggg 的斜率,快得多,但需要好的起点,斜率接近水平时可能跳得很远。在金融中,债券的到期收益率就是一个根:它是使债券价格公式等于市场价格的利率 yyy。牛顿一步是 y新=y−g(y)/g′(y)y_{\text{新}}=y-g(y)/g'(y)y新​=y−g(y)/g′(y)。

ynew=y−g(y)g′(y),g(y)=51+y+105(1+y)2−98,width after n halvings=b−a2ny_{\text{new}}=y-\frac{g(y)}{g'(y)},\qquad g(y)=\frac{5}{1+y}+\frac{105}{(1+y)^{2}}-98,\qquad \text{width after }n\text{ halvings}=\frac{b-a}{2^{n}}ynew​=y−g′(y)g(y)​,g(y)=1+y5​+(1+y)2105​−98,width after n halvings=2nb−a​(1)
两年期债券的收益率一张债券一年后付 555,两年后付 105105105,价格为 989898。从 y=6%y=6\%y=6% 出发。价格公式给出 98.1798.1798.17,所以 g=0.17g=0.17g=0.17。斜率 g′=−5/1.062−210/1.063=−180.8g'=-5/1.06^{2}-210/1.06^{3}=-180.8g′=−5/1.062−210/1.063=−180.8。牛顿一步得到 y=0.06−0.17/(−180.8)=6.092%y=0.06-0.17/(-180.8)=6.092\%y=0.06−0.17/(−180.8)=6.092%,在括区间 [0,0.5][0,0.5][0,0.5] 上用 brentq 确认根为 6.0923%6.0923\%6.0923%。要让 [0,1][0,1][0,1] 上的二分法精度达到 0.0010.0010.001,需要 2n≥10002^{n}\ge10002n≥1000,即 n=10n=10n=10 次二分。再看最小化:两个资产波动率为 202020 和 101010、相关系数 0.20.20.2,协方差为 404040,所以第一个资产的最小方差权重为 (100−40)/(400+100−80)=0.143(100-40)/(400+100-80)=0.143(100−40)/(400+100−80)=0.143。在真实数据上,SPY 和 TLT 自 2005 年 2 月起 5,4045{,}4045,404 天的年化波动率为 19.0%19.0\%19.0% 和 14.6%14.6\%14.6%,相关系数 −0.30-0.30−0.30。SPY 的最小方差权重为 40%40\%40%,波动率为 9.7%9.7\%9.7%。对有两个山谷的函数,如 x4−3x2+xx^{4}-3x^{2}+xx4−3x2+x,minimize 从 x0=2x_0=2x0​=2 停在 1.131.131.13,从 x0=−2x_0=-2x0​=−2 停在 −1.30-1.30−1.30,后者更低。
  • 最小化或求根:minimize 找低点,brentq 和 newton 找函数为零的位置。
  • 括区间是保证:符号相反时 brentq 一定收敛,newton 更快但需要好的起点。
  • 最小值可能只是局部的:试几个起点,并在相信 res.x 之前先读 res.success。

实验:评分内容

  • 牛顿一步15 分
  • 二分次数10 分
  • 最小方差权重15 分
  • 各任务该用的工具15 分
  • 隐含波动率的流程10 分
  • 可能是局部的最小值10 分
  • 为什么要括区间,牛顿法为什么会失败25 分
0/ 已答 7 题
任务
1数值作答15 分未作答

对上面的债券,在 y=0.06y=0.06y=0.06 处 g=0.1666g=0.1666g=0.1666,g′=−180.77g'=-180.77g′=−180.77。新的猜测值 y−g/g′y-g/g'y−g/g′ 是多少(百分数)?保留三位小数。

y=y =y=允许误差:± 0.003
2数值作答10 分未作答

你把一个根括在 [0,1][0,1][0,1] 中。要让区间宽度不超过 0.0010.0010.001,即 2n≥10002^{n}\ge10002n≥1000,需要二分多少次 nnn?

n=n =n=允许误差:± 0.01
3数值作答15 分未作答

两个资产的波动率为 202020 和 101010,协方差为 404040。使方差最小的第一个资产权重为 w=(σb2−c)/(σa2+σb2−2c)w=(\sigma_b^{2}-c)/(\sigma_a^{2}+\sigma_b^{2}-2c)w=(σb2​−c)/(σa2​+σb2​−2c)。www 是多少?保留三位小数。

w=w =w=允许误差:± 0.002
4配对15 分未作答

把每个工具与最适合它的场景配对。

为左侧每一项选择配对项。

brentq
newton
minimize (SLSQP)
minimize (Nelder-Mead)
5排列步骤10 分未作答

把由期权价格反推隐含波动率的步骤排好顺序。

拖动以重新排序;也可聚焦某项,按空格抬起,用方向键移动,再按空格放下。

  1. 1用答案重新定价以验证
  2. 2在括区间上调用 brentq
  3. 3选一个低波动率和一个高波动率,使它们的误差符号相反
  4. 4把价格误差写成波动率的函数
6选择10 分未作答

在有两个山谷的曲线上,minimize 从 x0=2x_0=2x0​=2 出发,返回 x=1.13x=1.13x=1.13 且 success=True。你怀疑还有更深的山谷。下一步最好怎么做?

7用文字解释25 分未作答

请用一两句话解释:为什么 brentq 要求两个符号相反的点,以及为什么牛顿法虽然更快却可能失败。

数学模式键盘或 LaTeX 输入第 1/7 题 · Ctrl ⏎ 检查

登录后即可运行你的代码。

所有讲解均可免费阅读。创建账户或登录后,即可运行代码、运行测试并提交此实验。

  • 浏览器内 IDE 与 bash 终端,无需安装
  • 即时评分、XP 以及你在学习路线中的位置
创建账户登录
或
使用 GitHub 继续