Concepts

OpenPit separates pre-trade validation from order submission. The engine does not send orders to venues; it evaluates an order, returns business rejects or a reservation, and leaves external I/O to the caller.

Engine

openpit.Engine is the runtime object that owns policy instances. Build it once with openpit.Engine.builder(), choose a synchronization policy, and reuse it under the matching call pattern.

  • full_sync() allows concurrent calls on the same engine handle.

  • no_sync() keeps the handle on the OS thread that created it.

  • account_sync() allows concurrent calls when the caller pins each account to one processing chain, so calls for the same account are never concurrent.

Start stage

Start-stage checks run during engine.start_pre_trade(order=...). They are for fast checks that must run before the main-stage request exists, such as payload validation, rate limiting, or kill switches.

Start-stage checks return normal business rejects aggregated from all registered policies. They do not register rollback mutations.

Main stage

The start stage returns openpit.pretrade.Request on success. Calling request.execute() runs main-stage checks. These policies can return rejects and register openpit.Mutation objects.

If any main-stage check rejects, the engine rolls registered mutations back. If all policies pass, the engine returns a Reservation.

Reservation

A reservation is explicit and single-use. Call commit() only after the caller knows the order should become durable, for example after it is accepted by the next downstream component. Call rollback() when the caller decides not to send or cannot send the order.

Post-trade feedback

After execution, pass openpit.ExecutionReport objects to engine.apply_execution_report(report=...). Policies use reports to update state such as P&L accumulators and may report that a kill switch is active.

Account adjustments

engine.apply_account_adjustment(...) validates non-trading account state changes, such as balance corrections or direct position updates. The input is a batch and the result reports either success or the first failing adjustment.