2. "Implementing QuantLib"の和訳

Chapter-IV Cash Flows and Coupons

4.1 The CashFlow Class

これまで通り、クラス階層の一番上の部分から始めたいと思います。‘CashFlow’クラスは、あらゆるキャッシュフローの為の基本的なインターフェースを提供します。このような抽象的な階層では、保有する情報は、当然ながら限られたものです。従って、提供されている inspectorメソッドも限られています。その内のひとつは、キャッシュフローの日付と金額を返すだけのものです。また別のメソッドは、キャッシュフロー日付を、実際の日付と、いちいち比較する手間を省く為(後で“aside”で説明する通り、整合性を保つためでもありますが)、与えられた日付に対してキャッシュフローがすでに発生したか否かを教えてくれます。最後に、もうひとつのメソッドは、CashFlowクラスが Acyclic Visitorパターンの役割を果たせるようにしています(下記[1]参照)。このクラスをどのように使うかは、後々の章で説明します。 

この Libraryの初期の頃のバージョンでは、これらすべてのメソッドは CashFlowクラスの中で宣言されていました。後々のバージョンで、これら日付に関するメソッドは Eventクラスに移され、CashFlowクラスはこの Eventクラスから継承するように変更しました。(注:すみません、階層の一番上からの説明になっていませんでした。それでも、Cash Flowを取り扱うクラス階層の中で言えば、一番上に位置します。) Eventクラスは、もちろん Libraryの他の所でも再利用されています。この2つのクラスのインターフェースを、下記 Listing 4.1に示します。 

Listing 4.1: Interfaces of the Event and CashFlow classes. 

   class Event : public Observable {
      public:
        virtual Date date() const = 0;
        bool hasOccurred(const Date &d) const;
        virtual void accept(AcyclicVisitor&);
    };

    class CashFlow : public Event {
      public:
        virtual Real amount() const = 0;
        virtual void accept(AcyclicVisitor&);
    };

Libraryは、簡単なインターフェースを、SimpleCashFlowクラスの中で実装しています。退屈で簡単な内容なので、ここでは詳しく説明しませんが、(コンストラクターが)日付と金額の情報を受け取ってインスタンスを生成し、date( )と amount( )メソッドを使って、その情報を取り出せるようになっています。もっと興味をそそるクラスとして、次のセクションのテーマである interest-rate couponsに進みます。 

< Aside:支払い遅延の取扱い >/p>

Event::hasOccurred( )メソッドの実装は、極めて簡単で、日付の比較を行っているだけです。しかし、仮に、キャッシュフローの日付と、Evaluation Date(一般的には本日)が同じだった場合、どうするのか(本日発生する支払いを、この商品の現在価値計算に含めるべきか否か)については、どうすべきでしょうか? 答えは、使う人次第としか言いようがないでしょう。QuantLibでは、ユーザーがそれを選択できるように、いくつかの Global Setting(プログラムの全体設定)を用意しています。そこでの選択は、hasOccurred( )メソッドに bool変数を渡すことによって、任意に変更できるようになっています。 

 

[1] R.C. Martin, Acyclic Visitor. In Pattern Languages of Program Design 3. Addison-Wesley, 1997. 

<ライセンス表示>

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

目次

Page Top に戻る

// // //