2. Implementing QuantLib の和訳

Chapter-I Introduction

若さゆえの情熱から、かつてQuantLibのWebサイトにおいて、“標準的で、かつ無料で開放された金融モデルのライブラリー”を目指すと宣言していました。そのような宣言を若干甘めに解釈すれば、ある程度は成功したと言えるかも知れません。そう言う為に、“最初で、(暫くの間かもしれませんが)唯一のオープンソースの金融モデルライブラリー”の定義を都合よく解釈したかも知れませんが。(注:何人かのQuantLibライブラリーのユーザーの方から、我々のモデルライブラリーを”the QuantLib”と呼んでいただきました。大変光栄な呼称ですが、私としては謙遜して、今の所そう呼ぶのは控えています。)  

標準的とかどうかに関わらず、少なくともこれを書いている時点では、新しいバージョンのリリースがあると、毎回、数千件のダウンロードが行われているようです。ユーザーからの寄与も定常的に行われていますし、実務の世界でも使われているようです(金融の世界における秘密主義にもかかわらず、漏れてくる話からの推察ですが)。このプロジェクトの管理者として、全体を総合的に見ると、私は幸せ者であると言っていいかも知れません。 

しかし、それが故に、適切な解説書が無いという問題が、より明白になりました。詳細なクラスの解説は提供されていますが(この部分は、自動的に作成する事ができるので、実は簡単でした)、それを読んでも、木を見て森を見ず、の状況に陥るだけで、新しくこれを使ってモデル開発を行おうとするユーザーにとっては、まさにルイス・キャロルの「スナーク狩り」の中でBellmanが述べた言葉に同意をするかもしれません。 

“メルカトル図法の地図で、北極点と赤道、回帰線、子午線は何の役に立つのだ?”とBellmanは叫んだ。それに対し、隊員たちは答えた。“単なる地図記号ですよ” 

この本の目的は、その足りない所を埋める事です。この本は、全体のデザインやQuantLibライブラリーの実装方法のレポートであり、またMel Brooksの“Young Frankenstein”で極めて特徴的な、“どうやって作ったのか”的な本にも、心情的にはよく似ています(その映画の驚くような成功には及びませんが)。もし読者の方が、既にQuantLibライブラリーのユーザーであるか、あるいはこれからユーザーになろうとしているのであれば、プログラムコードを読むだけでは解らないような、ライブラリーのデザインについての有用な情報が、この本から得られるでしょう。もし読者がユーザーではないものの、金融工学の世界で働いているのであれば、金融モデルライブラリーのデザインに関する現場報告書として読んで頂いてもかまいません。おそらく、あなたが今直面しているような問題に対して、その解決策と、その理屈も含めて、この本がカバーしている部分がある事に気づくでしょう。読者の方の制約条件によっては、別の解決策を選択するかもしれませんし、あるいはその可能性の方が高いかもしれませんが、この本の中での論点整理から、そういった場合でも得るものがあるかも知れません。 

説明の中で、現時点の実装方法の欠点も指摘しようと思います。それは、このライブラリーを蔑む為では無く(私自身もライブラリーの開発に深く関わっていました)、より有用な目的の為です。一つには、既存の弱点を説明する事によって、これから(このライブラリーを使って)モデル開発しようとする人が同じ失敗をする事を避けられます。もう一方で、このライブラリーをこれからどう向上させていくか道筋を見せてくれるかも知れません。実際にも、すでにそれは起こっており、この本を書く為にプログラムコードを見直していく中で、いくつか弱点の改善を行ってきました。 

本のスペースと私の時間の制約から、QuantLibライブラリーのすべての機能をカバーすることはできません。この本の前半部分は、金融商品や期間構造のオブジェクトモデルといった2~3種類の最も重要なクラスについて説明します。それによって、このライブラリーのより大きな構造に対する俯瞰が出来るでしょう。後半部分では、モンテカルロ法や有限差分法モデルを構築する為に使われている、いくつかの特別なフレームワークについて説明します。その内のいくつかは、それ以外のものより、より洗練されています。このフレームワークの現時点での弱い部分は、強い部分と同じ位、興味深いものだと思います。 

