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 MathNet.Numerics.Statistics;
using Python.Runtime;

namespace QuantConnect.Algorithm.CSharp
{
    public class EmptyVolumeDetection : QCAlgorithm
    {
        public override void Initialize()
        {
        	SetStartDate(2009, 06, 01);
            SetEndDate(2020, 01, 01);
            SetCash(3000);
            SetTimeZone(TimeZones.NewYork);
            
            // NB: note that fill-forward does not actually fill-forward while market is closed!
			var futureES = AddFuture(Futures.Indices.SP500EMini, Resolution.Minute, fillDataForward: false);
			futureES.SetFilter(x => x.FrontMonth());
        }

     	private Symbol currentContract = null;
     	private TradeBarConsolidator consolidator = null;
     	private HashSet<Symbol> seenFrontMonths = new HashSet<Symbol>();
     	
        public override void OnData(Slice slice) {
			foreach (var chain in slice.FutureChains) {	
				foreach (var contract in chain.Value) {
					// Second clause prevents buggy back-and-forth flipping of front month in early 2018
			    	if (currentContract != contract.Symbol && !seenFrontMonths.Contains(contract.Symbol)) {
						Debug($"Cur: {currentContract}");
						Debug($"New: {contract.Expiry}\t{contract.UnderlyingSymbol}\t{contract.Symbol}");

			    		currentContract = contract.Symbol;
			    		seenFrontMonths.Add(contract.Symbol);
					}
				}
			}
			
			if (!slice.Bars.ContainsKey(currentContract))
				return;
						
			var b = slice.Bars[currentContract];
		
			if (b.Volume <= 0M) {
				Debug($"{b.Time.ToString("yyyyMMdd HHmm")} {b.Open} {b.High} {b.Low} {b.Close} {b.Volume}");
			}
        }
    }
}