Skip to main content

Educational multi-process trading system with order matching

Project description

EduMatcher

Learn how real trading systems work. Build it from first principles.

Category Link
Package PyPI version Python 3.13+
Documentation Documentation
License License: MIT
Release GitHub release
CI/CD Coverage
Code Quality Code style: black Checked with mypy Linting: flake8
Repo URL GitHub

EduMatcher is an educational trading system that teaches market microstructure, matching logic, and exchange architecture through runnable code.

Unlike toy examples, it is designed to be both understandable and fast.

Quick Start

Bootstrap a new session directory and either generate engine_config.yaml with sane defaults, or start from the sample config copied by pm-setup:

pm-setup
pm-config-gen --symbols AAPL MSFT --gateways TRADER01 TRADER02 OPS01:ADMIN --sessions-enabled --output engine_config.yaml
pm-engine --verbose

Alternative: skip pm-config-gen and edit the sample engine_config.yaml that pm-setup already placed in your working directory.

If you run from source, prefix commands with poetry run.

Why EduMatcher?

  • Real exchange mechanics: order books, auctions, clearing, and risk controls
  • Multi-process architecture: gateway, engine, audit, clearing, stats, and tooling
  • Performance-aware implementation: ~60,000 orders/second with microsecond latency
  • Practical protocol design: ALF (ALmost Fix) command language for gateway order entry
  • Strong engineering discipline: type hints, linting, and high test coverage

Key Features

  • Complete lifecycle: order entry, matching, clearing, and audit trail
  • Rich order support: MARKET, LIMIT, STOP, STOP_LIMIT, IOC/FOK, ICEBERG, combo, OCO
  • Market mechanisms: opening/closing auctions and circuit breakers
  • Config-driven behavior via engine_config.yaml which acts as reference data for EduMatcher
  • Message-based process boundaries with strong observability
  • Implement real risk controls such as prioce-collar, kill-switch, circuit-breaker, and mass-cancel

Key Limitations

  • No spread-order books
  • No implied (synthetic) orders
  • No primary-secondary site failover
  • No load balancing
  • Limited replay for participants that lose the connection
  • No index calculations

Performance

EduMatcher does not aim to match venues like NYSE or LSE, but it is still fast for a pure Python educational project.

Latency (engine-only, n=1,000 each)

Order type min (µs) median (µs) P80 (µs) P90 (µs) max (µs)
Limit 8.1 8.5 9.6 10.0 18
Market 8.1 8.5 8.8 9.3 45

Throughput

Metric Value
Max TPS ~60,000 orders/second
Order mix 20% Market, 30% aggressive Limit, 50% passive Limit

Performance note: price-collar and circuit-breaker checks run in the hot path for every match. They are required for realistic risk control and add measurable cost.

Explore the Code

Start with these key areas:

Documentation

Full docs: EduMatcher Documentation

Additional references:

  • How an Exchange Works. This is a generic document meant for SW developers with no previous financial experience. Reading this document will give the necessary background both in finance and the core workings of an exchange.
  • ALF Protocol Appendix. ALF is the Gatewauy human protocol used to send in orders vi the ALF gateway. It is a drastically simplified FIX inspired protocol (ALF = ALmost Fix)
  • Glossary. An extensiv glossary with all commonly used financial terms used in these documents.

Who It's For

  • Computer science students learning systems design and concurrency
  • Finance students learning market microstructure and trading mechanics
  • Developers building exchange technology or trading systems
  • Anyone curious about how modern markets actually work

Contributing

This is an educational project. If you find bugs, improve the documentation, or make other enhancements PRs are welcome!

Citation

If you use this tool in teaching or courses, please cite:

@software{edumatcher,
  title = {EduMatcher},
  author = {Johan Persson},
  year = {2026},
  url = {https://github.com/johan162/edumatcher},
  version = {0.6.0}
}

License

MIT License - see LICENSE.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

edumatcher-0.6.0.tar.gz (139.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

edumatcher-0.6.0-py3-none-any.whl (165.7 kB view details)

Uploaded Python 3

File details

Details for the file edumatcher-0.6.0.tar.gz.

File metadata

  • Download URL: edumatcher-0.6.0.tar.gz
  • Upload date:
  • Size: 139.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/2.4.1 CPython/3.12.3 Linux/6.17.0-1018-azure

File hashes

Hashes for edumatcher-0.6.0.tar.gz
Algorithm Hash digest
SHA256 943e4a00c546d1ed944ef46b47e02dfe6b045966376fe9c453c3315ceee4fe75
MD5 57ef6e016a850eeb2eae1bdca17be5a8
BLAKE2b-256 33caa6ed2765b85de42e62d1fbd1ae59efc497ba9f49a3bc0eb5d8f849cbd92c

See more details on using hashes here.

File details

Details for the file edumatcher-0.6.0-py3-none-any.whl.

File metadata

  • Download URL: edumatcher-0.6.0-py3-none-any.whl
  • Upload date:
  • Size: 165.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/2.4.1 CPython/3.12.3 Linux/6.17.0-1018-azure

File hashes

Hashes for edumatcher-0.6.0-py3-none-any.whl
Algorithm Hash digest
SHA256 2b74c6c1e5c93ba21c7780a88f28eb720d7b1b0a071fb03df318f16bd7e81964
MD5 97a99c31e9cd39e7e125adef0e63328c
BLAKE2b-256 5ae5fc139af9066f5cf861cdd91b807a55cff13b77cd0e229d153fb086553e82

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page