第54回 二項モデルから連続時間へ ― 極限でブラック・ショールズ式が現れる

位置: 第5部 第54回 / 前提: 第22回、第51回、第53回 / 数学編: M18、M19 / この回でできるようになること: 二項モデルの価格が期数を増やすとブラック・ショールズ価格に近づく様子を、計算で確かめることができる。実践: 二項ツリーを Python で実装してヨーロピアンとアメリカンのオプション価格を計算し、その結果が正しいかを自分で検証できる
0. 物語 ― 収束がジグザグになる
方眼紙の上に曲線を描いて、その下の面積を数えることを想像してください。マス目を細かくすれば、はみ出す部分が減って正確な値に近づくはずです。ところが実際に数えてみると、不思議なことが起きます。横幅を半分にしたら面積が減り、さらに少し細かくしたら今度は増えて、もとの粗い方眼紙より正解から遠ざかることさえあります。マス目の線が曲線のカーブに乗るかどうかで、切り上げと切り捨ての具合が変わるからです。
オプションの価格計算にも、同じことが起きます。二項モデルという格子状のモデルで株価の動きを表し、その格子を細かくしていくと、答えはある値に近づいていきます。その値は約10.45です。ところが格子の段数を10にすると約10.25、11に増やすと約10.61と、10.45を挟んで上下にジグザグします。12段に増やしても約10.29で、11段のときより正解から離れてしまいます。段数を増やすほど正確になると思いきや、偶数段と奇数段で誤差の向きが逆転するのです。
それでも段数を十分に大きくすれば、振れ幅は確実に小さくなります。2000段まで増やすと、ずれは0.001まで縮みます。この回では、二項モデルの格子を限りなく細かくしたとき、答えがブラック・ショールズ式という閉じた式にたどり着くことを証明します。収束はジグザグでも、行き着く先は一つに決まります。
1. 動機 ― 期数を無限にすると何が出てくるのか
この回を読み終えると、二項モデルの価格が期数を増やすとブラック・ショールズ価格に近づく様子を、計算で確かめることができます。
第51回から第53回にかけて、二項モデルの期数を増やしても計算の仕組みは変わらないことを見ました。逆向きに条件付き期待値を取って割り引く、この操作を繰り返すだけです。では、期数を無限大にしたらどうなるのでしょうか。
答えは驚くほどきれいです。コール価格はある閉じた式に収束します。その式がブラック・ショールズ式です。この回では、二項モデルのパラメータを特定の形(CRR パラメータ)に固定し、中心極限定理を使って極限を取ります。連続時間のモデルを一切使わずに、ブラック・ショールズ式の結果だけを先に手に入れます。
この記事で証明すること
- THM-BTC-1 CRR パラメータのもとで期数を無限大にすると、満期の対数価格はリスク中立測度のもとで正規分布に分布収束します。
- THM-BTC-2 したがってコール価格は、ブラック・ショールズ式で与えられる値に収束します。
- THM-BTC-3 極限の式に現れる
は、リスク中立測度のもとで満期に行使される確率に一致します。
2. 設定と仮定 ― CRR パラメータで刻みを細かくする
二項モデルの期数を
- 上昇率:
- 下落率:
- 1期間の割引率:
- リスク中立確率:
ここで
仮定を全部書き出します。
- CRR パラメータを使います。
と の積は です。 - 中心極限定理は数学編 M19 の結果として使います。
- 収束は分布収束であり、標本路の収束ではありません。
- 配当なし、金利一定です。
CRR パラメータの特徴は
です。対数を取ると
となります。対数価格が
3. 主張 ― 極限で正規分布が現れる
定理 THM-BTC-1(対数価格の極限分布) CRR パラメータのもとで期数
とすると、リスク中立測度 のもとで が成り立つ。ここで
は分布収束を表す。
定理 THM-BTC-2(価格の収束) したがって、ヨーロピアンコールの二項モデル価格は
に収束する。ここで
である。
定理 THM-BTC-3(
の意味) 極限の式に現れる は、リスク中立測度 のもとで満期にコールが行使される確率に等しい。すなわち が成り立つ。
3つの定理はまとめて証明します。THM-BTC-1 が核で、THM-BTC-2 と THM-BTC-3 はその系です。
証明を読む(読まなくても記事は完結します)
4. 証明 ― 中心極限定理を当てる
この節は読まなくても記事は完結します。
この証明を追いたい人は、数学編 第18回「収束の4概念」、数学編 第19回「特性関数と中心極限定理の証明」へ。
THM-BTC-1 の証明(概略)
各期で株価が上昇するか下落するかを表す確率変数を
(2.2) を
対数価格は独立な増分
ここで
これにより
期待値:
分散:
これが THM-BTC-1 です。 ∎
THM-BTC-2 の証明(概略)
二項モデルのコール価格は、リスク中立測度のもとで
と書けます。コールのペイオフは有界でないので、分布収束だけからは期待値の収束が出ません。そこで有界なプットを経由します。プットのペイオフ
が成り立ちます。ここで
この期待値を直接計算します。
行使される条件
第2項は
第1項を計算します。指数の中身を整理するため、
指数の中身を平方完成しました。
これが THM-BTC-2 です。 ∎
THM-BTC-3 の証明
THM-BTC-1 より、極限では
です。
これが THM-BTC-3 です。
5. 反例 ― N(d2) は現実の行使確率ではない
CEX-BTC-1: 測度の違いが行使確率を変える
リスク中立測度
主観確率
リスク中立の行使確率
CEX-BTC-2: 収束が単調でない
期数
| コール価格 | 誤差 | |
|---|---|---|
| 10 | 10.2534 | |
| 11 | 10.6112 | |
| 12 | 10.2859 | |
| 13 | 10.5864 | |
| 14 | 10.3091 | |
| 15 | 10.5682 |
偶数期では BS 値を下回り、奇数期では上回ります。これは二項ツリーの格子点が行使価格
CEX-BTC-3: アメリカンプットは収束の仕方が違う
ヨーロピアンオプションは閉じた式に収束するので誤差を直接測れ、
| ヨーロピアンプット | アメリカンプット | |
|---|---|---|
| 10 | 5.3764 | 6.0043 |
| 50 | 5.5336 | 6.0737 |
| 200 | 5.5635 | 6.0864 |
| 1000 | 5.5715 | 6.0896 |
| 2000 | 5.5725 | 6.0900 |
ヨーロピアンプットの BS 値は
外挿した基準値で測ると、アメリカンプットの
6. 数値例 ― 期数2000まで価格を追う
| 期数
右端の列
ブラック・ショールズ式の値は
期数
7. 実践 ― 二項ツリーを Python で書く
第49回から第54回までに学んだ CRR パラメータ、リスク中立確率、後ろ向き計算、早期行使判定の道具を、ここで実際に動かします。この節を終えると、二項ツリーを Python で実装してヨーロピアンとアメリカンのオプション価格を計算し、その結果が正しいかを自分で検証できます。
手順
計算は3段に分かれます。
- CRR パラメータを決める。 期数
を選び、 、 、 、 を計算します。 - 満期のペイオフを並べる。 満期の株価
( )を作り、 (コール)または (プット)を計算します。 - 後ろ向きに現在まで戻る。 各時点で「1期先の2つの値のリスク中立加重平均を割り引く」を繰り返します。アメリカンの場合は、各ノードで行使価値との大きいほうを取ります。
株価ツリー:
| 時点 | ||||
|---|---|---|---|---|
| 100.00 | ||||
| 89.09 | 112.24 | |||
| 79.38 | 100.00 | 125.98 | ||
| 70.72 | 89.09 | 112.24 | 141.40 |
コールの後ろ向き計算:
| 時点 | ||||
|---|---|---|---|---|
| 0.00 | 0.00 | 12.24 | 41.40 | |
| 0.00 | 6.55 | 27.63 | ||
| 3.50 | 17.71 | |||
| 11.04 |
コード
Python 3 と numpy だけで書きます。numpy の配列演算で1時点分のノードをまとめて計算するので、ループは時間方向の
import math
import numpy as np
# ── パラメータ ──
S0, K, r, sigma, T = 100, 100, 0.05, 0.20, 1.0
def binomial(N, opt="call", american=False):
dt = T / N
u = math.exp(sigma * math.sqrt(dt))
d = 1 / u
q = (math.exp(r * dt) - d) / (u - d)
disc = math.exp(-r * dt)
j = np.arange(N + 1) # 満期の株価の番号 0..N
ST = S0 * u**j * d**(N - j)
# 満期のペイオフ
if opt == "call":
V = np.maximum(ST - K, 0.0)
else:
V = np.maximum(K - ST, 0.0)
# 後ろ向き計算
for i in range(N - 1, -1, -1):
V = disc * (q * V[1:] + (1 - q) * V[:-1])
if american:
Si = S0 * u**np.arange(i+1) * d**np.arange(i,-1,-1)
if opt == "call":
ex = np.maximum(Si - K, 0.0)
else:
ex = np.maximum(K - Si, 0.0)
V = np.maximum(V, ex)
return V[0]
# ── BS 価格(検算用)──
def bs(opt="call"):
d1 = (math.log(S0/K)+(r+.5*sigma**2)*T)/(sigma*math.sqrt(T))
d2 = d1 - sigma * math.sqrt(T)
N1 = .5*(1+math.erf(d1/math.sqrt(2)))
N2 = .5*(1+math.erf(d2/math.sqrt(2)))
c = S0*N1 - K*math.exp(-r*T)*N2
return c if opt == "call" else c - S0 + K*math.exp(-r*T)
# ── 実行 ──
for N in [3, 10, 50, 100, 500]:
ec = binomial(N, "call")
ep = binomial(N, "put")
ap = binomial(N, "put", american=True)
parity = ec - ep - (S0 - K * math.exp(-r * T))
print(f"N={N:3d} C={ec:.4f} P={ep:.4f}"
f" AP={ap:.4f} EEP={ap-ep:.4f}"
f" parity err={parity:.1e}")
print(f"BS C={bs('call'):.4f} P={bs('put'):.4f}")
binomial 関数は約25行です。american=True にすると、ループ内で行使価値との比較(V = np.maximum(V, ex))が入ります。この1行がヨーロピアンとアメリカンの違いの全てです。
結果の読み方
BS 価格への収束: 期数
| コール | BS との差 | |
|---|---|---|
| 3 | 11.0439 | |
| 10 | 10.2534 | |
| 50 | 10.4107 | |
| 100 | 10.4306 | |
| 500 | 10.4466 |
プット・コール・パリティの検算: 全ての
早期行使プレミアム: アメリカンプットはヨーロピアンプットより高くなります。
| ヨーロピアンプット | アメリカンプット | 早期行使プレミアム | |
|---|---|---|---|
| 10 | 5.3764 | 6.0043 | 0.6279 |
| 100 | 5.5536 | 6.0824 | 0.5288 |
| 500 | 5.5695 | 6.0888 | 0.5193 |
早期行使境界(
| 時点 | 最大行使株価 |
|---|---|
| 81.87 | |
| 81.87 | |
| 85.21 | |
| 88.69 | |
| 98.02 |
満期が近づくにつれて境界が上がります。割引の効果が薄れるため、「待つ価値」が小さくなるからです。
CEX-PR54-1: 行使価値との比較を忘れるとアメリカンがヨーロピアンに化ける
max を取らずにアメリカンプットを計算すると、ヨーロピアンプットと全く同じ
CEX-PR54-2: リスク中立確率が1を超える設定
8. 次回へ ― ブラウン運動を定義する
二項モデルの極限でブラック・ショールズ式が現れることを確認しました。しかしこの導出では、極限の「連続時間モデル」の中身は見えていません。対数価格が正規分布に従うことはわかりましたが、その背後にある確率過程は何なのか、まだ定義していません。
第55回からは第6部に入り、その確率過程であるブラウン運動を正面から定義します。二項モデルの極限として「結果を先取りする」段階は終わりです。次からは、連続時間のモデルを基礎から組み立てます。
この回で、3つ目のマイルストーンに到達しました。
よくある質問
なぜ正規分布が出てくるのですか
対数収益率が独立な増分の和になるからです。中心極限定理がそのまま効きます。
価格計算用の確率のもとでの行使確率です。現実に行使される確率とは違います。
ここでブラック・ショールズ式が出るなら第7部は何をするのですか
別の道筋で導き直し、式の中身を読み解きます。ここでは結果を先に見せています。
参考文献
- Cox J. C.、Ross S. A. and Rubinstein M.、Option Pricing ― A Simplified Approach、Journal of Financial Economics、1979年、DOI 10.1016/0304-405X(79)90015-1
- Shreve S. E.、Stochastic Calculus for Finance II ― Continuous-Time Models、Springer、2004年
数値例は compute.py により float で計算し、assert で検算済み。正規分布・指数関数を含むため有理数演算は使用していない。

