OpenTicker is a multi-crate Rust workspace for configurable spot-trading runtime orchestration across equities and crypto.
The project includes:
- a long-running runtime and reconciliation loop
- connector-backed market data and execution abstractions
- an Axum HTTP control plane
- a CLI and Ratatui dashboard
- TOML-based deployment config
- SQLite-backed journaling and recovery
The local control plane surfaces runtime state across nine focused workspaces.
Cross-runtime posture, feed pressure, latency markers, and operator watchpoints in one view.
Per-bot runtime readiness, venue binding, position, and P/L across every configured instance.
Ledger-backed account, bot, and lane ownership with explicit cap, commitment, blocked room, and tradable room semantics.
Recent journal history across signals, intents, risk, orders, fills, positions, reconciliations, and events.
End-to-end trace of one evaluated bot lane cycle across signal, intent, risk, execution, position, capital, and reconciliation.
Registered ticker streams, buffer freshness, attached bots, in-memory dataplane bars, and on-demand connector history.
Request volume, provider event log, and raw request/response payloads at the runtime/provider boundary.
Adapter state distribution, resilience pressure, and per-account connector capability context.
Managed config snapshot, API surface matrix, risk profile catalog, managed accounts, and the full instance catalog.
crates/: workspace crates with explicit boundariesconfig/: local config, templates, and example bot definitionsMakefile: common workspace commands.github/workflows/ci.yml: CI entrypoint
The open-source build currently ships two generic built-in indicators:
sma_crossover: a standard fast-vs-slow simple moving average crossover signalrsi_threshold: a standard RSI threshold filter/context signal
These are enough to exercise the full config, runtime, strategy, HTTP, and test surfaces without carrying private indicator names forward.
Additional indicator descriptors live in the openticker-indicators crate and are compiled in only when the indicators Cargo feature is enabled (see Build Features). Bot configs that reference those indicator types will fail validation with unsupported indicator type on a build without the feature.
openticker-core: shared domain typesopenticker-config: config schema, loading, validation, and effective-config outputopenticker-registry: build-specific catalog and engine construction surfaceopenticker-indicators: extension hook crate for private indicator packsopenticker-instance: config-driven indicator and strategy assemblyopenticker-signals: indicator contracts, shared math helpers, and built-in default/example indicatorsopenticker-strategy: signal-to-intent mappingopenticker-risk: pure risk policyopenticker-data: normalized market-data helpersopenticker-dataplane: stream registry, polling scheduler, and in-memory bar retentionopenticker-execution: venue-neutral execution contractsopenticker-gateway: runtime-facing connector facadeopenticker-ledger: capital ownership and reservationsopenticker-portfolio: account-level ownership and reconciliation helpersopenticker-storage: journal abstraction and storage backendsopenticker-trace: tracing and observability helpersopenticker-connectors: venue adapters and connector registryopenticker-lane: extracted per-lane runtime state and helpersopenticker-runtime: composition root and lifecycle orchestrationopenticker-http: Axum control planeopenticker-cli: operator CLI and dashboardopenticker-testkit: reusable deterministic test helpers
- Install the stable Rust toolchain.
- Copy
config/.env.exampleto.envand set your connector environment variables. - Review
config/openticker.toml,config/accounts/*.toml,config/risk/*.toml, and one of the example bot files underconfig/bots/. - Validate the config.
cargo run -p openticker-cli -- validate-config --config-dir config- Start the service.
cargo run -p openticker-cli -- service run --config-dir config- Open the dashboard in another terminal if needed.
cargo run -p openticker-cli -- dashboardOpenTicker uses a Cargo feature to gate the private indicator pack shipped in openticker-indicators. Features are resolved at compile time — there is no runtime toggle.
- OSS build (default): only
sma_crossoverandrsi_thresholdare registered. - With
indicators: every descriptor exposed byopenticker-indicators::indicator_descriptors()is registered alongside the OSS ones.
Enable it however you build:
# Local
cargo build --release -p openticker-cli --features indicators
cargo run -p openticker-cli --features indicators -- validate-config --config-dir config
# Docker (direct)
docker build --build-arg OPENTICKER_FEATURES=indicators -t openticker .
# docker compose — via shell env or .env at the repo root
OPENTICKER_FEATURES=indicators docker compose buildLeave OPENTICKER_FEATURES unset (or empty) for the pure OSS build.
The active on-disk layout is:
config/openticker.tomlconfig/accounts/*.tomlconfig/risk/*.tomlconfig/bots/*.toml
Each bot binds together:
- market and symbols
- timeframe
- account
- data connector
- execution connector
- strategy
- signal mode
- one or more indicator instances
- optional warmup override
- execution constraints
- risk profile
Workspace commands:
make fmtmake fmt-checkmake checkmake buildmake testmake lintmake clippymake fixmake ci
Direct cargo equivalents:
cargo check --workspacecargo build --workspacecargo test --workspacecargo lintcargo clippy --workspace --all-targets --all-features
- The workspace is crate-separated, but some crates are still internally monolithic.
openticker-runtimeremains the largest concentration of orchestration logic.openticker-configstill carries some connector capability knowledge that overlaps withopenticker-connectors.- The public repository intentionally excludes internal planning docs, private indicator source material, and local agent tooling.
OpenTicker is an open-source software project published by Aether Holdings in connection with its work in stocks, trading, AI, and intelligence. It is provided for development, research, testing, and educational use only.
Nothing in this repository is financial, investment, legal, tax, or compliance advice, or an offer, solicitation, or recommendation to buy, sell, or hold any asset.
Trading and investing involve substantial risk, including the risk of total capital loss. If you use this software, you do so at your own risk and are responsible for strategy validation, paper testing, operational safeguards, and compliance with all applicable laws and venue or broker rules.
For the full statement, see DISCLAIMER.md.








