Hi Everyone !

I get this runtime error :Object reference not set to an instance of an object

Is appear at a certain date (March 2012), if i skip the date the error disappear. Is it possible that you have a Data bug or other ?

I put in the code many check != null and !=0, but nothing to do.

System.NullReferenceException: Object reference not set to an instance of an object
at Test.TestAlgo.OnData (QuantConnect.Data.Slice slice) [0x00165] in :0
at QuantConnect.Lean.Engine.AlgorithmManager.Run (QuantConnect.Packets.AlgorithmNodePacket job,
QuantConnect.Interfaces.IAlgorithm algorithm,
QuantConnect.Lean.Engine.DataFeeds.ISynchronizer synchronizer,
QuantConnect.Lean.Engine.TransactionHandlers.ITransactionHandler transactions,
QuantConnect.Lean.Engine.Results.IResultHandler results,
QuantConnect.Lean.Engine.RealTime.IRealTimeHandler realtime,
QuantConnect.Lean.Engine.Server.ILeanManager leanManager,
QuantConnect.Lean.Engine.Alpha.IAlphaHandler alphas,
System.Threading.CancellationToken token) [0x0139a] in Lean.Engine.Alpha.IAlphaHandler alphas,
System.Threading.CancellationToken token) [0x0139a] in :0

Algo :

