最初に、QuantLib リリースの Bond の例からいくつかのコードをコピーして、Bond の構築を簡単に説明します (また、免責事項: 以下のコードをコンパイルしようとはしていません)。関連するクラスの詳細については、QuantLib のドキュメントを参照してください。
あなたが言ったように年間支払いを仮定しましょう:
Schedule schedule(startDate, maturityDate, Period(Annual),
calendar, convention, convention,
DateGeneration::Backward, true);
説明のために、USD Libor インデックスを使用すると仮定しましょう。将来の固定は、後で設定する金利の期間構造に基づいて予測されます。
RelinkableHandle<YieldTermStructure> liborTermStructure;
boost::shared_ptr<IborIndex> libor(
new USDLibor(Period(1,Years),liborTermStructure));
ここで債券を作成し、LIBOR レートのスプレッドとして証拠金を追加します。
FloatingRateBond bond(settlementDays, faceAmount,
schedule, libor, dayCounter,
convention, fixingDays,
// gearings
std::vector<Real>(1, 1.0),
// spreads
std::vector<Rate>(1, 0.001));
必要なクーポンを取得するには、対応する市場データを設定するだけです。最初のキャッシュ フローのレートを設定するには、Libor インデックスの過去の修正を保存します。
libor->addFixing(resetDate, 0.01);
そして、将来のキャッシュ フローを設定するには、目的の金利でフラットな金利曲線を作成します (Libor インデックスの規則と一致するように規則に注意してください)。
boost::shared_ptr<YieldTermStructure> flatRate(
new FlatForward(today, 0.01, dayCounter, Simple, Annual));
liborTermStructure.linkTo(flatRate);
(必ずしもフラットレートに限定されるわけではありません。Libor 曲線をブートストラップできる場合は、それを使用して将来のクーポンの現実的な見積もりを取得できます。)
この時点で、債券クーポンを抽出して、期待どおりであることを確認できるはずです。
std::vector<boost::shared_ptr<CashFlow> > cashflows = bond.cashflows();
for (std::size_t i=0; i < cashflows.size(); ++i)
std::cout << cashflows[i]->date() << " "
<< cashflows[i]->amount() << "\n";
などのメソッドも呼び出したい場合はbond.cleanPrice()、キャッシュ フローを割り引く方法を債券に伝える必要があります。
RelinkableHandle<YieldTermStructure> discountingTermStructure;
boost::shared_ptr<PricingEngine> bondEngine(
new DiscountingBondEngine(discountingTermStructure));
bond.setPricingEngine(bondEngine);
予測に使用しているのと同じ曲線を割引するために使用できます...
discountingTermStructure.linkTo(flatRate);
...または別のものを作成して使用します。