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?


Maybe your slippage model expects volume?

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

from import commission, slippage

def initialize(context):

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()
    def process_order(data, order):
        return (
            data.current(order.asset, "close"),

    # 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):
        # END
        dt = data.current_dt

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

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

            txn = None

                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:

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