2. "Implementing QuantLib"の和訳
Chapter-VI The Monte Carlo Framework
6.2 Pricing on a Path: Path上での価格計算
PathPricerクラステンプレートのプログラムコードを下記 Listing 6.11に示しますが、説明が必要な部分はそれ程多くありません。このクラスは、Monte Carloモデルの中で使う為に、派生クラスで実装すべきインターフェースを宣言しています。operator( )メソッドは、何等かの型の Pathインスタンスを引数で取り、何等かの型の値を返します (訳注: コード中のテンプレート引数である PathType、とValueTypeがそれぞれに該当)。これは基本的には関数インターフェースですが、もしこの枠組みを10年前ではなく今作るとしたら、おそらくboost::functionを使ったでしょう (そうすると PathPricerはすべて不要になります)。
Listing 6.11: Interface of the PathPricer class template.
template<class PathType, class ValueType=Real>
class PathPricer : public unary_function<PathType,ValueType> {
public:
virtual ~PathPricer() {}
virtual ValueType operator()(const PathType& path) const=0;
};
テンプレートの指定は、引数の型タイプと、戻り値の型タイプを汎用的にしたもので、引数の型は Pathクラスや MultiPathクラス、あるいは必要ならユーザーが独自で指定した型でもかまいません (注: 例えば、期限前に期日が来る可能性がある商品の価格計算では、計算時間を節約するために、Pathの生成を、実際に必要な時点までしか行わない)。戻り値の型は、デフォールトで Real型が指定されていますが、配列で返したり、構造体で返したりする場合でも対応できます。こうすると、型の選択の幅が広がるメリットがあります。同じ性質の計算結果の集合 (注: 例えば、一連のクーポンの値)を返す場合は Arrayクラスが適切でしょうが、性質の異なる値の集合 (例えば、商品の様々なファクターに対する価格感応度Greeks) を返す場合は、構造体がふさわしいでしょう。一方で、計算結果は最終的に集計される必要がある為、戻り値に対するいくつかの基本的な計算機能を用意する必要があります。Arrayクラスでは既にいくつか提供されており、直ぐにでも使えますが、構造体の場合、次のセクションで説明するような計算機能に対応する為、いくつかの計算機能を定義してやる必要があります。
<ライセンス表示>
QuantLibのソースコードを使う場合は、ライセンス表示とDisclaimerの表示が義務付けられているので、添付します。 ライセンス