Overall Statistics
namespace QuantConnect 
{   
    /*
    *   QuantConnect University: Full Basic Template:
    *
    *   The underlying QCAlgorithm class is full of helper methods which enable you to use QuantConnect.
    *   We have explained some of these here, but the full algorithm can be found at:
    *   https://github.com/QuantConnect/QCAlgorithm/blob/master/QuantConnect.Algorithm/QCAlgorithm.cs
    */
    public class BasicTemplateAlgorithm : QCAlgorithm
    {
    	private static int PERIOD_DAYS = 5;
    	private static decimal BB_UPPER_STD_DEV = 3.0m;
    	
        //Initialize the data and resolution you require for your strategy:
        public override void Initialize() 
        {
            //Start and End Date range for the backtest:
            SetStartDate(2016, 3, 16);  
            // Keep the end date consistient
            //SetEndDate(DateTime.Now.Date.AddDays(-1));
            SetEndDate(2016, 6, 1);
            
            
            //Cash allocation
            SetCash(25000);
            
            UniverseSettings.MinimumTimeInUniverse = TimeSpan.FromDays(1);  // So securities don't 'hang around' in the Universe when no longer selected
            UniverseSettings.Resolution = Resolution.Daily;
            
            // 5 for testing
            AddUniverse(Universe.DollarVolume.Top( 5 ));
            
        }


        //Data Event Handler: New data arrives here. "TradeBars" type is a dictionary of strings so you can access it by symbol.
        public override void OnData(Slice slice) 
        {   
        	var bars = slice.Bars; // e.g. bars["IBM"].Open
        	
            string logString = Time.Date.ToString() + " " + bars.Count.ToString() + " tickers: ";
            foreach(string ticker in bars.Keys) {
                logString = logString + ticker;

                SimpleMovingAverage sma = SMA(ticker, PERIOD_DAYS, Resolution.Daily, Field.Close);
                BollingerBands upperBB = BB(ticker, PERIOD_DAYS, BB_UPPER_STD_DEV, MovingAverageType.Simple, Resolution.Daily);  // WORKS IF COMMENT OUT THIS LINE
                
                var history = History(ticker, PERIOD_DAYS);
                foreach (var tradeBar in history)  // explicitly populate the inidcators with historical data
                {
                	//Console.WriteLine( tradeBar.EndTime.ToString() + " " +  tradeBar.Close);
            	    //upperBB.Update(tradeBar.EndTime, tradeBar.Close);
            	    sma.Update(tradeBar.EndTime, tradeBar.Close);
                }
                logString = logString + "   SMA: " + sma;
                //logString = logString + "   Upper: " + upperBB.UpperBand;
                logString = logString + "   ";
            }
            Console.WriteLine( logString );

        }


    }
}