MorphIQ LabsCrucible
The operating system for systematic trading

Your strategies.
One trading OS.

Built to preserve time for your models, with explicit risk controls and execution feedback. MorphIQ Crucible is a Rust trading runtime for independent quants. Plug in your strategy through its SDK, with market data, risk controls, and broker execution in one workflow.

Market context
Know what your strategy sees
Accepted inputs, explicit order, and data status.
↓ inputs and trading state
Your strategy
Put your computation to work
Your models and trading rules, through the SDK.
↓ proposed trades · execution feedback ↑
Crucible
Control the trading lifecycle
Risk admission, orders, accounting, and recovery.
compute
More room for your models
correctness
Explicit numerical contracts
control
One owner for trading state
replay
Decisions you can investigate

Your logic. A complete trading workflow.

Keep ownership of your models and trading rules. Bring market data through MorphIQ Feed using your provider credentials; Crucible handles risk controls and execution feedback.

Context in. Intent out. Feedback back.

Receive an event and read-only trading context. Return order intents; use execution feedback to update your model.

Read the callback example and SDK contract →
Rust · Strategy::on_event
fn on_event(
    &mut self,
    ctx: &StrategyContext<'_>,
    event: &Event,
) -> Vec<OrderIntent> {
    match event {
        Event::Market(market) => {
            self.model.propose(ctx, market)
        }
        Event::Fill { fill, .. } => {
            self.model.on_fill(fill);
            vec![]
        }
        _ => vec![],
    }
}
Callback excerpt. model.propose and model.on_fill are your own strategy methods; the SDK supplies the context, events, and intent types.

Connect your broker.

Translate execution commands into broker requests. Return acknowledgements, fills, and order updates; expose broker state for reconciliation.

After an interruption, establish whether the broker accepted a command before deciding whether it can be retried.

Explore the broker adapter contract →
Rust · ExchangeAdapter
// Selected method signatures.
fn submit(
    &mut self,
    cmd: ExecutionCommand,
) -> Result<(), ExecError>;

fn poll_events(
    &mut self,
) -> Vec<ExecutionEvent>;

fn command_outcome(
    &mut self,
    command_id: CommandId,
) -> CommandOutcome;
Selected method signatures from ExchangeAdapter. Connection lifecycle, reconciliation queries, and default implementations are omitted.

~100Kevents / second1.75 µsreplay event-step p99

Options replay with recorded market data, two-leg valuation, and a synchronized trading journal.

Inspect the workload, all five runs, and latency tails →

Feed reading with integrity checks.

BLAKE3 binds checkpoints to consumed history, so a resumed reader can detect changed data.

225 ns / event

Batched checkpoints

Checkpoint every 1,024 events

436 ns / event

Checkpoint every event

Delivery plus checkpoint creation

Median amortized reader costs on warm-cache recorded data. These component measurements are separate from the replay p99 above.

Inspect the workload, recovery costs, and methodology →
Direct calls · explicit state
  1. Accepted dataOrder and validity
  2. Your computationStrategy evaluation
  3. Risk decisionAdmission and limits
Execution handoff

Order dispatch follows the configured durability policy. Broker acknowledgements and fills return as execution feedback.

Direct evaluation

Strategy logic is designed to run inside Crucible’s loop through ordinary Rust calls, keeping the path from accepted input to a risk decision short.

A loop focused on compute

Blocking network calls, storage work, and waits for queue capacity belong outside strategy evaluation. Overload needs explicit behavior.

Read the performance boundaries and measurement approach →

Every number carries a responsibility.

A price feeds a decision. A fill changes a position. A balance constrains the next trade. Numerical behavior and state updates need explicit rules at each boundary.

A financial update must preserve a consistent ledger.

Crucible’s accounting checks exact representability for addition, subtraction, and multiplication. An unsupported result returns an error instead of silently discarding a fractional amount.

  1. Validate the update. Prepare and check the affected financial entries before committing them.
  2. Preserve state on failure. A rejected financial update leaves portfolio state unchanged.
  3. Stop the sequence. The runner blocks further order submission after a reduction failure, retaining the rejected event for reconciliation.
Inspect the accounting contract and assurance scope →

Understand the session. Handle the unexpected.

When a trade is refused, an order partially fills, or a connection drops, the trading record should help you establish what happened and what remains unresolved.

Trace a decision

Connect retained market inputs, strategy proposals, risk decisions, and execution reports. Keep the context behind a trade alongside its outcome.

Reconcile execution

An order sent is not a fill confirmed. Make acknowledgements, partial fills, cancellations, and uncertain broker outcomes explicit.

Replay with context

Reconstruct state from retained events, accepted order, configuration, and compatible code. Use that record to investigate behavior and support recovery.

Explore operating controls and recovery →

The work behind the platform.

Explore MorphIQ Labs' research on numerical correctness, implementation notes, and verification work. Follow the reasoning from a mathematical contract to the software that carries it.

About MorphIQ Labs →

Mathematical depth. Practical purpose.

Crucible brings the MorphIQ focus on numerical correctness, performance, and inspectable results to the trading lifecycle. Explore market data, pricing, analysis, replay, and the numerical foundations for quantitative computation.

Your data providers. One feed interface.

Normalize market events and expose source status through a common feed interface, using your provider credentials.

Explore MorphIQ Feed →

Pricing and risk, from contract to portfolio.

Option values, sensitivities, volatility surfaces, and portfolio exposures.

Explore MorphIQ Risk →

Signal structure across time and scale.

Decomposition, denoising, and cross-asset coherence for market signals.

Explore MorphIQ Wave →

Hidden states. Observable evidence.

Hidden-state modeling, filtering, smoothing, and parameter estimation for time series, with explicit convergence and numerical diagnostics.

Explore MorphIQ Markov →

Market context for your decisions.

Statistical modeling and deep learning for estimates of regime, direction, and relative volatility.

Explore MorphIQ Analytics →

Explicit time. Reproducible sessions.

Deterministic clocks and replay helpers, with formally checked clock, wake, interval, and realignment laws.

Explore MorphIQ Replay →

A verifiable numerical foundation.

Elementary functions, reproducible random streams, and SIMD kernels with documented rounding and error bounds.

Explore MorphIQ Numerics →

What would you build on Crucible?

Tell us about the strategies you want to run, the computation they demand, and the trading infrastructure you want to stop rebuilding.

hello@morphiqlabs.com

Go deeper into the architecture →