(工事中)モンテカルロ法によるリアルオプション分析
モンテカルロ法によるリアルオプション分析が好きすぎて、この本に記載されている分析事例を(ほぼ)全て(?)R言語で再現してみました。
R言語はforループでの処理が遅いので、株価のサンプルパスを発生させる関数をRcppで作っておきます。P.150の「正確な離散化式によるモンテカルロBSモデル」に従ったサンプルパスを発生させます。n_stepはシミュレーション期間、n_pathは発生させるサンプルパス数です。
n_path × n_step のサイズの行列をメモリに一気に乗せることになりますので、メモリが足りないとフリーズしますので実行する際には注意してください。
RcppについてはみんなのRcppを参照してください。
プレーンなコールオプション / プットオプション (P.152)
まずはプレーンなコールオプションとプットオプションの評価です。一瞬です。
バイナリ―オプション(P.158)
この設例では行使期限までの時間が0.5となっています。一方、作成したサンプルパスを発生させる関数はn_stepとして整数値を指定しなければなりません。そのため、ボラティリティと無リスク金利を期間0.5に対応した数値に変換しています。
ルックバックオプション(P.161)
この設例でも行使期限までの時間が0.5なので、バイナリーオプションの設例と同様にボラティリティと無リスク金利を調整します。
さらに、行使期限までの時間0.5を1000分割しているので、それと整合させる形でボラティリティと無リスク金利の変換が必要になります。
バリアオプション(P.164)
ダウン・アンド・アウト・コールオプションの評価です。
コードが長くなってきた気がしますが、最初の「#株価」から「#サンプル数」までは基礎数値を記載しているだけなので、実際に計算を行っている部分はこの設例でも4行しかありません。
アジア型オプション(P.169)
アベレージ・ストライク・コールオプションの評価です。
サンプル数による推定誤差の計算(P.203)
call_payoffやmyuなど、変数はこれまでの設例で使用したものです。
負相関変量法(P.207)
負相関変量法を採用して推定精度を向上させたい場合は、株価のサンプルパスを発生させる関数を改良します。指定したn_path_halfの2倍の数のサンプルパスが返ってきます。
やはりメモリ不足に注意が必要です。
_AVTはAntithetic Variable Techniqueの略です。
LSM法 バミューダ・プット・オプション(P.425)
流石にいくらかコーディングが必要になります。
前進簡便法 バミューダ・プット・オプション(P.436)
LSM法で評価したものと同じ条件のオプションを前進簡便法で評価します。
ブラック・ショールズの公式を多用しますので、これもRcppで作っておくほうが実行速度が速くなります。何度か確認したところ、Rcppの実行時間はRの2/3ほどになりました。大したことないような気もしますが、最大で n_path × n_step 回の評価がなされるので、なかなかバカになりません。
表11A1の対応する行(満期2、σ40、株価40)の「簡便法」(調整項を掛ける前の数字)に近い結果になるはずです。
0コメント