CryptoTrade est une plateforme de trading de cryptomonnaies conçue pour supporter un très grand volume d’ordres et de transactions en temps réel, tout en garantissant la cohérence des données, la performance et la traçabilité.
La base de données PostgreSQL constitue le cœur du système et assure :
- La gestion des utilisateurs et de leurs portefeuilles
- Le traitement des ordres d’achat et de vente
- L’exécution des trades
- Le suivi des prix et indicateurs de marché
- L’audit et la détection d’anomalies
- Gérer des milliers à millions d’ordres quotidiens
- Réduire la latence des requêtes critiques
- Permettre des analyses financières avancées
- Garantir l’intégrité et la traçabilité des données
- Optimiser PostgreSQL via indexation, partitionnement et monitoring
##gestion de projet ###lien trello: https://trello.com/invite/b/694a59f3bb3ccc7e5540fe40/ATTI556385e663adfa5c703330d226ce3f1d147287F7/cryptotrade
Le modèle logique de données repose sur 10 tables principal :
- utilisateurs
- cryptomonnaies
- paire_trading
- ordres
- trades
- portefeuilles
- prix_marche
- statistique_marche
- detection_anomalie
- audit_trail
Stocke les informations des utilisateurs de la plateforme.
- email unique
- statut contrôlé (ACTIVE, SUSPENDED, BLOCKED)
- lien avec ordres, portefeuilles, anomalies et audit
Catalogue des cryptomonnaies disponibles pour le trading.
- symbole unique (BTC, ETH…)
- utilisé dans les paires de trading et les portefeuilles
Définit les marchés de trading (ex : BTC/USDT).
- composée de deux cryptomonnaies
- empêche les paires incohérentes
- statut de disponibilité du marché
Représente les ordres Buy / Sell des utilisateurs.
- partitionnée par date_creation
- règles métier strictes (LIMIT / MARKET)
- fortement indexée pour le carnet d’ordres
Correspond aux exécutions réelles issues des ordres.
- lié aux ordres via clé composite
- partitionné par date_execution
- utilisé pour les calculs analytiques
Gère les soldes des utilisateurs par cryptomonnaie.
- un portefeuille par crypto et utilisateur
- empêche les soldes incohérents ou négatifs
Historique des prix et volumes par paire de trading.
- base des calculs RSI, VWAP et volatilité
- utilisé pour les analyses temporelles
Stocke les indicateurs calculés.
- RSI
- VWAP
- Volatilité
- unicité par paire, indicateur, période et date
Enregistre les comportements suspects.
- wash trading
- spoofing
- score de risque (0 à 100)
Assure la traçabilité complète des actions.
- partitionné par type d’action (INSERT, UPDATE, DELETE)
- utilisé pour audit et conformité
- Contraintes d’unicité (email, symbole, paires)
- Contraintes CHECK (statuts, quantités, scores)
- Clés étrangères strictes
- Respect des règles métier du trading
- calc_rsi : calcul du RSI sur une période donnée
- calc_vwap : calcul du VWAP par paire
- calc_volatilite : mesure de la volatilité
Ces fonctions permettent des analyses financières avancées directement en SQL.
- Calculs cumulés (VWAP)
- Analyses temporelles par paire
- Statistiques dynamiques par paire
- Dernier prix + indicateurs glissants
- Récupération rapide du dernier état
- Index B-tree ciblés
- Index partiels pour ordres actifs
- Partitionnement des tables volumineuses
- work_mem ajusté pour éviter les temp files
Afin de valider le bon fonctionnement, la performance et la robustesse de la base de données CryptoTrade, des jeux de données volumineux ont été insérés et exploités.
Les tables principales ont été alimentées avec des données synthétiques réalistes :
- 30 000 utilisateurs insérés dans la table
utilisateurs - Cryptomonnaies et paires de trading réalistes dans
cryptomonnaiesetpaire_trading - 30 000 ordres simulant des ordres BUY / SELL avec modes LIMIT et MARKET
- 30 000 lignes de prix de marché dans
prix_marche - Trades générés automatiquement à partir des ordres
- Données réparties sur différentes dates afin de tester le partitionnement
Ces volumes permettent de simuler un environnement proche d’une plateforme de trading réelle.
Les fonctions SQL ont été testées sur les données insérées :
- calc_vwap : vérification du calcul du prix moyen pondéré par le volume pour chaque paire
- calc_rsi : calcul du RSI sur différentes périodes (ex : 14, 20)
- calc_volatilite : mesure de la volatilité sur des fenêtres temporelles variables
Les résultats obtenus confirment la cohérence des calculs et leur capacité à fonctionner sur de grands volumes de données.
Plusieurs requêtes de test ont été exécutées afin de mesurer l’impact de l’indexation :
- Sélection des ordres par
utilisateur_id - Recherche des ordres actifs par
paire_idetstatut - Récupération du dernier prix par paire
- Calculs analytiques utilisant des Window Functions
Les résultats montrent :
- Une réduction significative du temps d’exécution des requêtes
- Une diminution des lectures disque
- Une meilleure exploitation des Index-Only Scans
Les tests confirment que :
- La base supporte efficacement plusieurs dizaines de milliers de lignes
- Le partitionnement améliore les performances sur les tables volumineuses
- Les index sont correctement utilisés par le planner PostgreSQL
- Les fonctions analytiques restent performantes même avec des volumes élevés
Ces tests valident la capacité de la base de données CryptoTrade à fonctionner dans un contexte de charge réelle tout en conservant des performances élevées.
La base de données CryptoTrade est :
- Performante
- Scalable
- Sécurisée
- Orientée analyse et audit
Elle constitue une base solide pour une plateforme de trading professionnelle et extensible.