σμ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.6·~45 分中級

手計算とbrentqによる根探し

スキル上の位置モジュール 1/3 · トピック 6/8
1.6 手計算とbrentqによる根探し
—ラボスコア— / 100合計XP—連続日数—

誤差をゼロにする数を探す

債券価格は利回りから簡単に計算できますが、価格から利回りへは簡単ではありません。f(y)=P(y)-市場価格=0 を探索で解きます。ニュートン法は接線をたどります。推定値 y から y-f(y)/f'(y) へ跳び、解の近くでは正しい桁数が1歩ごとにほぼ倍になるので数回の反復で足りますが、導関数が必要で、悪い出発点では迷うことがあります。二分法は f の符号が変わる区間 [lo,hi] だけを必要とし、区間を何度も半分にするので失敗しませんが、1歩で2進1桁しか得られず、幅65の区間を 10⁻¹⁰ 未満にするのに40歩かかります。ブレント法 scipy.optimize.brentq は区間の安全性を保ちつつ補間の歩を加え、関数呼び出しは通常、二分法の数回分で済みます。full_output=True では、関数を何回評価したかを示す function_calls を持つ記録も返します。

同じ道具でブラック・ショールズの式も逆算できます。コールの価格はボラティリティとともに増えるので、気配ごとに brentq に、それを再現する [10⁻⁴,5] の中の σ を求めさせます。価格が本源的価値 max(S-Ke^(-rT),0) と株価 S の間に厳密に収まるときだけ可能で、外側ではボラティリティが存在せず、正しい答えは例外ではなくNaNです。1つの悪い気配でスマイル全体が止まらないようにするためです。2026年10月9日の10年国債利回りは 5.24% なので、年率5%・10年の債券は 97.121 です。ニュートン法は4回の反復、ブレント法は10回の関数呼び出し、二分法は40回で利回りを見つけます。10%、20%、40%、80%のインプライド・ボラティリティは 10⁻⁶ より高い精度で戻ります。各手法のコストと失敗する場面を知っていれば、債券の曲線全体やオプションチェーンに適した手法を選べます。

  • ニュートン法は速いが、導関数とまともな出発点が必要:ここでは4歩。
  • 二分法は失敗しないが遅い:幅65の区間に40歩。
  • brentq を使い、不可能な場合を処理する:区間+補間、解がなければNaN。

ラボ:採点される内容

  • 債券価格10点
  • 手計算のニュートン法20点
  • 手計算の二分法15点
  • scipyのブレント法15点
  • 3つのソルバーを並べる10点
  • インプライド・ボラティリティ15点
  • 実データでの研究15点
エクスプローラー · lab-sp-15
▾ lab-sp-15
▾ data
…
bash · ブラウザ内
learner@quantcraft:~/lab-sp-15$
Pythonは未読み込みPythonLn 1, Col 1Spaces: 4UTF-8

このトピックをリセットしますか?

lab-sp-15 の内容はすべてスターターファイルに戻り、ターミナルも消去されます。現在の解答は失われ、元に戻せません。

リセットされるもの
  • main.py → スターターコード
  • ターミナル履歴とテスト出力
  • 未提出の変更
保持されるもの
  • ラボの最高スコア
  • XPと連続日数
  • 講義の進捗とメモ

コードを実行するにはログインしてください。

レクチャーはすべて無料で読めます。コードの実行、テスト、ラボの提出にはアカウントの作成かログインが必要です。

  • ブラウザ内IDEとbashターミナル。インストール不要
  • 即時採点、XP、スキルでの現在地
アカウントを作成ログイン
または
GitHubで続ける