Overall Statistics
namespace QuantConnect
{
    public class EMACrossLong : QCAlgorithm
    {
        RollingWindowAlgorithm _rwa = new RollingWindowAlgorithm(); // created instance of RollingWindow
        string symbol = "MSFT";
		
		//algorithm PnL settings
        decimal targetProfit = 0.01m; // 1% target
        decimal maximumLoss = 0.005m; // 0.5% stop
        
		// Initialize function ----------------------------------------------------------------------------
        public override void Initialize() // backtest kickstart
        {
            SetStartDate(2012, 3, 12);         
            SetEndDate(2015, 7, 28); 
            SetCash(25000);
            AddSecurity(SecurityType.Equity, symbol, Resolution.Minute);
            var fifteenConsolidator = new TradeBarConsolidator(TimeSpan.FromMinutes(15));
            fifteenConsolidator.DataConsolidated += OnDataFifteen;
            SubscriptionManager.AddConsolidator(symbol, fifteenConsolidator);
            
			_rwa._8EMA = EMA(symbol, 8);
			_rwa._20EMA = EMA(symbol, 20);
        }

        public bool MinimumProfitAchieved
        {
            get {return (Portfolio.TotalUnrealizedProfit / Portfolio.Cash) >= targetProfit;}
        }
        
        public bool MaximumLossAchieved
        {
            get {return (Portfolio.TotalUnrealizedProfit / Portfolio.Cash) <= -maximumLoss;}
        }
        
        // 15m timeframe handler -----------------------------------------------------------------------------
        
        private void OnDataFifteen(object sender, TradeBar consolidated)
        {
        	decimal profit = Portfolio.TotalUnrealizedProfit;
            decimal price = consolidated.Close;
            decimal high = consolidated.High;
            int holdings = Portfolio[symbol].Quantity;
            decimal avg = (consolidated.Open+consolidated.Close)/2;
            decimal percentage = 0;
           
           	//Algorithm Entry Section:==========================================
          	//Entry Scenario Criteria ==========================================
          	
            
            // CM Check - Scenario 1: 8EMA Crossover 20EMA
            
            while (holdings < 1)
	        {
	            	if (_rwa._8EMA >= _rwa._20EMA)
	            {
	            	if (_rwa.History[1].Close > _rwa.History[2].Close)
	            	{
	            		if (avg > _rwa.History[1].Close)
	            		{
	            			percentage = 1.5m;
	            			SetHoldings(symbol, percentage);
	            		}
	            	}
	            }
	            
            }
            
            //Algorithm Exit Section:===========================================
            
            if (MinimumProfitAchieved)
            {
                Order(symbol, -holdings);
            }
            
            if (MaximumLossAchieved)
            {
                Order(symbol, -holdings);
            }
        }
    }
}
namespace QuantConnect
{

	
	public class RollingWindowAlgorithm // contains the EMAs for usage
	{
		public RollingWindowAlgorithm(){}


		
		public RollingWindow<TradeBar> History = new RollingWindow<TradeBar>(5);
		
		//MA's
		public ExponentialMovingAverage _8EMA;
		public ExponentialMovingAverage _20EMA;
	}
}