σμ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
  • 日本語
  • 中文
Optimization スキル›モジュール 5 · 実践の最適化›トピック 5.2·~1 時間 40 分上級

総仕上げ:回転率とコストの上限を持つ制約付きポートフォリオ最適化

スキル上の位置モジュール 5/5 · トピック 2/2
5.2 総仕上げ:回転率とコストの上限を持つ制約付きポートフォリオ最適化
—ラボスコア— / 100合計XP—連続日数—

部品から動く最適化器へ

紙の上の最小分散ポートフォリオにはルールがありません。実際の運用はロングオンリーで全額投資、取引にはコストがかかります。そのルールの効果を見る唯一の方法は、最適化器を自分で作り、見ていない日でテストすることです。この総仕上げでは、スキルの3つの考え方を使います。ループには勾配降下法、ロングオンリーの予算ルールには射影、取引には L1 の上限です。必要なのは NumPy だけで、ライブラリのソルバーは使えません。

wₖ₊₁=Π(wₖ-η·2Σwₖ), η=1/(2λₘₐₓ(Σ))

射影勾配降下法は、分散 wᵀΣw(勾配は 2Σw)に通常の勾配ステップを踏み、その結果を射影 Π で最も近いロングオンリー・全額投資のポートフォリオに戻します。ステップ幅 1/L(L=2λₘₐₓ(Σ) はヘッセ行列の最大固有値)は常に安定です。{w≥0, Σw=1} への射影には厳密な答えがあります。ベクトルを降順に並べ、累積和から1を引き、並べた値がなお累積和を k で割った値を上回る最後の位置 ρ を見つけ、θ をその累積和を ρ+1 で割った値とし、max(v-θ,0) を返します。すべてのウェイトを同じ量だけずらし、負になるものをゼロで切ります。

w=w₀+α(wₜ-w₀), α=min(1, τ/(‖wₜ-w₀‖₁)), c ‖w-w₀‖₁

ターンオーバーは取引の L1 ノルム ‖w-w₀‖₁ です。実行可能性を保ったまま上限 τ 以下に抑えるには、現在のポートフォリオ w₀ から最適化器の目標 wₜ へ向かう道のりのうち割合 α だけ進みます。ロングオンリー・全額投資の2つのポートフォリオを結ぶ線分上の点もロングオンリー・全額投資で、L1 ノルムは線分に沿って線形に増えるので、取引量はちょうど min(差,τ) になります。各リバランスにはターンオーバーの c 倍のコストがかかり、バックテストはそれを保有ブロックの最初の日から引きます。ブロックのウェイトはそれ以前の日だけを使い、報告する結果はつなげたコスト控除後の標本外の日のボラティリティとリターンです。

実データが示すこと2010年以降の米大型株12銘柄で、126日の窓を42日ごとに再推定し、コスト10bp、標本外4,058日とすると、ロングオンリーの最小分散ポートフォリオは年率ボラティリティ約13.4%、リターン約13.8%、リバランスあたりのターンオーバー約0.36です。ターンオーバーを0.2に制限するとボラティリティ約13.6%、リターン約14.0%、ターンオーバー0.20になり、リスクは少し増えますが、取引は減り、純リターンは損なわれません。等ウェイトはボラティリティ約18.4%、リターン約21.4%で、取引はありません。等ウェイトが稼ぐのは、この12の生存銘柄、とりわけアップル、アマゾン、エヌビディアが非常に好調だったからにすぎません。
  • 射影勾配降下法:勾配ステップ 2Σw(幅 1/L)の後に単体への射影。
  • ターンオーバー上限:目標へ向かう割合 α=min(1,τ/差) だけ進み、ポートフォリオは実行可能なままです。
  • 誠実なバックテスト:直近 window 日で推定し、step 日保有し、コストを引いて、つなげた標本外の数値を報告します。
覚えておくべき2つの単純化このバックテストはブロック内のウェイトのドリフトを無視し(ウェイトは固定)、ターンオーバー1単位あたりに一定のコストを課しますが、実際のインパクトは取引量や流動性の低さとともに増えます。どちらも数字をやや甘くします。この演習は、リスク、ターンオーバー、コストの関係を示すきれいなモデルであり、実運用の成績の予測ではありません。

ラボ:採点される内容

  • 単体への射影20点
  • 射影勾配降下法25点
  • ターンオーバー上限15点
  • コスト付きローリング・バックテスト25点
  • 方針の比較15点
エクスプローラー · lab-op-11
▾ lab-op-11
▾ data
…
bash · ブラウザ内
learner@quantcraft:~/lab-op-11$
Pythonは未読み込みPythonLn 1, Col 1Spaces: 4UTF-8

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

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

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

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

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

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