/// <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); }
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)); }
/// <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)); }