Mímisbrunnr知恵の泉

← 金融工学 一覧

🎓 レベル:発展 | 重要度:A(必須)

📎 前提:伊藤の補題二項モデルとリスク中立評価 | 数理:ブラウン運動(統計)

要点(BLUF)

1. 設定と伊藤の補題

原資産(株)が GBM に従うとします。

dS=μSdt+σSdWdS = \mu S\,dt + \sigma S\,dW

この株に依存するデリバティブの価格を V(S,t)V(S,t) とします(コールなら満期に V(S,T)=max(SK,0)V(S,T)=\max(S-K,0))。VVSS と時間 tt の関数なので、伊藤の補題 を当てると

dV=(Vt+μSVS+12σ2S2VSS)dt+σSVSdWdV = \left(V_t + \mu S\,V_S + \tfrac12\sigma^2 S^2 V_{SS}\right)dt + \sigma S\,V_S\,dW

Vt=V/tV_t=\partial V/\partial tVS=V/SV_S=\partial V/\partial SVSS=2V/S2V_{SS}=\partial^2 V/\partial S^2 です。12σ2S2VSS\tfrac12\sigma^2 S^2 V_{SS} が伊藤補正項。dVdV にも株と同じランダム項 dWdW が残っているのがポイントです。

2. デルタヘッジで確率項を消す

ここで、デリバティブを1単位持ち、株を Δ\Delta 単位空売りしたポートフォリオを作ります。

Π=VΔSdΠ=dVΔdS\Pi = V - \Delta S \qquad\Longrightarrow\qquad d\Pi = dV - \Delta\,dS

dVdVdSdS を代入して dWdW の係数を見ると、σSVSΔσS\sigma S\,V_S - \Delta\,\sigma S。ここで株数を

Δ=VS\Delta = V_S

と選べば、dWdW の項がちょうど打ち消されます。これがデルタヘッジ——「デリバティブの株価感応度ぶんだけ株を売っておけば、瞬間的に株価変動の影響を消せる」。残るのはドリフトだけです。

dΠ=(Vt+12σ2S2VSS)dtd\Pi = \left(V_t + \tfrac12\sigma^2 S^2 V_{SS}\right)dt

注目すべきは、この式に μ\mu が含まれていないこと。μSVS\mu S V_S の項は ΔμS=VSμS\Delta\,\mu S = V_S\,\mu S と相殺して消えました。

3. 無裁定からブラック–ショールズ方程式

dΠd\Pi がランダム項を持たない=このポートフォリオは瞬間的に無リスクです。無裁定なら、無リスクのものはリスクフリー金利 rr でしか増えられません。

dΠ=rΠdt=r(VVSS)dtd\Pi = r\,\Pi\,dt = r\,(V - V_S\,S)\,dt

2つの dΠd\Pi を等しいと置きます。

Vt+12σ2S2VSS=r(VSVS)V_t + \tfrac12\sigma^2 S^2 V_{SS} = r\,(V - S\,V_S)

移項すれば、ブラック–ショールズ偏微分方程式が得られます。

Vt+12σ2S2VSS+rSVSrV=0V_t + \tfrac12\sigma^2 S^2 V_{SS} + r S\,V_S - r V = 0

この方程式に μ\mu は現れません。オプションの価格は、株が将来上がると思うか下がると思うか(μ\mu)に依存しない——二項モデルとリスク中立評価 の離散版で見た事実の、連続時間版です。境界条件(満期ペイオフ)を与えて解けば、次の ブラックショールズ公式と解釈 の閉形式が出ます。

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 公式の価格・デルタ・ガンマ・セータを方程式の左辺に入れると、2.22×1016-2.22\times10^{-16}(実質ゼロ、浮動小数点の丸め誤差)。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日のあいだにデルタ自体が変化する(ガンマ)ためで、これは グリークス で扱います。連続的に(無限に頻繁に)ヘッジを組み直せば、理論上リスクはゼロ——その極限が方程式の導出そのものです。ヘッジは μ\mu(株の期待リターン)に一切依存しません。だから価格にも μ\mu が入らないのです。

⚠️ よくある誤解

関連ノート