ブラック=ショールズ方程式と金融工学
ノーベル賞金融モデル — 幾何ブラウン運動と偏微分方程式によるオプション価格決定
- 1
- 将来の株価がランダム(幾何ブラウン運動)に動くとき、株を買う権利(コールオプション)の理論価格を導き出すノーベル経済学賞理論
- 2
- 無リスク資産と原資産を組み合わせた複製ポートフォリオを作ることで、リスクを完全に消去(無裁定価格理論)できる
- 3
- 公式の核となるのは標準正規分布の累積確率関数 であり、株価・行使価格・ボラティリティ・残存期間から一意に算出される
なぜこれを学ぶのか? — 現実社会とテクノロジーでの価値
なぜ生まれたのか?
1973年、フィッシャー・ブラックとマイロン・ショールズが発表した数式は、それまで『勘と度胸の投機』だった金融デリバティブ市場を一夜にして『厳密な数理科学』へと変貌させました。
身につく武器・思考力
伊藤の補題と確率微分方程式の実世界応用、ボラティリティ(価格変動リスク)の数学的把握、金融工学の基本素養
実社会・ITでの活躍現場
- •株式・為替・金利オプションの市場取引価格(気配値)決定
- •スタートアップのストックオプション(株式購入権)の公正価値評価
- •メガバンク・証券会社のリスクマネジメント(バリュー・アット・リスク VaR の計算)
- •天候デリバティブやカーボンクレジット(排出権)の価格評価
Layer 1 — 直感・シミュレーター
現在の株価、権利行使価格、残存日数、ボラティリティ(株価の荒れ具合)のスライダーを動かしてみましょう。コールオプションの理論価格と損益分岐点グラフがリアルタイムに変化し、ボラティリティが上がるほどオプションの価値が跳ね上がる様子を確認できます。
ブラック=ショールズ計算機:ボラティリティ(波乱度)を上げるとオプション価格はどうなる?
満期日に「株をいくらで買う権利(コール)」を持つべきか。 将来株価が激しく乱高下するほど、損失は限定(プレミアム分だけ)で利益は無限大になるため、オプションの価値は急激に高まります。
ブラック=ショールズのオプション価格計算式に含まれないパラメーターはどれ?
Layer 2 — 定義・受験・証明
定義
**ブラック=ショールズ方程式(Black-Scholes PDE)**とは、無裁定条件のもとで無配当のヨーロピアン・コールオプションの理論価格 が満たす2階の線形偏微分方程式である。
公式・数理モデル
証明・導出
**無裁定原理とリスク中立評価** 株価 が幾何ブラウン運動 に従うとする。オプション価格 に対し伊藤の公式を適用すると:
ここで、コールオプション 単位を買い、原資産株を 単位空売りした合成ポートフォリオ を構成する(デルタヘッジ)。
ウィーナー過程 の項(ランダムな揺らぎ)が完全に相殺され、 は確定的な値となる。
無裁定市場において、完全に無リスクなポートフォリオの利回りは無リスク利子率 に等しくなければならない()。 この恒等式を展開・整理することで、株価の期待収益率 が消滅し、ブラック=ショールズ方程式が導出される。熱伝導方程式に帰着して境界条件 を解くことで、有名な陽解が得られる。
押さえておきたいポイント
- 驚くべきことに、投資家の期待収益率 は公式に含まれず、価格はボラティリティ と無リスク金利 だけで決まる
- ボラティリティ (価格変動の激しさ)が大きいほど、アップサイドの利益無限大・ダウンサイド損失限定のオプション価値は高まる
- 正規分布の累積関数 は、満期時点で権利行使される確率(リスク中立確率)に近似する
本トピックの内容・数理モデルは、文部科学省学習指導要領(算数・数学・情報)および国際標準カリキュラムに準拠し、エンジニアリング現場の実装事例と照らし合わせてMath World Lab編集部により検証・作成されています。
Layer 3 — 工学応用・現場実装
SciPyによるブラック=ショールズ・コールオプション価格計算
金融市場のクオンツやアルゴリズム取引で日常的に使われるPythonコードです。
1import numpy as np2from scipy.stats import norm34def black_scholes_call(S, K, T, r, sigma):5 """6 S: 現在の株価7 K: 権利行使価格 (Strike Price)8 T: 満期までの期間 (年)9 r: 無リスク金利 (例: 0.02 = 2%)10 sigma: ボラティリティ (年率標準偏差 例: 0.30 = 30%)11 """12 d1 = (np.log(S / K) + (r + 0.5 * sigma ** 2) * T) / (sigma * np.sqrt(T))13 d2 = d1 - sigma * np.sqrt(T)1415 call_price = S * norm.cdf(d1) - K * np.exp(-r * T) * norm.cdf(d2)16 delta = norm.cdf(d1) # デルタ(ヘッジ比率)1718 return call_price, delta
次に学ぶならコレ!おすすめトピック
この単元と深い繋がりを持つ、あわせて学ぶと理解が深まるおすすめ単元