この本の読者としては、QuantLibライブラリーを使って自ら金融商品や価格モデルを開発しようとしているユーザーを想定しています。もしあなたが、それに該当するなら、ライブラリーが提供するクラス階層やフレームワークに関する説明を読んで頂けると、ご自身のプログラムコードをQuantLibライブラリーのそれと統合する為に必要な鈎について、何等かの情報を得られるでしょうし、提供されている機能を活用する助けになるでしょう。もし、そういった類の読者でないとしても、本を閉じないで下さい。そうで無い方にとっても、何等かの役に立つ情報を得られると思います。しかし、ここでひとつ、あるヒントを残します。別のQuantLibライブラリーのアドミニストレーターの一人が、この本の姉妹版になる“Using QuantLib”を書くつもりであると繰り返し述べています。それが出来上がるまで、皆さんも、全力で彼を急かして下さい。 

********************************* 

慣習に従って、この本についていくつかの注意点を述べておきます。 

読者がC++ と金融工学に関する一定の知識がある事を前提にしています。私自身が、これらについて、この本で改めて教える事が出来るとは思っていません。この本は既に相当ぶ厚くなっており、その余裕もありません。ここでは、QuantLibライブラリーの実装方法とデザインについての説明だけに留めます。金融工学における方程式が前提とする空間の説明や、C++の文法や躓き易い点などの説明は、別のより詳しい方にお任せします。 

読者の方は既に気づかれたかも知れませんが、書き手の主語に単数(“I”)を使っています。はい、確かに自己中心的ですが、それが不快な為に本を閉じないで下さい。しかし、もし書き手の主語を複数(“We”)としたら、それはそれで尊大です。書き手に第3者を使っても同じでしょう。色々考えた結果、私としては、あまり格式ばっていない居心地にいい方法を取る事にしました(従って、いろんな省略形も使っています)。同じ理由から、読者の方も、固い言い方の読者(”reader”)とせずにあなた(“you”)を使う事にします。単数のIを使うのは、混乱を避ける為でもあります。もし複数のWeを使った場合、QuantLibライブラリーの開発者全体を指すものと理解して下さい。 

この本の中では、デザインの変遷についても、それ自体が興味を引くものであったり、最終形に影響するものであったりすれば、説明して行きます。論点を明確にする為、ほとんどの場合、行き止りや、道を間違えたケースは飛ばして、時と共に変遷していったデザインについては、一纏めにして、最終的に決定したデザインについてのみ、時には簡略化して、説明します。それでも、述べないといけない事はたくさんあります。Alabama Shakes(アメリカのロックバンド。Boys and Girlsの歌詞参照)の言葉を借りれば、”why”には、恐るべき多くの数の質問が含まれています。 

プログラムコードの説明の中で、そこで使われているデザインパターンについても説明します。注意しておきますが、読者が開発されるコードの中にそれを使うように勧めるものではありません。デザインパターンは、利用価値がある時にだけ使うべきであり、デザインパターンの為に使うべきではありません。(この点に関するより詳細な解説は 下記[1]ご参照) しかし、QuantLibライブラリーは何年にも渡るプログラミングとその修正の歴史を経ており、ユーザーからのフィードバックや新しい要求への対応をしてきました。その結果、デザインがデザインパターンに収束していくのは自然な事でもあります。 

本の中で、プログラムコードの概要を示していますが、ライブラリーの中で使われているのと同じ作法(LeanPubの原典のAppendix B参照)を使っています。一つだけ、その作法からはずれている部分があります。行の長さの制約から、型名からstdや boostのnamespaceを外している所があります。プログラムコードのListingをチャートで補完する必要がある場合は、UMLを使っています。UMLに馴染みのない方は、その詳しいガイドは下記[2]の文献を参照して下さい。 

 

さて、イントロダクションは以上です。本編を始めましょう。 

 

[1] J. Kerievsky, "Refactoring to Patterns." Addison-Wesley, 2004.
  [2] M. Fowler, "UML Distilled: A Brief Guide to the Standard Object Modeling Language, 3rd edition." Addison-Wesley, 2003.  

 

<ライセンス表示>

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

目次

Page Top に戻る

// // //