A Rust workspace for deterministic historical replay and real-time market-data infrastructure.
quant-system is intended for Rust developers and quantitative researchers who want to import historical market data, replay normalized trading actions against explicit instrument specifications, embed trading-domain and backtest libraries, or operate a local CTrader quote service. The workspace is under active 0.2.x development.
It is not a complete automated trading platform. It does not currently execute live broker orders, provide restart-safe live strategy orchestration, or implement general cryptocurrency economics.
| Goal | Start here | Readiness |
|---|---|---|
| Run a deterministic signal backtest | Five-minute quick start | Available; a synthetic fixture is included |
| Import and manage historical data | qs-data-preprocess guide |
Available for supported tick and bar exports |
| Embed the pure trade engine | quant-system-core |
Library-only |
| Build an in-process strategy simulation | qs-backtest |
Library-only |
| Parse Telegram message exports | Signal ingestion guide | Compatibility CLI and public adapter library |
| Operate a CTrader quote service | Market-data guide | Requires CTrader FIX credentials |
- Rust 1.88 or newer;
- Linux shared memory (
/dev/shm) for the providedshm://example; - two terminals after the data import finishes.
Import the repository-owned EURUSD fixture:
cargo run -p qs-data-preprocess --bin data-preprocess -- \
--data-dir target/quickstart/market_data \
input tick \
--exchange demo \
--symbol EURUSD \
--tz-offset +00:00 \
examples/backtest-quickstart/EURUSD_ticks.csvStart the backtest server:
cargo run -p qs-backtest-server --bin backtest_server -- \
--config examples/backtest-quickstart/backtest-server.tomlIn another terminal, submit the matching signal stream:
cargo run -p qs-backtest-server --bin tg_backtest -- \
--input examples/backtest-quickstart/signals.jsonl \
--endpoint shm://backtest-quickstart \
--all-symbols \
--exchange demo \
--data-type tick \
--balance 10000 \
--account-currency USD \
--base-lot 0.02 \
--output target/quickstart/result.jsonThe fixture opens a EURUSD long position and closes it one minute later. See the getting-started guide for expected results, endpoint alternatives, and troubleshooting.
historical tick/bar export -> qs-data-preprocess -> partitioned Parquet
|
instrument catalog or symbol compatibility snapshot ----+
|
external producer or qs-signal-parser -> RawSignal -----+
v
Backtest Service
|
v
deterministic replay
|
v
result with pinned instrument manifest
CTrader FIX -> Market Data Service -> snapshots, subscriptions, and alerts
RawSignal is the compatibility boundary between signal producers and replay. qs-instruments provides source-neutral asset IDs, broker- or exchange-qualified instrument identities, exact decimal grids, effective-dated specifications, and immutable catalog snapshots. CTrader is modeled as a trading platform rather than an instrument listing venue. Source-neutral ingestion libraries, strict JSONL codecs, Telegram adapters, and an authenticated webhook provider edge are also available; see Signal ingestion and Architecture.
- Bars are replayed as close-only, zero-spread quotes, so exact intrabar execution is not simulated.
- Source-neutral ingestion is available as embeddable library APIs for JSONL, Telegram, and authenticated webhook sources. A webhook
202 Acceptedresponse confirms admission only; it does not confirm normalization, committed-batch publication, or trading activity. Hosted application processing is not restart-safe, and the committed-batch trading bridge is not implemented. - Live order execution, restart-safe strategy state, and broker order adapters are not included.
- The instrument catalog can describe cryptocurrency assets and model identifiers, but replay does not implement cryptocurrency spot, derivative, fee, funding, margin, or liquidation economics. Registry-backed cryptocurrency rows remain rejected before data access.
- Internal service TCP endpoints have no built-in authentication or TLS and are restricted to loopback by default.
- Historical import accepts the documented MetaTrader-style tab-delimited tick and bar formats, not arbitrary CSV layouts.
- Documentation index
- Getting started
- Backtesting
- Signal ingestion
- Market data
- Architecture
- Roadmap
- RawSignal reference
cargo fmt --all -- --check
cargo test --workspace --all-features --all-targets
cargo clippy --workspace --all-features --all-targets -- -D warningsLicensed under either of:
- Apache License, Version 2.0 (LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0)
- MIT License (LICENSE-MIT or http://opensource.org/licenses/MIT)