I run a local algo which has a future added through AddFuture method call, and I simply prints the close price of each timestamp. But whatever the value of fillDataForward is, the missing data are filled with the previous one. This is what I did:

  1. The underlying for the test is “ES”, and the test duration is from 6 Oct 2013 till 7 Oct 2013. The minute data is used by LEAN's unit test project so it is there in the source repo of LEAN.
  2. I find out the concrete future contract symbol in the mapping file, which says it is 2013-12 for open interest data mapping mode.
  3. The data file should then be 20131006_trade.zip, and the entry should be 20131006_es_minute_trade_201312_20131220.csv. Open it and remove some lines.
  4. Run the algo pasted in the post and take a look at the output. There is no “gaps” between data points even I set fillDataForward to false.
namespace Lean.Play
{

    public class Algo: QCAlgorithm
    {
        private Future future;
        private Symbol symbol;

        public override void Initialize()
        {
            SetStartDate(2013, 10, 6);
            SetEndDate(2013, 10, 7);
            SetCash(100000);
            future = AddFuture("es", Resolution.Minute, Market.CME, dataNormalizationMode: DataNormalizationMode.Raw, fillDataForward: false);
            symbol = future.Symbol;
        }

        public override void OnData(Slice slice)
        {
            if(slice.Bars.ContainsKey(symbol))
            {
                var contractYearMonth = future.Mapped.ID.Date.ToString("yyyyMMdd");
                var contractTicker = $"{symbol.ToString()}{contractYearMonth}";
                Log($"{contractTicker}@{Time} ({UtcTime}UTC): price = {slice.Bars[symbol].Price}, oi = {Securities[symbol].OpenInterest}");
            }
            else
            {
                Log($"{Time}: no data");
            }
        }
    }

}