Example #1
0
        /// <summary>
        /// Generate CTD dates and set CTD coupon rate and conversion factor.
        /// </summary>
        protected void GenerateCTD(double baseDate, double issueDate, double maturityDate, double couponInterval, double firstCouponDate, double penultimateCouponDate, DayCount dayCount, IHolidayCalendar calendar, double couponRate, double conversionFactor)
        {
            if (conversionFactor <= 0.0)
            {
                return; // No CTD details or details invalid
            }
            BondFutureOption deal = (BondFutureOption)fDeal;

            // Validation of settlement date not done for CTD details on price factor
            if (deal.Settlement_Date >= maturityDate)
            {
                throw new AnalyticsException("Settlement date must be before cheapest-to-deliver maturity date.");
            }

            DateGenerationResults dateGenerationResults = deal.GetDateGenerationResults(issueDate, maturityDate, couponInterval, firstCouponDate, penultimateCouponDate, dayCount, calendar);

            fPayDates = dateGenerationResults.PayDates;
            fAccruals = dateGenerationResults.AccrualYearFractions;

            fIssueDate        = issueDate;
            fMaturityDate     = maturityDate;
            fCouponInterval   = couponInterval;
            fCouponRate       = couponRate;
            fConversionFactor = conversionFactor;

            fAccrual = PricingFunctions.AccruedInterest(deal.Settlement_Date, fIssueDate, fPayDates, fAccruals, fCouponRate, 1.0, null);

            double strike    = PriceTransform(deal.Strike);
            double tSettle   = CalcUtils.DaysToYears(deal.Settlement_Date - baseDate);
            double tMaturity = CalcUtils.DaysToYears(fMaturityDate - baseDate);

            fStrikeYield = PricingFunctions.BondYieldFromPrice(tSettle, tMaturity, couponRate, couponInterval, strike);
        }
Example #2
0
        /// <summary>
        /// Returns bond option's dirty strike.
        /// </summary>
        public double DirtyStrike(double strikePrice, DateList payDates, double[] accruals)
        {
            var strike = Percentage.PercentagePoint * strikePrice;

            if (Strike_Is_Clean == YesNo.Yes)
            {
                strike += PricingFunctions.AccruedInterest(Expiry_Date, Issue_Date, payDates, accruals, Percentage.PercentagePoint * Coupon_Rate, 1, null);
            }

            return(strike);
        }