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 | |
| Documentation | |
| License | |
| Release | |
| CI/CD | |
| Code Quality | |
| Repo URL |
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.yamlwhich 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:
- src/edumatcher/engine/ — Core matching logic and order book
- src/edumatcher/gateway/ — Message handling and order validation
- src/edumatcher/clearing/ — Trade settlement and P&L calculation
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.
ALFis the Gatewauy human protocol used to send in orders vi theALFgateway. It is a drastically simplifiedFIXinspired 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.7.1}
}
License
MIT License - see LICENSE.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file edumatcher-0.7.1.tar.gz.
File metadata
- Download URL: edumatcher-0.7.1.tar.gz
- Upload date:
- Size: 146.3 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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5d32408cad4924bdfda395508b196bc291d1ccd29b1636eb826d7c048c93eeaa
|
|
| MD5 |
48c9f4d27f2874fa351b0dfed2b4c455
|
|
| BLAKE2b-256 |
20446c42f92a96572283a7d792bb7832c6fcfc8bbeb0447b53eaefc1b9a99506
|
File details
Details for the file edumatcher-0.7.1-py3-none-any.whl.
File metadata
- Download URL: edumatcher-0.7.1-py3-none-any.whl
- Upload date:
- Size: 174.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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
eda2f06f17713157079c99f3782bf021ea4d354676d731a9ef59ac2b7c086a91
|
|
| MD5 |
fc1dc7846d0255fde053d1dfd4ff448b
|
|
| BLAKE2b-256 |
a9bbf4f53b5ba3bc61a3b76aee3d039355f994dbeeac64afaa40711156d6fdbd
|