private void GetDiscountingDates(BondCashflow cashflow, TEDFuture future, out DateTime startDate, out DateTime endDate) { int iED = future.No; if (cashflow.FlowDate < future.Maturity) { startDate = cashflow.FlowDate; endDate = mTEDFutures[iED - 1].Maturity; } else if (iED > mFirstTED) { startDate = future.Maturity; endDate = mTEDFutures[iED - 1].Maturity; } else { startDate = future.Maturity; endDate = mSettlement; } }
private void CreateFuturesStrip(string[] futures) { using (var dc = SymmetryDataSource.ReadOnly()) { // need to get prices and IMM dates mTEDFutures = new TEDFuture[futures.Count()]; int f = 0; foreach (var future in futures) { var lookupCode = future; if(!future.ToLower().EndsWith(" comdty")) { lookupCode = future + " Comdty"; } var fi = FIHelpers.GetFIBySymmetryCode(lookupCode, dc, ThrowBehavior.Throw); if (fi != null && fi.Maturity.HasValue) { mTEDFutures[f] = new TEDFuture { Maturity = fi.Maturity.Value.AddTenor(Tenor.BusinessDays(2)), FIID = fi.FIID, Price = null, Weight = 0, No = f }; } f++; } var source = QuoteHelpers.GetQuoteSource("MLP", dc, ThrowBehavior.Throw); var marketSnap = QuoteHelpers.GetLatestMarketSnap("MLP", mValueDate, dc, ThrowBehavior.Throw); var quotes = QuoteHelpers.GetQuotes(marketSnap.MarketSnapID, source.QuoteSourceID, new SortedSet<int>(mTEDFutures.Select(q => q.FIID)), dc); foreach (var future in mTEDFutures) { QuoteValues quote = null; if (quotes.TryGetValue(future.FIID, out quote)) { future.Price = quote.GetValue(QuoteValueType.Price); } if (!future.Price.HasValue) { future.Price = 100; SLog.log.WarnFormat("No price for future {0}, assuming {1}", future.FIID, future.Price); } future.Rate = ((100 - (double)future.Price.Value) / 100.0); } } }