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