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.Generic;
using QuantConnect.Data;
using QuantConnect.Data.Market;
using System.Linq;
using QuantConnect.Interfaces;
using QuantConnect.Securities;
using QuantConnect.Orders;
using QuantConnect.Data.Consolidators;

namespace QuantConnect.Algorithm.CSharp
{
    public class TestAlgo : QCAlgorithm
    {
    	// S&P 500 EMini futures
        private const string RootSP500 = Futures.Indices.SP500EMini;
        public Symbol SP500 = QuantConnect.Symbol.Create(RootSP500, SecurityType.Future, Market.USA);
        
        
		public RollingWindow<decimal> Open;
		public RollingWindow<decimal> Close;
		public RollingWindow<decimal> High;
		public RollingWindow<decimal> Low; 
		public RollingWindow<decimal> Volume;
		
        public override void Initialize() 
        {
            SetStartDate(2010, 01, 08);
            SetEndDate(2019, 10, 10);
            SetCash(1000000);

            var futureSP500 = AddFuture(RootSP500, Resolution.Minute);
            // set our expiry filter for this futures chain
            futureSP500.SetFilter(TimeSpan.Zero, TimeSpan.FromDays(182));

			Open = new RollingWindow<decimal>(4);
			Low = new RollingWindow<decimal>(4);
			High = new RollingWindow<decimal>(4);
			Close = new RollingWindow<decimal>(4);
			Volume = new RollingWindow<decimal>(4);

        }

        public override void OnData( Slice data )
        
        {
        	if(data.ContainsKey("futureSP500")) 
        	{
        		Close.Add(data["futureSP500"].Close);
        		Open.Add(data["futureSP500"].Open);
        		High.Add(data["futureSP500"].High);
        		Low.Add(data["futureSP500"].Low);
        		Volume.Add(data["futureSP500"].Volume);
		
				var CurrentClose = Close[0];
				var OneBarAgoClose = Close[1];
				var TwoBarAgoClose = Close[2];
				var ThreeBarAgoClose = Close[3];

				var CurrentOpen = Open[0];
				var OneBarAgoOpen = Open[1];
				var TwoBarAgoOpen = Open[2];
				var ThreeBarAgoOpen = Open[3];
		
				var CurrentHigh = High[0];
				var OneBarAgoHigh = High[1];
				var TwoBarAgoHigh = High[2];
				var ThreeBarAgoHigh = High[3];
		
				var CurrentLow = Low[0];
				var OneBarAgoLow = Low[1];
				var TwoBarAgoLow = Low[2];
				var ThreeBarAgoLow = Low[3];
		
				var CurrentVolume = Volume[0];
				var OneBarAgoVolume = Volume[1];
				var TwoBarAgoVolume = Volume[2];
				var ThreeBarAgoVolume = Volume[3];
    
				if (CurrentClose > OneBarAgoClose)
            		{
                    	MarketOrder("futureSP500", 10);
                    }

				else
					{
						Liquidate();
					}
					
        	}
        }
    }
}
namespace QuantConnect.Algorithm.Framework.Selection {

	public class FuturesUniverseSelectionModel : FutureUniverseSelectionModel{
		public FuturesUniverseSelectionModel(Func<DateTime, IEnumerable<Symbol>> futureChainSymbolSelector)
			:base(TimeSpan.FromDays(1), futureChainSymbolSelector){
			}
		public FutureFilterUniverse filter(FutureFilterUniverse filter){
			return filter.Expiration(TimeSpan.FromDays(0), TimeSpan.FromDays(90))
                      .OnlyApplyFilterAtMarketOpen();
		}
	}

}