private static Period TranslatePeriod(Contracts.Period period)
        {
            switch (period)
            {
            case Contracts.Period.Daily:
                return(Period.Daily);

            case Contracts.Period.Weekly:
                return(Period.Weekly);

            case Contracts.Period.Monthly:
            case Contracts.Period.Quarterly:
            case Contracts.Period.Annually:
                return(Period.Monthly);

            default:
                throw new ArgumentOutOfRangeException("period", period, string.Format("period out of expected range [{0}]", period));
            }
        }
        public IDictionary <DateTime, IDictionary <string, decimal> > GetHistoricalPrices(IEnumerable <Security> securities, DateTime start, DateTime end, Contracts.Period period)
        {
            var symbols = securities.Select(s => s.Symbol).Distinct().ToList();
            var results = new Dictionary <DateTime, IDictionary <string, decimal> >();

            foreach (var s in symbols)
            {
                var prices = _priceFinder.Get(s, start, end, TranslatePeriod(period));
                foreach (var p in prices)
                {
                    IDictionary <string, decimal> datePrices;
                    if (!results.TryGetValue(p.Date, out datePrices))
                    {
                        datePrices      = new Dictionary <string, decimal>();
                        results[p.Date] = datePrices;
                    }

                    datePrices[s] = p.Price;
                }
            }

            return(results);
        }