コード例 #1
0
        // the sensitivity of the net amount of the settlement
        private PointSensitivityBuilder netAmountSensitivity(ResolvedCapitalIndexedBondSettlement settlement, RatesProvider ratesProvider)
        {
            BondPaymentPeriod settlePeriod = settlement.Payment;

            if (settlePeriod is KnownAmountBondPaymentPeriod)
            {
                return(PointSensitivityBuilder.none());
            }
            else if (settlePeriod is CapitalIndexedBondPaymentPeriod)
            {
                CapitalIndexedBondPaymentPeriod casted = (CapitalIndexedBondPaymentPeriod)settlePeriod;
                return(productPricer.PeriodPricer.forecastValueSensitivity(casted, ratesProvider));
            }
            throw new System.NotSupportedException("unsupported settlement type");
        }
コード例 #2
0
        // the sensitivity of the present value of the settlement
        private PointSensitivityBuilder presentValueSensitivitySettlement(ResolvedCapitalIndexedBondTrade trade, RatesProvider ratesProvider, LegalEntityDiscountingProvider discountingProvider)
        {
            if (!trade.Settlement.Present)
            {
                // position has no settlement, thus it has no sensitivity
                return(PointSensitivityBuilder.none());
            }
            ResolvedCapitalIndexedBondSettlement settlement = trade.Settlement.get();
            BondPaymentPeriod          settlePeriod         = settlement.Payment;
            ResolvedCapitalIndexedBond product = trade.Product;
            RepoCurveDiscountFactors   repoDf  = DiscountingCapitalIndexedBondProductPricer.repoCurveDf(product, discountingProvider);
            double df        = repoDf.discountFactor(settlePeriod.PaymentDate);
            double netAmount = this.netAmount(trade, ratesProvider).Amount;
            PointSensitivityBuilder dfSensi = repoDf.zeroRatePointSensitivity(settlePeriod.PaymentDate).multipliedBy(netAmount);
            PointSensitivityBuilder naSensi = netAmountSensitivity(settlement, ratesProvider).multipliedBy(df);

            return(dfSensi.combinedWith(naSensi));
        }