関数の前に、ローカル関数(このプロジェクト内でしか使えない関数)を2種類定義しています。このローカル関数には、次の2つのような機能・役割を持たせています。calibrationの結果得られた、モデルパラメータの画面出力(printModelCalibration())実際、このプロジェクトの実行結果となる画面出力には(前のセクション参照)、この2つの関数を使った出力表示が、何回も出てきます。131行目以降は、メイン関数になり、以下にその内容を解説します。メイン関数内では、モデルのcalibration方法について、いくつかのテストを行っています。それぞれ、複雑な内容で、一挙に説明すると判りにくくなるので、先ほどの全体像で示したように、本体部分をいくつかのパートに分割して解説していきます。以下にコードに沿ってその手順を解説。行目で、商品オブジェクト(NonStandardSwaptionクラスのオブジェクト)と、GSRモデルを使った価格エンジン(BasketGeneratingEngineクラスのオブジェクト)を作成しています。この2つのクラスの動作をテストする事が、このプロジェクトのメインの目的になります(クラスの詳細については、Appendix-1参照)。ちなみに、これらのオブジェクトは、これまでの例で説明した通り、それぞれ部品から作成し、それをコンストラクターに渡して組み立てます。multi-curve対応)。いずれのカーブもテスト用なので、シンプルに、2.5%と2%のフラットなカーブに設定されています。以下の変数宣言で、スワップションのVolatility曲面を生成しています。呼ばれています)のデータになります。Surfaceと呼ばれています)を格納するクラスになります。クラスは、QuantLibの中に存在するものの、未完成のようです。Volatilityに設定されています。:下記のコードが示す通り、商品(NonstandardSwaption)オブジェクトのコンストラクターに、部品として、対象スワップのオブジェクトと、オプション行使日のオブジェクトを渡し、商品オブジェクトを作成しています。具体的には、期間が10年のEuribor金利スワップを対象資産とするバーミューダンタイプのスワップションを生成しています。クラスのコンストラクターに、部品を渡してモデルオブジェクトを作成しています。コードをみれば判る通り、コンストラクターへ渡す引数(部品)は、その前段階で、既に作成されています。:GSRモデルを使った価格エンジンオブジェクトを2種類作成しています。Gaussian1dSwaptionEngineクラスのオブジェクト。このエンジンはシンプルなヨーロピアン・スワップションの価格計算用。Gaussian1dNonstandardSwaptionEngineクラスのオブジェクト。バーミューダン・スワップションやCMSの価格計算用。用の特別な関数が定義されています。ちなみに、それぞれの価格エンジンのコンストラクターと、そこに渡されている引数(部品)をソースコードから抜き出し、下記の通り若干の解説を加えました。引数の一部は、エンジンの部品というより、エンジンが行う価格計算アルゴリズムの中で使われるパラメータになっています。最後に、商品オブジェクト(バーミューダン・スワップション)に価格エンジンを設定(225行目)以上で、商品オブジェクトと価格エンジンの作成が終わりました。calibrationが必要で、それが次のステップになります。価格計算(227~276行目)価格計算の前に、GSRモデルのパラメータを、ベンチマーク商品の価格(Volatility)を使ってCalibrationする必要があります。配列を自動作成しています。生成する方法が備わっています。その2通りの内、一つ目の方法について、見て行きます。MoneyのスワップションのCalibrationHelperを自動生成します。関数(この関数については、Appendix-2で解説)を呼び出し、CaibrationHelperを自動生成する(240行目)。この時、自動生成する2つの方法の内、Naïve法を指定している。i->setPricingEngine(swaptionEngine);尚、ここで設定されている価格エンジンは、当初生成された2つの価格エンジンの内、シンプルなヨーロピアン・スワップション用の価格エンジンになります。関数を呼び出し、calibrationアルゴリズムを走らせています。するアルゴリズムを実装しています。法のアルゴリズムを使っています。画面出力をみると、38.08bpとなっています。以上のプロセスによる計算結果の画面表示を以下に再掲します。出力された数字の解説は、後程行います。<ライセンス表示>QuantLibのソースコードを使う場合は、ライセンス表示とDisclaimerの表示が義務付けられているので、添付します。