Overall Statistics
Total Trades
24
Average Win
9.84%
Average Loss
-4.24%
Compounding Annual Return
14.048%
Drawdown
13.400%
Expectancy
1.115
Net Profit
62.087%
Sharpe Ratio
0.963
Probabilistic Sharpe Ratio
42.439%
Loss Rate
36%
Win Rate
64%
Profit-Loss Ratio
2.32
Alpha
0.053
Beta
0.442
Annual Standard Deviation
0.122
Annual Variance
0.015
Information Ratio
-0.209
Tracking Error
0.134
Treynor Ratio
0.265
Total Fees
$1504.05
using QuantConnect.Securities.Future;

namespace QuantConnect
{
	public partial class BootCampTask : QCAlgorithm
    {
    	private decimal notionalValue;
    	private decimal contractsToBuy;
    	private FuturesChain contractChain;
    	private Future future;
    	private FuturesContract liquidContract;
    	
    	public override void Initialize()
    	{
    		SetStartDate(2009, 5, 1);
        	SetEndDate(2012, 12, 31);
        	SetCash(1000000); 
        	AddEquity("SPY");
        	future = AddFuture("NQ");
        	future.SetFilter(0, 190);
        	
        	Schedule.On(DateRules.EveryDay("SPY"), TimeRules.AfterMarketOpen("SPY", 30), () =>
            {
            	if(liquidContract != null)
            	{
		            var oldFuture = (Future)Securities[liquidContract.Symbol];
	        		if (oldFuture.Holdings.Quantity != 0)
	            	{
	            		//MarketOrder(liquidContract.Symbol, -oldFuture.Holdings.Quantity);
	            	}
            	}
            	
            	if(contractChain != null && contractChain.Count() >= 1)
            	{
	                var contracts = contractChain.OrderBy(x => x.Expiry);
	            	liquidContract = contracts.First();
	            	
	            	var oldContract = liquidContract;
	            	
	            	if (liquidContract.Expiry <= Time.Date.AddDays(8) & contractChain.Count() >= 2)
	            	{
	            		liquidContract = contracts.Skip(1).First();
	            	}
	            	
	            	var ContractFuture = (Future)Securities[liquidContract.Symbol];
	            	if (ContractFuture.Holdings.Quantity == 0)
	            	{
	            		var oldFuture = (Future)Securities[oldContract.Symbol];
	        			if (oldFuture.Holdings.Quantity != 0)
	            		{
	            			MarketOrder(oldContract.Symbol, -oldFuture.Holdings.Quantity);
	            		}
	            		
	            		decimal midPrice = (ContractFuture.AskPrice + ContractFuture.BidPrice)/2;
                		
                		var multiplier = ContractFuture.SymbolProperties.ContractMultiplier;
                		var notionalValue = midPrice * multiplier;
                		
	            		var MaxSafeQty = Portfolio.TotalPortfolioValue / notionalValue; // SHOULD NEVER GET MARGIN CALLED!!!
	            		MaxSafeQty = decimal.Round(MaxSafeQty);
	            		
	            		Debug("Contract Multiplier: " + ContractFuture.SymbolProperties.ContractMultiplier);
	            		
	            		MarketOrder(liquidContract.Symbol, MaxSafeQty);
	            	}
            	}
            
            });
            
            Schedule.On(DateRules.EveryDay("SPY"), TimeRules.AfterMarketOpen("SPY", 60), () =>
            {
            	
            });
    	}
    	
    	public override void OnMarginCallWarning()
    	{
    		Error("You received a Margin Call Warning! The assets will be liquidated to cover losses.");
        }
    	
    	public void OnData(Slice slice)
    	{
    		FuturesChain chain;
    		if (slice.FuturesChains.TryGetValue(future.Symbol, out chain))
			{
			   contractChain = chain;
			}
    	}
    }
}