Zipline ignoring orders

I'm running a backtest on daily data from 1998 to current, but Zipline is not filling orders for the first few years. Is there any way to debug why Zipline didn't fill an order? I noticed my historical data has 0 values for Volume until mid-2001, which is the point where it starts filling orders so I suspect this has something to do with it. If this is correct, is there any way to override this behavior?

Thanks

Maybe your slippage model expects volume?

Good idea, but I have the same results if I set the slippage model to NoSlippage.

from zipline.finance import commission, slippage

def initialize(context):
    context.set_commission(us_futures=commission.NoCommission())
    context.set_slippage(us_futures=slippage.NoSlippage())

Any other tips on how to debug this?

Actually you were right. I dug a bit more into the Zipline code and noticed there's a volume check in simulate(). I'm using this code for a custom NoSlippage class:

class NoSlippage(SlippageModel):
    # Copied from slippage.NoSlippage.process_order()
    @staticmethod
    def process_order(data, order):
        return (
            data.current(order.asset, "close"),
            order.amount,
        )

    # Original code from slippage.SlippageModel.simulate()
    def simulate(self, data, asset, orders_for_asset):
        self._volume_for_bar = 0
        volume = data.current(asset, "volume")

        # !!! IGNORE
        # if volume == 0:
        #     return

        # can use the close price, since we verified there's volume in this
        # bar.
        price = data.current(asset, "close")

        # BEGIN
        #
        # Remove this block after fixing data to ensure volume always has
        # corresponding price.
        if pd.isnull(price):
            return
        # END
        dt = data.current_dt

        for order in orders_for_asset:
            if order.open_amount == 0:
                continue

            order.check_triggers(price, dt)
            if not order.triggered:
                continue

            txn = None

            try:
                execution_price, execution_volume = self.process_order(data, order)

                if execution_price is not None:
                    txn = create_transaction(
                        order, data.current_dt, execution_price, execution_volume
                    )

            except LiquidityExceeded:
                break

            if txn:
                self._volume_for_bar += abs(txn.amount)
                yield order, txn