Overall Statistics
namespace QuantConnect 
{   
    /*
    *   Basic Template Algorithm
    *
    *   The underlying QCAlgorithm class has many methods which enable you to use QuantConnect.
    *   We have explained some of these here, but the full base class can be found at:
    *   https://github.com/QuantConnect/Lean/tree/master/Algorithm
    */
    public class BasicTemplateAlgorithm : QCAlgorithm
    {
    	
    	private Symbol symbol;
        private SimpleMovingAverage fastSma;
        private SimpleMovingAverage slowSma;
        private ExponentialMovingAverage fastEma;
        private ExponentialMovingAverage slowEma;

        public override void Initialize() 
        {
        	// backtest parameters
            SetStartDate(2019, 11, 15);         
            SetEndDate(DateTime.Now);
            
            // cash allocation
            SetCash(25000);
            
            // request specific equities
            // including forex. Options and futures in beta.
            // AddEquity("SPY", Resolution.Minute);
            var equity = AddEquity("AAPL", Resolution.Minute);
			symbol = equity.Symbol;
			
			var thirtyMinutes = new TradeBarConsolidator(TimeSpan.FromMinutes(30));
			
			thirtyMinutes.DataConsolidated += OnHalfHour;

			fastSma = SMA(symbol, 3);
			
			RegisterIndicator(symbol, fastSma, thirtyMinutes);

			SubscriptionManager.AddConsolidator(symbol, thirtyMinutes);
			
			SetWarmUp(30 * 3);

			// slowSma = SMA(symbol, 34);

			// fastSma = SMA(symbol, 3, thirtyMinutes);
			// slowSma = SMA(symbol, 34, thirtyMinutes);
			// fastEma = EMA(symbol, 21, thirtyMinutes);
			// slowEma = EMA(symbol, 55, thirtyMinutes);
        }
        
        public void OnHalfHour(object sender, TradeBar bar) {
			fastSma.Update(bar.EndTime, bar.Close);
			Debug(Time.ToString("u") + " " + fastSma);
			// slowSma.Update(bar.EndTime, bar.Close);
			// Debug(fastSma + " " + slowSma);
			// Plot("SMA", slowSma);
		}
        
        // def OnDataConsolidated(self, sender, bar):
        // self.ema_very_fast_five_min.Update(bar.EndTime, bar.Close);
        // self.Debug(str(self.Time) + " > New 5 Min Bar!")
        // self.Plot("EMA", self.ema_very_fast_one_min)
        // self.Plot("EMA", self.ema_very_fast_five_min)

        /* 
        *	New data arrives here.
        *	The "Slice" data represents a slice of time, it has all the data you need for a moment.	
        */ 
        public override void OnData(Slice data) 
        {
        	// Debug(Time.ToString("u") + " " + data.Bars["SPY"]);
			// PlotIndicator("SMA", fastSma);

        	// slice has lots of useful information
        	// TradeBars bars = data.Bars;
        	// Splits splits = data.Splits;
        	// Dividends dividends = data.Dividends;
        	
        	//Get just this bar.
        	// TradeBar bar;
        	// if (bars.ContainsKey("SPY")) bar = bars["SPY"];
        	
            // if (!Portfolio.HoldStock) 
            // {
                // place an order, positive is long, negative is short.
                // Order("SPY",  quantity);
                
                // or request a fixed fraction of a specific asset. 
                // +1 = 100% long. -2 = short all capital with 2x leverage.
                // SetHoldings("SPY", 1);
                
                // debug message to your console. Time is the algorithm time.
                // send longer messages to a file - these are capped to 10kb
                // Debug("Purchased SPY on " + Time.ToShortDateString());
                //Log("This is a longer message send to log.");
            // }
        }
    }
}