Three things it will not do
Send a slice a venue will reject
Too small, or below the venue’s minimum order value.
Lose part of your order
Requested always equals allocated plus unallocated, with a reason.
Use a venue that went quiet
Stale or offline venues are skipped and named.
How far it will sweep
As far asdepth — the number of price levels you asked each venue for. Whatever the book cannot fill comes back as unallocated, with a reason, rather than SORY digging deeper than you configured.
Slices too small to send
Venues have minimum order sizes. If one venue’s share lands under its minimum, that venue is dropped and the split is worked out again without it — so the quantity moves somewhere else instead of disappearing. Anything genuinely unplaceable comes back asunallocated.
Seeing the split before you send
Place the order withdry_run=True. Everything runs — routing, validation, per-venue rounding, building each venue order — and nothing leaves the process. The plan is on the order that comes back.
exchanges, ask what the order would cost with it in the book, and compare. Live, the same venue is excluded with its reason attached. Market data is the one thing a dry run still needs: a venue that serves no book without credentials has nothing to route against, and the book says so.
plan is None only when there was no routing decision to make: a limit order, or a market order naming a single venue. Otherwise you get back:
order.children holds the venue orders that would have gone out, already rounded to each venue’s tick and lot size — so a dry run shows you the real thing, not an approximation of it.
