σμ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 スキル›モジュール 3 · 行列・信号・構造›トピック 3.4·~55 分中級

オプション価格のための疎な三重対角解法

スキル上の位置モジュール 3/3 · トピック 4/10
3.4 オプション価格のための疎な三重対角解法
—ラボスコア— / 100合計XP—連続日数—

あるものだけを保存する

グリッド上でオプションを価格付けするとは、微分方程式を一連の連立一次方程式に置き換えることです。各ノードは両隣としかつながっていないので、系の行列は三重対角で、3本の対角線に数が並び、他はすべてゼロです。密な n×n 配列は n² 個の数を保存し、そのほとんどはゼロですが、疎な形式は意味のある 3n-2 個だけを保存します。scipy.sparse.diags([lower, diag, upper], [-1, 0, 1], format='csc') は対角線からそのような行列を作ります(下対角と上対角はどちらも n-1 個なので、下の対角は2行目から始まるように、上の対角は最後の列の手前で終わるように切ります)。CSC形式は疎行列ソルバーが求める形式です。

陰解法は、各ステップで A V^new=V^old+境界 を解いてオプション価値を時間をさかのぼって進めます。行列 A はステップごとに変わらないので、scipy.sparse.linalg.splu(A) で一度だけ分解し、各ステップは lu.solve(rhs) だけです。三重対角行列ではきわめて安価な操作です。S=0 の境界条件(プットの価値は Ke^(-rτ))は最初の式に入るので、最初の右辺を lower[0] * K * exp(-r * m * dt) で補正します。1年金利 4.47%、σ=25% のとき、アットザマネーのプットの閉じた式は 7.6987、スキームは 200×200 のグリッドで 7.6958、400×400 で 7.6965 と、約 0.003 の差です。2000ノードのグリッドは、疎形式で 5,995 個の数を保存し、密形式ならほぼ 400 万個が必要です。

  • ゼロでなく対角線を保存する:sparse.diags はn²でなく3n - 2個の数を持つ。
  • 一度分解して何度も解く:splu は最初にコストを払い、以後は各時間ステップが安価な solve 1回。
  • 境界は右辺に入る:グリッド端の既知の値は方程式の反対側に移される。

ラボ:採点される内容

  • 3本の対角線20点
  • 疎行列15点
  • 1回の分解での価格付け30点
  • 疎と密10点
  • 価格付け誤差5点
  • 実際の金利での研究20点
エクスプローラー · lab-sp-20
▾ lab-sp-20
▾ data
…
bash · ブラウザ内
learner@quantcraft:~/lab-sp-20$
Pythonは未読み込みPythonLn 1, Col 1Spaces: 4UTF-8

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

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

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

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

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

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