誘導型モデルを使った信用リスクのある割引債の価格付け−2

前回の記事「誘導型モデルを使った信用リスクのある割引債の価格付け−1 - My Life as a Mock Quant」の続き。

前回の記事の最後に書いたように、作成したプログラムのテストをしたいので今回はまず簡単にできるチェックとして

  • デフォルトがないと仮定した場合、CIRモデルの理論割引債価格と合うか?

を実施してみる。CIRモデルが算出する理論割引債価格を算出するための関数をR言語を使って

#CIRモデルの理論割引債価格
CIRZeroBondPrice <- function(t, k, theta, vola, init)
{
  h <- sqrt(k^2 + 2 * vola^2);
  denominator <- 2 * h + (k + h) * (exp(t * h) - 1)
  A <- (2 * h * exp((k + h) * t / 2) / denominator)^(2 * k * theta / vola^2)
  B <- 2 * (exp(t * h) - 1)/ denominator
  A * exp(-B * init)
}

として書いた。この辺の理論的な話は参考に書いたBrigoの本が詳しい。バイブル。聖書。

前回作成したプログラムのデフォルト強度過程のパラメーターを全部0にしてデフォルトしないようにしてから実行し、その結果として出てきた割引債価格を上述のCIRモデルの理論割引債価格と比較してみる。コードは前回のものとほぼ同じだけど、

  • (デフォルトを起こさせないために)デフォルト強度過程のパラメータを全て0に設定
  • CIRモデルの割引債価格計算関数追加

という点だけが異なってて、

となる。実行結果は

> result
[1] 0.9049275
> CIRZeroBondPrice(2, k.ir, theta.ir, vola.ir, init.ir)
[1] 0.9049046

となってデフォルトを起こさないようにシミュレーションさせた結果とCIRモデルの理論割引債価格がほぼ一致していることが確認できるので、デフォルト未考慮の部分は間違ってなさそうだということがわかる。

参考
Interest Rate Models-theory and Practice: With Smile, Inflation and Credit