namespace Test
{
public class TestAlgo : QCAlgorithm
{
public RollingWindow<decimal> BidPriceSP500 = new RollingWindow<decimal>(4);
public RollingWindow<decimal> AskPriceSP500 = new RollingWindow<decimal>(4);
public RollingWindow<decimal> VolumeSP500 = new RollingWindow<decimal>(4);

public RollingWindow<decimal> BidPriceDOW30 = new RollingWindow<decimal>(4);
public RollingWindow<decimal> AskPriceDOW30 = new RollingWindow<decimal>(4);
public RollingWindow<decimal> VolumeDOW30 = new RollingWindow<decimal>(4);

public RollingWindow<decimal> BidPriceNSQ100 = new RollingWindow<decimal>(4);
public RollingWindow<decimal> AskPriceNSQ100 = new RollingWindow<decimal>(4);
public RollingWindow<decimal> VolumeNSQ100 = new RollingWindow<decimal>(4);


public const string TestalgoSP500 = Futures.Indices.SP500EMini;
public Symbol SP500 = QuantConnect.Symbol.Create(TestalgoSP500, SecurityType.Future, Market.USA);

public const string TestalgoDOW30 = Futures.Indices.Dow30EMini;
public Symbol DOW30 = QuantConnect.Symbol.Create(TestalgoDOW30, SecurityType.Future, Market.USA);

public const string TestalgoNSQ100 = Futures.Indices.NASDAQ100EMini;
public Symbol NSQ100 = QuantConnect.Symbol.Create(TestalgoNSQ100, SecurityType.Future, Market.USA);

public override void Initialize()
{
SetStartDate(2012, 01, 01);
SetEndDate(DateTime.Now);
SetCash(1000000);

var SP500 = AddFuture(TestalgoSP500, Resolution.Minute);
SP500.SetFilter(TimeSpan.Zero, TimeSpan.FromDays(182));

var DOW30 = AddFuture(TestalgoDOW30, Resolution.Minute);
DOW30.SetFilter(TimeSpan.Zero, TimeSpan.FromDays(182));

var NSQ100 = AddFuture(TestalgoNSQ100, Resolution.Minute);
NSQ100.SetFilter(TimeSpan.Zero, TimeSpan.FromDays(182));

var benchmark = AddEquity("SPY");
SetBenchmark(benchmark.Symbol);


Schedule.Event().Every(DayOfWeek.Friday).At(15, 59).Run(() =>
Schedule.Event().Every(DayOfWeek.Friday).At(15, 60).Run(() =>
Schedule.Event().Every(DayOfWeek.Friday).At(16, 00).Run(() =>
{
foreach (var contract in Portfolio.Values)
{
if (contract.HoldStock)
{
MarketOrder(contract.Symbol, -contract.Quantity, tag: "Liquidate Market Close");
}

}

})));
}

public override void OnData(Slice slice)
{
if (!Portfolio.Invested)
{
foreach (var chain in slice.FutureChains)
{
var contractSP500 = (from futuresContract in chain.Value.OrderBy(x => x.Symbol == "ES").ThenBy(x => x.Expiry)
where futuresContract.Expiry > Time.Date.AddDays(90)
select futuresContract).FirstOrDefault();

var contractDOW30 = (from futuresContract in chain.Value.OrderBy(x => x.Symbol == "YM").ThenBy(x => x.Expiry)
where futuresContract.Expiry > Time.Date.AddDays(90)
select futuresContract).FirstOrDefault();

var contractNSQ100 = (from futuresContract in chain.Value.OrderBy(x => x.Symbol == "NQ").ThenBy(x => x.Expiry)
where futuresContract.Expiry > Time.Date.AddDays(90)
select futuresContract).FirstOrDefault();


BidPriceSP500.Add(contractSP500.BidPrice);
AskPriceSP500.Add(contractSP500.AskPrice);
VolumeSP500.Add(contractSP500.Volume);

BidPriceDOW30.Add(contractDOW30.BidPrice);
AskPriceDOW30.Add(contractDOW30.AskPrice);
VolumeDOW30.Add(contractDOW30.Volume);

BidPriceNSQ100.Add(contractNSQ100.BidPrice);
AskPriceNSQ100.Add(contractNSQ100.AskPrice);
VolumeNSQ100.Add(contractNSQ100.Volume);

var LongSP500 = BidPriceSP500[0] > AskPriceSP500[0];
var LongDOW30 = BidPriceDOW30[0] > AskPriceDOW30[0];
var LongNSQ100 = BidPriceNSQ100[0] > AskPriceNSQ100[0];

// This check is needed to prevent errors from accessing entries that do not exist
if (!BidPriceSP500.IsReady || !AskPriceSP500.IsReady || !VolumeSP500.IsReady || BidPriceSP500 != null || AskPriceSP500 != null || VolumeSP500 != null || BidPriceSP500[0] != 0 || AskPriceSP500[0] != 0 || VolumeSP500[0] != 0)
continue;

Debug("BidPriceSP500 :" + BidPriceSP500[0]);
Debug("AskPriceSP500 :" + AskPriceSP500[0]);
if (LongSP500)
if (contractSP500.Symbol.StartsWith("ES") || contractSP500 != null || BidPriceSP500[0] != null || AskPriceSP500[0] != null || VolumeSP500[0] != null || BidPriceSP500[0] != 0 || AskPriceSP500[0] != 0 || VolumeSP500[0] != 0)
MarketOrder(contractSP500.Symbol, 10);
Debug("contract en cours : " + chain.Value.Symbol);
Debug("contract en cours : " + contractSP500);

if (!BidPriceDOW30.IsReady || !AskPriceDOW30.IsReady || !VolumeDOW30.IsReady || BidPriceDOW30[0] != null || AskPriceDOW30[0] != null || VolumeDOW30[0] != null || BidPriceDOW30[0] != 0 || AskPriceDOW30[0] != 0 || VolumeDOW30[0] != 0)
continue;

Debug("BidPriceDOW30 :" + BidPriceDOW30[0]);
Debug("AskPriceDOW30 :" + AskPriceDOW30[0]);
if (LongDOW30)
if (contractDOW30.Symbol.StartsWith("YM") || contractDOW30 != null || BidPriceDOW30[0] != null || AskPriceDOW30[0] != null || VolumeDOW30[0] != null | BidPriceDOW30[0] != 0 || AskPriceDOW30[0] != 0 || VolumeDOW30[0] != 0)
MarketOrder(contractDOW30.Symbol, 10);
Debug("contract en cours : " + chain.Value.Symbol);
Debug("contract en cours : " + contractDOW30);

if (!BidPriceNSQ100.IsReady || !AskPriceNSQ100.IsReady || !VolumeNSQ100.IsReady || BidPriceNSQ100[0] != null || AskPriceNSQ100[0] != null || VolumeNSQ100[0] != null || BidPriceNSQ100[0] != 0 || AskPriceNSQ100[0] != 0 || VolumeNSQ100[0] != 0)
continue;

Debug("BidPriceNSQ100 :" + BidPriceNSQ100[0]);
Debug("AskPriceNSQ100 :" + AskPriceNSQ100[0]);
if (LongNSQ100)
if (contractNSQ100.Symbol.StartsWith("NQ") || contractNSQ100 != null || BidPriceNSQ100[0] != null || AskPriceNSQ100[0] != null || VolumeNSQ100[0] != null || contractNSQ100 != null || BidPriceNSQ100[0] != 0 || AskPriceNSQ100[0] != 0 || VolumeNSQ100[0] != 0)
MarketOrder(contractNSQ100.Symbol, 10);
Debug("contract en cours : " + chain.Value.Symbol);
Debug("contract en cours : " + contractNSQ100);

}
}}
}
}