Overall Statistics
Total Trades
0
Average Win
0%
Average Loss
0%
Compounding Annual Return
0%
Drawdown
0%
Expectancy
0
Net Profit
0%
Sharpe Ratio
0
Loss Rate
0%
Win Rate
0%
Profit-Loss Ratio
0
Alpha
0
Beta
0
Annual Standard Deviation
0
Annual Variance
0
Information Ratio
0
Tracking Error
0
Treynor Ratio
0
Total Fees
$0.00
using System;
using System.Collections;
using System.Collections.Generic;

namespace QuantConnect {

    using QuantConnect.Securities;
    using QuantConnect.Models;

    public class ExponentialMovingAverage
    {
      private decimal _period;
      private decimal _ema;
      
      private int _samples;
      
      public decimal EMA
      {
      	get{return _ema;}
      }
      
      public ExponentialMovingAverage(decimal period)
      {
      	
      	this._period = period;
      	this._samples = 0;
      	
      }
      
      public decimal AddSample(decimal price)
      {
      	
      	if (_samples == 0)
      	{
      		_ema = price;
      	}
      	else
      	{
      		_ema = (1/_period)*price+((_period-1)/_period)*_ema;
      	}
      	
      	
      	_samples++;
      	return _ema;
      	
      }
      
      
    }
    

}                        
using System;
using System.Linq;
using QuantConnect.Indicators;
using QuantConnect.Models;

namespace QuantConnect
{
	using QuantConnect.Securities;
	using QuantConnect.Models;
	
	public partial class MovingAverageDemo : QCAlgorithm, IAlgorithm
	{
		string symbol = "SPY";
		
		ExponentialMovingAverage emaFast = new ExponentialMovingAverage(10);
		ExponentialMovingAverage emaSlow = new ExponentialMovingAverage(50);
		
		
		
		public override void Initialize()
		{
			
			SetStartDate(2014, 01, 01);
			SetEndDate(2014, 04, 01);
			SetCash(50000);
			AddSecurity(SecurityType.Equity, symbol, Resolution.Minute);
			
		}
		
		public void OnTradeBar(Dictionary<string, TradeBar> data)
		{
			decimal price = data[symbol].Close;
			emaFast.AddSample(price);
			emaSlow.AddSample(price);
			
			if (emaFast.EMA > emaSlow.EMA)
			{
				Order(symbol, 100);
			}
			else if (emaFast.EMA < emaSlow.EMA)
			{
				Order(symbol, -100);
			}
		}
		
	}
}