/// <summary>
        /// Evaluates the npv.
        /// </summary>
        /// <returns></returns>
        private decimal EvaluateDirtyPrice()
        {
            var result = 0.0m;

            if (AnalyticParameters.IsYTMQuote)
            {
                var accrualYearFraction = Convert.ToDouble(AnalyticParameters.RemainingAccruedFactor);
                var periods             = AnalyticParameters.AccrualYearFractions.Length;
                var annualCoupon        = Convert.ToDouble(AnalyticParameters.CouponRate);
                var h           = AnalyticParameters.Frequency;
                var nextCoupon  = AnalyticParameters.IsExDiv ? 0.0 : annualCoupon / h;//TODO semi annual only.
                var next2Coupon = nextCoupon;
                var y           = Convert.ToDouble(AnalyticParameters.Quote);
                var v           = 1 / (1 + y / h);
                result = Convert.ToDecimal(BondAnalytics.ISMADP(accrualYearFraction, 0.0, periods - 1, nextCoupon,
                                                                next2Coupon, annualCoupon, 0, h, v, y));
            }
            return(result);
        }
Esempio n. 2
0
        public void TestISMADP()
        {
            var result = BondAnalytics.ISMADP(297.0 / 365.0, 0, 8, .07, .07, .07, 0.0, 1, .9434, .06);

            Debug.WriteLine(String.Format("dirty price : {0}", result));
        }
Esempio n. 3
0
 /// <summary>
 /// Calculates the ISMA dirty price.
 /// </summary>
 /// <param name="accrualYearFraction">The first accrual coupon year fraction.</param>
 /// <param name="finalAccrualYearFraction">The final coupon year fraction. If regular this is zero.</param>
 /// <param name="numberOfFullCoupons">The number of full coupon periods remaining until redemption.
 /// The number of remaining coupon periods is therefore n+1;</param>
 /// <param name="nextCoupon">The next coupon payment. This may be partial or zero if the bond is trading ex div.</param>
 /// <param name="next2Coupon">The next 2 coupon.</param>
 /// <param name="annualCoupon">The annual coupon payment for 100 unit of face value.</param>
 /// <param name="finalCoupon">The final coupon with an odd final period. This is zero for all other bonds.</param>
 /// <param name="couponsPerYear">The number of coupon periods in a year.</param>
 /// <param name="periodDiscountFactor">The discount factor for one period, 1/(1+y/h)</param>
 /// <param name="annualYield">The required annual nominal redemption yield expressed as a decimal.</param>
 /// <returns>The ISMA dirty price.</returns>
 public double ISMADP(double accrualYearFraction, double finalAccrualYearFraction, int numberOfFullCoupons,
                      double nextCoupon, double next2Coupon, double annualCoupon, double finalCoupon, int couponsPerYear, double periodDiscountFactor, double annualYield)
 {
     return(BondAnalytics.ISMADP(accrualYearFraction, finalAccrualYearFraction, numberOfFullCoupons,
                                 nextCoupon, next2Coupon, annualCoupon, finalCoupon, couponsPerYear, periodDiscountFactor, annualYield));
 }