public double Price(DateTime evaluationDate, MarketCurve marketCurve) { // Cashflow table SortedDictionary <double, double> cashflows = GetCashflows(evaluationDate); if (cashflows.Count == 1) { return(0); } // Build zero coupon curve ZeroCouponCurve zeroCouponCurve = marketCurve.BuildZeroCouponCurve(); // Discount double price = 0; foreach (KeyValuePair <double, double> pair in cashflows) { double yearFrac = pair.Key; double cashflow = pair.Value; price += cashflow * zeroCouponCurve.DiscountFactor(yearFrac); } return(price); }
public Bond(DateTime issueDate, DateTime maturityDate, double couponRate, int couponFrequency, bool isForward, SortedDictionary <double, double> marketCurve) { IssueDate = issueDate; MaturityDate = maturityDate; CouponRate = couponRate; CouponFrequency = couponFrequency; IsForward = isForward; MarketCurve = new MarketCurve(marketCurve, couponFrequency);; }