上級編 4. Short Rate Models
4.4 Hull-White モデル
4.4.5 Trinomial Tree : 3項ツリーの構築
4.4.5.4. 3項ツリーを使ったバーミューダン・スワップションの価格計算(続き)
4.4.5.4.3 バーミューダン・スワップション価格導出のアルゴリズム
では、将来のゼロクーポン債価格の期待値を、3項ツリーを使って導出し、そこからさらに、バーミューダン・スワップションの価格を導出するアルゴリズムを、見て行きます。この方法は、一般的なHull-Whiteモデル以外に、Black-Karasinski モデル(まだ説明していません)のように、ゼロクーポン債価格の解析解が求まらない Short Rate Model のグループ全般で使えます。
(i) 時間軸の設定
時間軸は、オプション最終行使日ではなく、対象スワップの最終キャッシュフロー日まで設定します。仮に、オプション最終行使日が5年後でも、対象スワップの最終期日が30年後であれば、そこまで時間軸を設定します。解析解が求まるケースと比べると、相当計算負荷が大きくなる事は容易に想像できます。また、すべてのキャッシュフロー日とオプション行使日を時間軸に加えます。そのように設定された時間軸の例を下記に再記します。
バーミューダオプション行使日の時間軸 TExk, k=1,2,…,K、 対象スワップのキャッシュフロー日の時間軸 TSwapm, m=1,2,…,M、 および3項ツリー全体の時間軸 ti, i=0,1,2,…, tS01, tS02, …, tSM−11, tSM−12, …, tN、 の関係を把握しておいて下さい。( t の上付き文字は、スワップ キュッシュフロー日のインデックス、下付き文字は、キャッシュフロー日間をさらに分割したサブインデックス。N は3項ツリーの時間軸の総分割数)
.png)
(ii) 時間軸の最後方から、ゼロクーポン債価格を遡及して計算
対象スワップのキャッシュフロー日を満期とするゼロクーポン債価格を、時間軸の最後から順番に遡及して計算します。ゼロクーポン債価格は3項ツリー上の座標に依存するので、行使日における、各 ri,j ノードで異なります。従ってこれらをノード毎にすべて求める必要があります。4.57 のゼロクーポン債価格式を若干変形し、j ノードに依存そる条件付き期待値で表すと、下記のようになります。
Pj(TExk,TSwapm)=EQRN(e−∑xi=1r(ti)Δti | FTExk,j)(TExk から TSwapm までの時間軸のステップ数を 便宜的に x と置いています。)
計算すべき Pj(TExk,TSwapm) は、行使日以降に発生するキャッシュフローの数だけあり、それらをすべて求めます。 対象スワップの期間が長いと、かなりの計算負荷になのを、覚悟して下さい。
(ii)-1
まず、時間軸の最後 tN=TSwapM における、同日満期のゼロクーポン債価格 を Ph(TSwapM,TSwapM), h=−m,...,0,...+m と表記します。すると、当然ながら、その価格はすべてのノードで 1 となります。
Ph(TSwapM,TSwapM)=1, for all h(ii)-2
次に、時間軸を1つ遡り、tN−1 上の各ノードにおける Pi(tn−1,TSwapM), i=−m,...,0,...,+m を求めます。各ノード上の短期金利 rN−1,i は既に求まっています。再度述べますが、この短期金利は tN−1 時の瞬間短期金利では無く、ΔtN−1 間の平均金利(すなわち ΔtN−1 満期のゼロクーポン債利回りに相当します。従って、これを使えば簡単に Pi(tN−1,TSwapM) が、下記式で求まります。 (ノード(N−1,i) からの分岐先の中心ノードが (N,h) だとします。)
E(Pi(tN−1,TSwapM) | r(tN−1)=rN−1,i)=e−rN−1,iΔtN−1(pN−1,i,up PN,h+1 + pN−1,i,mid PN,h + pN−1,i,down PN,h−1)=e−rN−1,iΔtN−1(1 行目の右辺の括弧内が 1 になるのは自明です)
この計算アルゴリズムを視覚化したものを、下記のように図示します。(図では、便宜上、ゼロクーポン債価格の表記を、Ph(tN,TSwapM) の代わりに、PN,h としています。)
.png)
(ii)-3
さらに時間軸を 1 歩前に戻り、tN−2 軸上のすべてのノードで Pj(tN−2,TSwapM) を求めます。これも各ノード上の条件付き期待値として、下記式で求まります。
(ノード (N−2,j) からの分岐先の中心ノードが (N−1,i) だとします。)
最後の行の右辺にある PN−1,I=Pi(tN−1,TSwapM), I=i−1, i, i+1 は、前のステップ既に求めています。また遷移確率も3項ツリー構築時に求まっているので、この式は簡単にできます。
これで、Pj(tN−2,TSwapM) for all j が求まりました。その様子を下記の図で示します。(ここでも、便宜上、ゼロクーポン債価格の表記を、PN−1,I, I=j,j−1,j+1 のように、満期を省略し、ノード座標だけで表現しています。)
.png)
(iii) オプション行使日まで遡り、Payoffを計算。さらに行使価値と継続保有価値を比較
(iii)-1
上記(ii)のアルゴリズムを、バーミューダン・スワップションの最終行使日まで遡ります。この時点で、対象スワップキャッシュフローのDiscount Factor P(TExK,TSwapm), m=K,K+1,…,M がすべて求まっているので、下記式を使って行使日における対象スワップの価値を計算します。
SwapValue(TExK)=EQRN[1−P(TExK,TSwapM)−M∑m=Kτm Z P(TExK,TSwapm) | FTExK]そして、この時点の Payoff は、このスワップ価値が + の場合の値になります。
Payoff(TExK)=max (SwapValue(TExK) , 0 )この最終行使日の Payoff は、あくまで、それ以前にオプションを行使していない事が前提になっています。すなわち、オプションを行使していなかった場合の条件付き期待値として、“オプション継続保有価値” CValue(TExK) を新たに定義します。
CValue(TExK)=EQRN(Payoff(TExK) | FTExK)以上のアルゴリズムを図で示します。ノード (k,,j) には、短期金利 rk,j のみならず、この時点以降のすべてのゼロクーポン債価格と、オプションの継続保有価値の情報を保持しなければならない点に注意して下さい。
.png)
(iii)-2
TExK から時間軸を遡りながら、ゼロクーポン債価格とオプション継続保有価値の期待値の計算を、次のオプション行使日 TExK−1 まで継続します。その間、対象スワップのキャッシュフロー日があれば、その日を満期とするゼロクーポン債価格の計算を加えます。
ゼロクーポン債価格は、(ii) のアルゴリズムを継続して使います。また、オプション継続価値は、次の条件付き期待値の式を使って、時間軸を遡りながら帰納的に計算していきます。
CValuek−1,y(tk−1)=P(tk−1,TExK) EQRN[CValue(TExK) | r(tk−1)=rk−1,y]=e−rk−1Δtk−1(pk−1,y,up ×CValuek,i+1 +pk−1,y,mid ×CValuek,i +pk−1,y,down×CValuek,i−1 CValuek−2,z(tk−2)=P(tk−2,tk−1)×EQRN[CValue(tk−1) | r(tk−2)=rk−2,y]……ひとつ手前の行使日 TExK−1 に到達すれば、オプションを行使して満期が TSwapM の対象スワップ取引を開始するか、オプションを行使せずに次の行使日 TExK まで継続保有するかの判断を行います。この判断は、ノード毎に行います。この時点の実質的なオプション価値は、4.55式から、以下のようになります。
OptionValuej(TExK−1)=EQRN[max (CValuej(TExK−1) , SwapValuej(TExK−1)) | FTExK−1,j]j=−m,…,0,…+mツリー構造を使ったアメリカンオプションの価格計算に馴染みのある方は、すぐ理解できると思います。
(iii)-3
(ii) および (iii)-1, (iii)-2 のプロセスを繰り返し、いくつかのオプション行使日を経て、最初のオプション行使日 TEx1 まで遡ります。その間、対象スワップのキャッシュフロー日があれば、その日を満期とするゼロクーポン債価格の計算を加えます。また、各オプション行使日には、4.61 式に従い、オプションを継続保有するか、行使するかの判断をすべてのノードで行います。 最終的に、TEx1 時のオプション価格式も、下記式で求めます。
OptionValuej(TEx1)==EQRN[max (CValuej(TEx1) , SwapValuej(TEx1)) | FTEx1,j]この日より前は、もはやオプション行使日が無いので、ゼロクーポン債価格の計算はここまでです。この後は、OptionValue だけを t0 まで遡って計算します。ノード (0,0) まで到達すれば、それが現時点におけるバーミューダン・スワップションの価格になります。
.png)