-
Notifications
You must be signed in to change notification settings - Fork 1
Architecture
Public architecture of OpenPit and its integration model.
-
Embeddable: no separate service, no network hop, no runtime requirement -
Deterministic: the same order, policy state, and policy set produce the same decision -
Fail-safe by default: unfinalized reservations roll back automatically -
Financially precise: domain values use exact decimal semantics throughparamtypes
-
Domain values: prices, quantities, pnl, cash flow, volume, side, leverage Go:openpit/paramPython:openpit.paramC++:openpit::paramRust:openpit::paramC:OpenPitParam*value handles and structs -
Core entities: order, execution report, account adjustment, instrument, engine Go: package rootopenpitPython: package root andopenpit.coreC++:openpit::modelandopenpit::EngineRust: crate root andopenpit::coreC:OpenPitOrder,OpenPitExecutionReport, andOpenPitEngine -
Pre-trade pipeline: policies, rejects, requests, reservations, reports Go:openpit/pretradePython:openpit.pretradeC++:openpit::pretradeRust:openpit::pretradeC:OpenPitPretrade*handles and functions
Engine coordinates the public pre-trade lifecycle:
- Build an engine.
- Run the
start stage. - Execute the deferred request.
- Finalize the reservation.
- Apply post-trade feedback.
- Optionally validate non-trade operation (NTO) batches through
apply account adjustments.
Current engine behavior:
- Policy names must be unique across both stages.
- Threading capability of the engine handle follows from the chosen sync policy. See Threading Contract.
- A deferred request or reservation depends on the engine instance that created it.
- Account-adjustment batch validation is atomic: the first reject aborts the whole batch.
OpenPit currently exposes public integration models for orders, execution reports, and non-trading account adjustments:
- C++ exposes fixed model value types and client-payload adapter templates:
openpit::model::Order,openpit::model::ExecutionReport, andopenpit::pretrade::StartPolicyAdapter/openpit::pretrade::PolicyAdapter. Adapter policies choose an explicit cast mode so dynamic-boundary checks are visible at the call site. - Go exposes fixed public model records plus generic policy interfaces for caller-defined payloads.
- Python exposes fixed public record models:
openpit.Order,openpit.ExecutionReport, andopenpit.AccountAdjustment. - Rust can evaluate caller-defined order and execution-report types directly
when they implement the required capability traits. Order traits include
HasTradeAmount,HasOrderPrice,HasInstrument, andHasSide. Report traits includeHasPnl,HasFee, andHasInstrument. Policies declare only the traits they actually use, so a policy that only inspects trade amount and price requiresO: HasTradeAmount + HasOrderPriceand is compatible with any order type that provides those two capabilities. - C exposes POD views and opaque handles for ABI-stable embedders.
All SDKs use the same staged flow and the same standard reject shape.
Language-specific custom-payload guidance is documented in the corresponding Custom Go Types, Custom Python Types, Custom JS Types, Custom Cpp Types, and Custom Rust Types pages.
OpenPit separates early admission checks from main-stage checks that may reserve state. The start stage stops at the first reject; the main stage evaluates every registered policy, aggregates rejects, and rolls back collected mutations if any reject is produced.
See Pre-trade Pipeline for the full lifecycle, return types, and code examples.
Account adjustment validation runs as an atomic batch: deterministic
traversal by batch and policy registration order, first reject aborts,
all-or-nothing outcome.
See Account Adjustments for the data model and rollback rules.
Main-stage policies do not finalize state directly. They emit Pre-trade mutation
pairs that the engine applies later.
Current public mutation kinds are:
- Reserve notional for a settlement asset
- Set a kill-switch state
OpenPit is intentionally narrow:
- It is a pre-trade engine, not an OMS or EMS.
- It does not provide persistence or external data sources.
- It does not provide venue connectivity.
- Built-in policies may participate in the start, main, post-trade, and account-adjustment stages according to their state and reconciliation needs.
- Getting Started: First engine construction
- Custom Go Types: Typed Go client payloads
- Custom Python Types: Python model subclasses
- Custom JS Types: Typed JavaScript policy payloads
- Custom Cpp Types: C++ polymorphic client payloads
- Custom Rust Types: Capability traits and wrapper authoring
- Pre-trade Pipeline: Request and reservation lifecycle
- Account Adjustments: Non-trade operation (NTO) batch model and semantics
- Policies: Built-in controls and custom policy hooks
- Domain Types: Typed financial values used by the engine