I've reached about the 14 min mark of the tutorial video, and he successfully backtests. I get an error at the line I italicized saying there is no way to override, but the error doesn't show when he runs it in the tutorial. Removing "override" allows the program to compile and backtest, but no trades are executed. My only extensive programming experience is in Matlab, which is basically psuedo-code by comparison to this. I don't know what most of the code is for or what it is doing, including override.

Main:

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 override 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);
            }
        }
    }
}

ExponentialMovingAverage:

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;         
      }     
    }

}