Skip to content

arcreane/finance-matching-engine

Repository files navigation

EURONEXT Trading Engine 🏢

C++ Build Status License Version

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.

🚀 Architecture du Projet

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é.

🛠 Fonctionnalités Clés

  1. 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.

  1. 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.

  1. 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).

Project Structure 💁

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

⚙️ Installation

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

Key Components 🔑

Instrument Management

  • Unique instrument identification
  • Market and currency support
  • State management (ACTIVE/INACTIVE/SUSPENDED/DELISTED)

Order Book

  • Price level organization
  • Time priority queue
  • Efficient order matching

Matching Engine

  • Continuous operation
  • Thread-safe order processing
  • Real-time statistics tracking

Performance Metrics 📊

  • Real-time matching capabilities
  • Nanosecond precision timestamps
  • Atomic operations for thread safety
  • Efficient memory management

Authors ✨

  • GESLIN Louis
  • VICHET Matthieu
  • COULLOC'H Eloide

License 📝

This project is licensed under the MIT License - see the LICENSE.md file for details

Acknowledgments 🙏

  • Built with modern C++ features
  • Inspired by real-world trading systems
  • Based on EURONEXT trading principles

Made with ❤️ by EFREI' Students

About

finance-matching-engine created by GitHub Classroom

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 3

  •  
  •  
  •