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

第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期間の長さを とします。 を大きくするとき、上昇率 と下落率 をどう選ぶかが問題です。Cox・Ross・Rubinstein(1979)が提案した選び方を使います。

  • 上昇率:
  • 下落率:
  • 1期間の割引率:
  • リスク中立確率:

ここで はボラティリティ、 は連続複利の無リスク金利です。

仮定を全部書き出します。

  • CRR パラメータを使います。 と の積は です。
  • 中心極限定理は数学編 M19 の結果として使います。
  • 収束は分布収束であり、標本路の収束ではありません。
  • 配当なし、金利一定です。

CRR パラメータの特徴は が成り立つことです。これにより二項ツリーが再結合し、 期後の到達可能な株価が 個に抑えられます。 回上昇して 回下落したときの株価は

です。対数を取ると

となります。対数価格が (上昇回数)の1次関数で書けることが、以下の議論の出発点です。

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) を で書き直します。 なので

対数価格は独立な増分 の和になっています。各増分の のもとでの期待値と分散を計算します。

のもとで の期待値は 、分散は です。したがって の期待値は 、分散は です。1つの増分 について

ここで は に依存しますので、 での挙動を調べます。 と , を でテイラー展開します。

なので

これにより

(4.2)

期待値:

を使いました。期待値が によらず に収束します。

分散:

(4.3)

は独立で、各 の3次モーメントは であるため、リアプノフ条件が満たされます。数学編 M19 の中心極限定理により

これが THM-BTC-1 です。 ∎

THM-BTC-2 の証明(概略)

二項モデルのコール価格は、リスク中立測度のもとで

と書けます。コールのペイオフは有界でないので、分布収束だけからは期待値の収束が出ません。そこで有界なプットを経由します。プットのペイオフ は について有界かつ連続なので、THM-BTC-1 の分布収束からプットの二項モデル価格 は に収束します。二項モデルでは割引後の株価の期待値が なので、パリティ が各 で厳密に成り立ちます。極限側でも なので同じ関係が成り立ち、 で

が成り立ちます。ここで です。

この期待値を直接計算します。 は と同値なので、()と置くと

行使される条件 を について解くと、 です。積分を の範囲で実行します。

第2項は です。 の対称性 を使いました。

第1項を計算します。指数の中身を整理するため、 を代入します。

指数の中身を平方完成しました。 が成り立つことは、展開して確認できます。 と置換すると

の定義を使いました。(4.11) に戻すと

(4.10)

これが 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 値を下回り、奇数期では上回ります。これは二項ツリーの格子点が行使価格 にぴったり乗るかどうかで決まる構造的な現象です。 を 10 から 11 に増やしたからといって、必ずしもより正確な価格になるとは限りません。

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 値は で、 での誤差は です。アメリカンプットの基準値として での値 を使うと、 の誤差は に見えます。しかし と の値から外挿した基準値は で、 の基準値自体が ずれています。閉じた式がないと、誤差の見積もりそのものが基準値の取り方に左右されます。

外挿した基準値で測ると、アメリカンプットの は で 、 で 、 で と、期数とともに動き続けます。ヨーロピアンの から のようには一定になりません。この設定では誤差の大きさ自体はヨーロピアンより小さいのですが、誤差が にきれいに比例しないため、「 を2倍にすれば誤差はちょうど半分」という見積もりや、2つの期数の結果からの外挿が、ヨーロピアンと同じ精度では効きません。早期行使の境界が各時点で変わり、ツリーの格子がその境界をまたぐ位置が期数ごとにずれるためです。早期行使プレミアム(アメリカンプット ヨーロピアンプット)は約 です。

6. 数値例 ― 期数2000まで価格を追う

, , , , で、CRR 二項モデルのヨーロピアンコール価格を期数 から まで計算し、ブラック・ショールズ値 と比較します。

| 期数 | コール価格 | 誤差 | | |—|—|—|—| | 10 | 10.2534 | | — | | 20 | 10.3513 | | — | | 50 | 10.4107 | | — | | 100 | 10.4306 | | 1.9972 | | 200 | 10.4406 | | 1.9985 | | 500 | 10.4466 | | 1.9993 | | 1000 | 10.4486 | | 1.9996 | | 2000 | 10.4496 | | 1.9991 |

右端の列 がほぼ で一定です。これは誤差が に比例して縮むことを意味します。 を2倍にすれば精度は2倍になります。

ブラック・ショールズ式の値は

です。これはリスク中立測度のもとでコールが行使される確率(THM-BTC-3)です。

期数 の二項モデル価格 と BS 値 の差は です。実務の用途には十分な精度ですが、原理的にはいくらでも精度を上げられます。

7. 実践 ― 二項ツリーを Python で書く

第49回から第54回までに学んだ CRR パラメータ、リスク中立確率、後ろ向き計算、早期行使判定の道具を、ここで実際に動かします。この節を終えると、二項ツリーを Python で実装してヨーロピアンとアメリカンのオプション価格を計算し、その結果が正しいかを自分で検証できます。

手順

計算は3段に分かれます。

  1. CRR パラメータを決める。 期数 を選び、、、、 を計算します。
  2. 満期のペイオフを並べる。 満期の株価 ()を作り、(コール)または (プット)を計算します。
  3. 後ろ向きに現在まで戻る。 各時点で「1期先の2つの値のリスク中立加重平均を割り引く」を繰り返します。アメリカンの場合は、各ノードで行使価値との大きいほうを取ります。

のコールで全ノードを確認します。、、、1期の割引係数は です。

株価ツリー:

時点
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 値 に近づきます。

コール 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部は何をするのですか

別の道筋で導き直し、式の中身を読み解きます。ここでは結果を先に見せています。

参考文献

  1. 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
  2. Shreve S. E.、Stochastic Calculus for Finance II ― Continuous-Time Models、Springer、2004年

数値例は compute.py により float で計算し、assert で検算済み。正規分布・指数関数を含むため有理数演算は使用していない。

目次