1.  QuantLibを使ってみる

1.2   Example コードを試す

1.2.11   CDS : Credit Default Swap の価格評価

1.2.11.1   はじめに

今回は、QuantLib の Example コードの中から、“CDS” プロジェクトについて解説します。CDS は Credit Default Swap の略称で、クレジットデリバティブズの中では、最も一般的な商品です。このサイトでは、現段階で(2024年12月時点)、基礎編でも上級編でも、クレジットデリバティブズについては未だ何も解説してませんが、先に QuantLib の Example プロジェクトのソースコード解説をやります。なので、最初に、CDS の商品特性や、価格計算方法についても、簡単な解説を行いたいと思います。 

はじめに、CDSの商品性を簡単に解説します。CDSは、一方の当事者が、特定の債務者のクレジットリスク(reference credit)を保証するもので、もう一方の当事者が、その保証を受ける見返りに、一定額のプレミアムを支払うものです。経済効果は保証契約とほぼ同じですが、商品名にある通り、キャッシュフローの交換であるスワップ契約(デリバティブズ契約)の形態をとります。なので契約書は、一般的に、ISDAが制定した共通の契約書フォームが使われます。 

スワップ契約で発生するキャッシュフローは、 

  • 片方のキャッシュフローは、reference credit について何等かの credit event(デフォールトや債務リストラなど)が発生した場合、それによって発生する損失額を相手方に支払います。損失額は、保証されたみなし元本額から、債権回収額を差し引いた、ネットの損失額になります。
  • もう一方のキャッシュフローは、保証料に相当するプレミアムを満期までの間定期的に支払うか、あるいは契約当初にまとめて支払うか、あるいは、それらを組み合わせて支払います。

一般的に、前者を(デフォールト)プロテクションキャッシュフロー((default) protection leg CF) と呼び、後者をプレミアムキャッシュフロー(premium leg CF)とよんでいます。 

いずれのキャッシュフローも、キャッシュフローの発生確率に、Discount Factor を掛けた値で、現在価値に換算され、両者が等価になるように価格が決められます。その発生確率をどう求めるかについては、解説すると長くなるので、省略します。多くの解説書やネット記事が出ているので、そちらをご覧ください。いずれ、基礎編あるいは上級編で、詳しく解説したいと思います 

また、CDS契約の特徴として、OTC derivatives ありながら、契約形態が標準化され、反対売買や契約移転などの取引がスムーズにいくように設計されています。標準形態では、CDS の満期日は、各年の、3,6,9,12月(2015年以降は、9,12月のみ)の20日と決められています。仮にその日が休日であっても、翌営業日にずらされる事はありません。これは、CDSの満期日のミスマッチが極力発生しないようにする為です。また、プレミアムキャッシュフローの支払日も、それらの月の20日と決められています(なので、年4回払い)。プレミアムキャッシュフローについては、その日が休日の場合は、翌営業日に繰り延べられますが、その休日を決めるカレンダーは、土曜日と日曜日だけが休日のカレンダーが使われます(除く日本)。これは、契約当事者の所属国のカレンダーを使うと、国によって支払日がずれる可能性があり、それを避け、支払日が全世界共通の日付になるようにする為です。OTCデリバティブズなので、もちろん、そうでない契約形態が取れない訳ではないですが、極めて稀です。 

クレジットデリバティブズについては、credit event が発生すると、保証している側に巨額の資金支払いが発生するので、しばしば契約内容や文言について、法的な争いが発生します。なので、ISDA が中心となって、契約の実効性を担保する為の、色々な仕組みが整備されてきています。クレジットデリバティブズは、価格計算の為の数理工学的な側面だけでなく、契約の法的側面が非常に重要なデリバティブズ取引になります。ただ、このサイトは、デリバティブズの価格計算方法の解説がメインなので、法的側面については、解説しません。 

  プロジェクトのビルド

これまでのプロジェクトと同様、まず ”CDS” プロジェクトのソースコードをビルドします。 

  1. QuantLib のディレクトリ下にあるソリューションファイル "QuantLib.sln" を開けます。すると、Visual Studio が起動され、このソリューションファイル下にあるプロジェクトがオープンされます。ソリューションエクスプローラー画面にある 21 個のプロジェクトファイルの中から、CDS プロジェクトを選択します。
  2. CDS プロジェクトのディレクトリを展開し、SourceFiles のフォルダーにある "CDS.cpp" をクリックすると、約 640行あるソースコードが開かれます。
  3. メニューバーから   “プロジェクト(P)”   →   “スタートアッププロジェクトに設定(A)”   を選択します。これで、QuantLib.sln の中で、最初に CDS プロジェクトのメイン関数が呼び出されます。
  4. 同じくメニューバーから、   “プロジェクト(P)”   →    “プロパティ(P)”   を選択し、これまでのプロジェクトと同様、boost ライブラリへのパスを設定します。(実践編1.1.5 “QuantLibソリューションのビルド”の解説を参照
  5. メニューバーから   "ビルド"   →   "CDS のビルド"   を選択するとビルドが開始されます。エラー無くビルドが正常終了すれば、試しにプログラムを走らせてみます。メニューバーの   "デバック"   →   "デバックの開始"   を選択し、下記のConsole画面が出力されれば成功です。

 (注:プログラムが終了すると同時にConsole画面も消えてしまうようであれば、"ツール" → "オプション" → "デバック" → "全般" とし、「デバックの停止時に自動的にコンソールを閉じる」  のチェックボックスをオフにする。)

Console output 1 of CDS project

Console output 2 of CDS project

Console output 3 of CDS project

  1.2.11.3   ソースコードの全体像

このプロジェクトのソースコードは、CDS.cpp になります。この解説はそのソースコードを見ながら読み進めてください。それをブラウザーでも見れるように、htmlファイルに変換したソースコードを載せておきます。 

さて、ソースコードは見ての通り、約640行あります。その構成は、以下のようになっています。 

 ―  プリプロセッサー  (1~50行目)
 ―  3種類のローカル関数の定義  (52~604行目)
   ・example01()  (52~203行目)
   ・example02()  (205~423行目)
   ・example03()  (425~604行目)
 ―  メイン関数  (607~639行目)
   ・main()の内容は上記の3種類のローカル関数を呼び出すだけ  

この構成は、これまでのプロジェクト例と異なり、テストの為のコードが、main()関数の中では無く、ローカル関数の中に記述されています。まあこれは、作成者の好みの問題なので、どちらでもいいでしょう。 

テスト内容を記述している3種類のローカル関数は、作成時期と作成者が異なっているようです。また、コード中に不要なオブジェクトが作成されている部分もあり、作成者の意図がよく解からない部分もあります。ただ、プロジェクト全体としては、これまでの例と同じく、商品オブジェクトと価格エンジンを、それぞれ部品から組み立てて、最後に価格を計算しています。その過程で、最も重要な部品であるイールドカーブとクレジットカーブが作成され、それぞれのカーブのPillarにおける値を画面出力しています。 

特に、イールドカーブとクレジットカーブの構築については、ISDA Standard Model で定義されている構築方法(Bootstrapping-Interpolationのアルゴリズム)が使われており、その理解の一助になると思います。ISDA Standard Modelについては、OpenGamma 社が出している文書が詳しいので、それを参考にして下さい。  

 

<ライセンス表示>

QuantLibのソースコードを使う場合は、ライセンス表示とDisclaimerの表示が義務付けられているので、添付します。   ライセンス

目次

Page Top に戻る

// // //