Trading multiple regions with Zipline

Hi, I would like to ingest data for stocks and futures from multiple exchanges, for example Hong Kong and US. The idea is to model Hong Kong stocks with ES futures.

However, when I tried to ingest data for a bundle created from IBKR database, there is this error:
bundle ingestion failed: Multiple currencies in the same bundle are not supported (found currencies HKD, USD)

Is it possible to get away with it and what’s the suggested way to develop this strategy? Thanks.

The reason for the restriction is that Zipline doesn't do any currency conversions and assumes that every security you order is denominated in the same currency as you specify in capital_base. Thus, ordering securities in two different currencies would cause the account ledger to be incorrect because debits and credits would be happening in two different currencies but without currency conversion.

Does your strategy place orders in multiple currencies or only place orders in one currency but use the second currency for modeling securities denominated in the first currency? If you are only placing orders in one currency, then you can limit the bundle to those securities (e.g. Hong Kong stocks) and pull in the ES futures directly from the IBKR database, as described here. If you are placing orders in both currencies, Moonshot might be a better choice, as it handles currency conversions.

The downside of both of these solutions is that they involve moving the futures outside of the bundle, so you lose Zipline's convenient roll handling.

I can imagine that in some cases it might be helpful to allow overriding the warning so that you could get everything in one bundle and just be careful not to place orders in both currencies. Of course, the best solution would be for Zipline to handle ordering multiple currencies in the same strategy.