Overall Statistics
Total Trades
7
Average Win
44.89%
Average Loss
-11.18%
Compounding Annual Return
17.757%
Drawdown
32.100%
Expectancy
0.672
Net Profit
87.187%
Sharpe Ratio
0.607
Loss Rate
67%
Win Rate
33%
Profit-Loss Ratio
4.02
Alpha
0.18
Beta
-0.051
Annual Standard Deviation
0.289
Annual Variance
0.083
Information Ratio
0.265
Tracking Error
0.314
Treynor Ratio
-3.463
Total Fees
$49.99
using QuantConnect.Indicators;
using System.Drawing; // for Color

namespace QuantConnect 
{   
    public class BasicTemplateAlgorithm : QCAlgorithm
    {

    	private string Symbol = "CNX";
    	private decimal Symbol_price = 0;

        ExponentialMovingAverage emaFast;
        ExponentialMovingAverage emaSlow = null;
        
        
        //Initialize the data and resolution you require for your strategy:
        public override void Initialize() 
        {
			
            //Start and End Date range for the backtest:
            SetStartDate(2013, 1, 1);         
            SetEndDate(DateTime.Now.Date.AddDays(-1));
            
            //Cash allocation
            SetCash(25000);
            
            //Add as many securities as you like. All the data will be passed into the event handler:
            AddSecurity(SecurityType.Equity, Symbol, Resolution.Minute);
            

            
            emaFast = EMA(Symbol, 20, Resolution.Daily);//new ExponentialMovingAverage(Symbol,15, Resolution.Daily);
            emaSlow = EMA(Symbol, 100, Resolution.Daily);
            
            
            var emaPlot = new Chart("EMA");
            
            emaPlot.AddSeries(new Series("EMA-100", SeriesType.Line, 0));
            emaPlot.AddSeries(new Series("EMA-20", SeriesType.Line, 0));
            emaPlot.AddSeries(new Series("Price", SeriesType.Line,0));
            emaPlot.AddSeries(new Series("Buy", SeriesType.Scatter, 0));
            emaPlot.AddSeries(new Series("Sell", SeriesType.Scatter, 0));

           AddChart(emaPlot);
        }

        //Data Event Handler: New data arrives here. "TradeBars" type is a dictionary of strings so you can access it by symbol.
        public void OnData(TradeBars data) 
        {   
            if(!emaSlow.IsReady) return;
            var price = data[Symbol].Close;
            var qnty = Portfolio[Symbol].Quantity;
            
            Symbol_price = price;

            ManagePositionsEMA(price);
            BuyOnEMA(data);
            
        }
        
        
        
        private void BuyOnEMA(TradeBars data)
        {
        	var price = data[Symbol].Close;
            var qnty = Portfolio[Symbol].Quantity;
            
            
            
            // Enter long position 
            if( qnty <= 0 && price > emaFast && emaFast> emaSlow) // qnty == 0 &&
            {
            	SetHoldings(Symbol, 1m);
            	Debug("Long "+Symbol+" on " + Time.ToShortDateString()+" at "+price.ToString());
            	Plot("EMA", "Buy", price);
            }
            
            // Enter short position 
            if( qnty >= 0 && price < emaFast && emaFast < emaSlow) //qnty == 0 && 
            {
            	SetHoldings(Symbol, -1m);
            	Debug("Short "+Symbol+" on " + Time.ToShortDateString()+" at "+price.ToString());
            	Plot("EMA", "Sell", price);
            }
        }
        
      
        
        private void ManagePositionsEMA(decimal price)
        {
        	if (Portfolio[Symbol].Quantity > 0)
        	{
        		if (emaFast < emaSlow || price < emaSlow)
	        	{
	        	//		Debug("Close "+Symbol+" on " + Time.ToShortDateString());
	        	//		SetHoldings(Symbol, 0);
	        	//		Plot("EMA", "Sell", price);
	        	}
        	}
        	else if (Portfolio[Symbol].Quantity < 0)
        	{
        		
        	}
        }
        
        public override void OnEndOfDay()
        {

        	Plot("EMA","IsLong", (Portfolio[Symbol].Quantity > 0 ? 5:0));
        	Plot("EMA","IsShort", (Portfolio[Symbol].Quantity < 0 ? 5:0));
        	Plot("EMA", "EMA-20", emaFast);
        	Plot("EMA", "EMA-100", emaSlow);
        	Plot("EMA", "Price", Symbol_price);

        }
    }
}