Ce projet consiste en un moteur de confrontation d'ordres (Matching Engine) haute performance développé en C++ avec une interface graphique Qt6. Il simule le comportement d'une bourse (type Euronext) en gérant des instruments financiers, un carnet d'ordres en temps réel et des algorithmes d'exécution.
Le projet suit une structure modulaire pour séparer la logique métier du moteur de l'interface utilisateur.
MatchingEngine : Le cœur du système qui gère le thread d'exécution, le cycle de vie des ordres et les statistiques de trading.
OrderBook : Gère les priorités de prix et de temps (Price-Time Priority) via des structures de données optimisées.
InstrumentManager : Responsable du référentiel des actifs et de la garantie d'unicité des instruments.
UI (Qt6) : Interface interactive permettant la saisie d'ordres, la création d'instruments et la visualisation de la profondeur de marché.
- Gestion des Instruments
Création dynamique d'instruments financiers (ISIN, MIC, Devise).
Contrôle d'unicité strict basé sur un tuple (ID, Marché, Devise) pour éviter les doublons.
Paramétrage fin : taille de lot (lot size) et précision décimale des prix.
- Moteur de Confrontation (Matching)
Priorité Prix-Temps : Les ordres sont classés par meilleur prix, puis par horodatage de réception.
Types d'ordres : Support des ordres LIMIT et MARKET.
Validité : Gestion des ordres DAY (session du jour) et GTD (Good Till Date) avec un système de nettoyage automatique des ordres expirés.
- Interface et Statistiques
Graphique de profondeur : Visualisation "Live" des courbes de l'offre et de la demande (Bid/Ask).
Dashboard : Monitoring en temps réel du volume quotidien, du nombre de trades et du spread.
Validation : Système robuste empêchant la saisie de prix ou de quantités invalides selon les spécifications de l'instrument. 💻 Détails Techniques Précision et Sécurité
Robustesse Numérique : Utilisation d'une tolérance de 10 −8 pour les validations de prix afin de pallier les imprécisions des types flottants.
Thread-Safety : Implémentation de std::mutex et std::lock_guard dans l' OrderBook pour permettre des lectures par l'UI pendant que le moteur de matching travaille en arrière-plan.
Performance : Utilisation de std::map triées pour assurer un accès aux meilleurs prix en temps logarithmique O(logn).
EURONEXT-TRADING-ENGINE/
├── MatchingEngine/
│ ├── include/
│ │ ├── CreateInstrument.h
│ │ ├── Instrument.hpp
│ │ ├── InstrumentManager.hpp
│ │ ├── MainWindow.h
│ │ ├── MatchingEngine.hpp
│ │ ├── Order.hpp
│ │ ├── OrderBook.hpp
│ │ ├── Trading.hpp
│ │ └── Utils.hpp
│ └── src/
│ ├── CreateInstrumentWidget.cpp
│ ├── Instrument.cpp
│ ├── InstrumentManager.cpp
│ ├── MainWindow.cpp
│ ├── Main.cpp
│ ├── MatchingEngine.cpp
│ ├── Order.cpp
│ ├── OrderBook.cpp
│ └── Utils.cpp
└── CMakeLists.txt
Prérequis :
Compilateur C++17 ou supérieur.
Framework Qt6 (Core, Widgets, Charts).
CMake 3.16+.
Compilation :
mkdir build && cd build
cmake ..
make
Exécution :
./MatchingEngine
- Unique instrument identification
- Market and currency support
- State management (ACTIVE/INACTIVE/SUSPENDED/DELISTED)
- Price level organization
- Time priority queue
- Efficient order matching
- Continuous operation
- Thread-safe order processing
- Real-time statistics tracking
- Real-time matching capabilities
- Nanosecond precision timestamps
- Atomic operations for thread safety
- Efficient memory management
- GESLIN Louis
- VICHET Matthieu
- COULLOC'H Eloide
This project is licensed under the MIT License - see the LICENSE.md file for details
- Built with modern C++ features
- Inspired by real-world trading systems
- Based on EURONEXT trading principles