virtual protected Future FindFuture(Feed feed, TradeInfo info, IList<Contract> contracts, string ticker, out Contract contract)
        {
            contract = null;
            try
            {
                //First Find Contract;  
                var words = ticker.Split(' ');
                string symbol = ticker;
                if (words.Length == 2)
                    symbol = words[0];
                else if (words.Length == 3)
                    symbol = words[0] + " " + words[1];
                foreach (var c in contracts)
                {
                    if (ticker.StartsWith(c.TickerSymbol) && ticker.EndsWith(c.TickerSuffix))
                    {
                        contract = c;
                        break;
                    }
                }

                if (contract == null) return null;
                var fromDate = info.ReportDate.AddYears(1) > info.Maturity ? info.ReportDate : info.Maturity.AddMonths(-1);
                var exps = GetExpirations(feed, contract, fromDate);
                if (exps == null || exps.Count == 0) return null;
                foreach (var exp in exps)
                {
                    if (contract.GetFutureCode(exp).EndsWith(symbol)) 
                        return contract.CreateFuture(exp);
                }
                
                return null;
            }
            catch (Exception x)
            {
                Logger.Error("FindFuture " + ticker, x);
                return null;
            }
            
        }