2

変動利付債の価格を設定しようとしていますが、既に C++ の quantlib で構築された割引曲線があります。ここで私がやりたいことは、FloatingRateBond クラスを使用して、最初のキャッシュ フローがわかっている一連のキャッシュ フローを作成し (このキャッシュ フローに関連付けられたインデックスが最後のリセット日にわかっていた場合)、残りのキャッシュを予測することです。現在のインデックスを使用してフローします。

よりグラフィカルにするために、年次支払いと、最後のリセット日のインデックスが 1% であり、リセット マージンが 1% であると仮定します。その場合、最初のキャッシュ フローは大まかに言って 2% になります。ここで、今日の指数が 2% であると仮定すると、残りのすべてのキャッシュ フローを 3% にする必要があります (日数計算規則と営業日規則から適切に調整されます)。

FloatingRateBond クラスのインスタンスに対して、このようなキャッシュ フロー構造を作成するにはどうすればよいですか?

4

1 に答える 1

4

最初に、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);

...または別のものを作成して使用します。

于 2015-06-17T08:45:33.867 に答える