🎓 レベル:発展 | 重要度:A(必須)
📎 前提:伊藤の補題・二項モデルとリスク中立評価 | 数理:ブラウン運動(統計)
要点(BLUF)
- 株価が GBM に従うとき、デリバティブ価格 に伊藤の補題を当て、 というデルタヘッジポートフォリオを組むと、ランダム項 を消せます。
- 無リスクになったポートフォリオは、無裁定よりリスクフリー金利 で増えるしかない。これを整理するとブラック–ショールズ方程式 が出ます。
- 導出の途中で期待リターン がきれいに消えます(リスク中立)。BS の解はこの方程式を満たし、デルタヘッジが実際にリスクを大幅に削ることを数値で確かめられます。
1. 設定と伊藤の補題
原資産(株)が GBM に従うとします。
この株に依存するデリバティブの価格を とします(コールなら満期に )。 は と時間 の関数なので、伊藤の補題 を当てると
、、 です。 が伊藤補正項。 にも株と同じランダム項 が残っているのがポイントです。
2. デルタヘッジで確率項を消す
ここで、デリバティブを1単位持ち、株を 単位空売りしたポートフォリオを作ります。
と を代入して の係数を見ると、。ここで株数を
と選べば、 の項がちょうど打ち消されます。これがデルタヘッジ——「デリバティブの株価感応度ぶんだけ株を売っておけば、瞬間的に株価変動の影響を消せる」。残るのはドリフトだけです。
注目すべきは、この式に が含まれていないこと。 の項は と相殺して消えました。
3. 無裁定からブラック–ショールズ方程式
がランダム項を持たない=このポートフォリオは瞬間的に無リスクです。無裁定なら、無リスクのものはリスクフリー金利 でしか増えられません。
2つの を等しいと置きます。
移項すれば、ブラック–ショールズ偏微分方程式が得られます。
この方程式に は現れません。オプションの価格は、株が将来上がると思うか下がると思うか()に依存しない——二項モデルとリスク中立評価 の離散版で見た事実の、連続時間版です。境界条件(満期ペイオフ)を与えて解けば、次の ブラックショールズ公式と解釈 の閉形式が出ます。
4. 数値検証
導いた方程式が正しいか、2つの角度から確かめます。まず、BS の解(次節の公式)を方程式の左辺に代入してゼロになるか。
import numpy as np
from scipy.stats import norm
def bs_call(S, K, r, sigma, T):
d1 = (np.log(S/K) + (r + 0.5*sigma**2)*T)/(sigma*np.sqrt(T))
d2 = d1 - sigma*np.sqrt(T)
return S*norm.cdf(d1) - K*np.exp(-r*T)*norm.cdf(d2)
def bs_greeks(S, K, r, sigma, T):
d1 = (np.log(S/K) + (r + 0.5*sigma**2)*T)/(sigma*np.sqrt(T))
d2 = d1 - sigma*np.sqrt(T)
delta = norm.cdf(d1) # V_S
gamma = norm.pdf(d1)/(S*sigma*np.sqrt(T)) # V_SS
theta = -(S*norm.pdf(d1)*sigma)/(2*np.sqrt(T)) - r*K*np.exp(-r*T)*norm.cdf(d2) # V_t
return delta, gamma, theta
S, K, r, sigma, T = 100.0, 100.0, 0.05, 0.2, 1.0
V = bs_call(S, K, r, sigma, T)
delta, gamma, theta = bs_greeks(S, K, r, sigma, T)
# BS方程式の左辺(理論上ゼロ)に代入
residual = theta + 0.5*sigma**2*S**2*gamma + r*S*delta - r*V
print(f"BS価格 V = {V:.4f}")
print(f"BS方程式の左辺(理論上ゼロ)= {residual:.2e}")
出力:
BS価格 V = 10.4506
BS方程式の左辺(理論上ゼロ)= -2.22e-16
出力の意味:BS 公式の価格・デルタ・ガンマ・セータを方程式の左辺に入れると、(実質ゼロ、浮動小数点の丸め誤差)。BS 公式が確かにこの偏微分方程式を満たしています。次に、デルタヘッジが本当にリスクを消すのかをシミュレーションで確認します。
import numpy as np
from scipy.stats import norm
def bs_call(S, K, r, sigma, T):
d1 = (np.log(S/K) + (r + 0.5*sigma**2)*T)/(sigma*np.sqrt(T))
d2 = d1 - sigma*np.sqrt(T)
return S*norm.cdf(d1) - K*np.exp(-r*T)*norm.cdf(d2)
rng = np.random.default_rng(0)
S0, K, r, sigma, T = 100.0, 100.0, 0.05, 0.2, 1.0
mu = 0.10 # 実世界のドリフト(ヘッジ効果はμに依らない)
dt = 1/252
M = 200000
V0 = bs_call(S0, K, r, sigma, T)
delta0 = norm.cdf((np.log(S0/K) + (r + 0.5*sigma**2)*T)/(sigma*np.sqrt(T)))
Z = rng.normal(size=M)
S1 = S0*np.exp((mu - 0.5*sigma**2)*dt + sigma*np.sqrt(dt)*Z) # 1日後の株価
V1 = bs_call(S1, K, r, sigma, T - dt)
unhedged = V1 - V0 # オプション単独の損益
hedged = (V1 - V0) - delta0*(S1 - S0) # デルタ分の株を売ってヘッジ
print(f"無ヘッジ 1日P&L 標準偏差 = {unhedged.std():.4f}")
print(f"デルタヘッジ後 標準偏差 = {hedged.std():.4f}")
print(f"リスク削減率 = {1 - hedged.std()/unhedged.std():.4f}")
出力:
無ヘッジ 1日P&L 標準偏差 = 0.8045
デルタヘッジ後 標準偏差 = 0.0212
リスク削減率 = 0.9737
出力の意味:オプションを単独で持つと1日の損益の標準偏差は 0.80 ですが、デルタぶんの株を売ってヘッジすると 0.02 まで激減(リスク 97% 削減)。完全にゼロにならないのは、1日のあいだにデルタ自体が変化する(ガンマ)ためで、これは グリークス で扱います。連続的に(無限に頻繁に)ヘッジを組み直せば、理論上リスクはゼロ——その極限が方程式の導出そのものです。ヘッジは (株の期待リターン)に一切依存しません。だから価格にも が入らないのです。
⚠️ よくある誤解
- 「BS は株が上がると予想して価格を決める」ではない: は導出で消えます。価格を決めるのはボラティリティ と金利 だけ。これは複製(ヘッジ)が相場観を不要にするからです。
- デルタヘッジは一度組めば終わりではない:株価が動けばデルタが変わるので、組み直し(リバランス)が要ります。連続ヘッジを離散で近似する誤差がガンマ・リスクで、取引コストとのトレードオフになります(要最新確認)。
- 方程式の前提は強い:ボラ一定・金利一定・連続取引・取引コストなし・GBM。現実はどれも完全には成り立たず、インプライドボラのスマイル(インプライドボラティリティ)など、モデルからのズレが市場に現れます。
関連ノート
- 第5章 ブラック–ショールズ 目次
- 伊藤の補題 — 前提: の展開に使う連鎖律
- 二項モデルとリスク中立評価 — 前提:離散版の複製と μ 非依存
- ブラックショールズ公式と解釈 — 次のトピック:この方程式を解いた閉形式
- 金融工学テキスト 全体目次