← Tous les travaux
Trading simulé · tourne en localTourne en local

Simulateur de trading MASI

Les particuliers marocains n'ont nulle part pour s'entraîner. Un compte chez un courtier commence avec de l'argent réel et sans retour possible, et toutes les plateformes de trading simulé sérieuses couvrent les actions américaines. Celle-ci couvre le marché local : vraies cotations différées, carnet d'ordres simulé, horaires de séance et commissions qui se comportent comme la réalité.

1 000 000
MAD de solde initial, par compte
09:30–15:30
ordres acceptés uniquement en séance
0,10 %
commission prélevée par exécution

Ce que c'est

Une plateforme de trading simulé pour la Bourse de Casablanca. Vous recevez un compte doté d'un million de dirhams simulés, des prix quasi temps réel issus du flux public d'un courtier, et un carnet d'ordres qui exécute vos ordres contre eux. Positions, liquidités et résultat sont suivis comme le ferait un courtier.

L'essentiel est que la simulation soit fidèle là où cela compte. Les ordres hors séance sont refusés plutôt que mis en attente silencieuse à un prix périmé. La commission est prélevée à dix points de base à l'exécution : une stratégie rentable avant frais cesse de l'être après — ce que tout débutant apprend trop tard et trop cher.

Faire tenir une donnée différée

Le flux sous-jacent est différé et n'a jamais été conçu pour être interrogé par une interface de trading. Récupérer à la demande transformait chaque tuile de prix de l'interface en requête externe, vers une source ni rapide ni tenue de rester disponible.

Les prix sont donc préchargés dans Redis par un processus de fond plutôt que récupérés à chaque requête. Les lectures touchent le cache avec une durée de vie d'une seconde, la boucle de rafraîchissement tourne à son propre rythme avec un nombre borné de récupérations concurrentes et une pause entre les lots, et l'API ne bloque jamais sur la source. Le compromis est assumé : les cotations sont différées et la plateforme le dit, car prétendre le contraire dans un outil d'apprentissage enseignerait la mauvaise leçon.

  • Postgres et Redis conditionnent tous deux le démarrage à des health checks : l'API ne démarre jamais contre une base qui n'accepte pas de connexions.
  • L'accès à la base est entièrement asynchrone via SQLAlchemy — une lecture de prix ne doit pas retenir une connexion en attendant le réseau.
  • Les positions sont réconciliées périodiquement plutôt que présumées justes depuis l'état d'écriture.

Où cela en est

La pile tourne de bout en bout avec une seule commande, et la feuille de route est nettement plus longue que ce qui est construit — c'est l'état honnête du projet. L'ingestion des cotations était le dernier chantier en cours, et le travail sur les données de marché issu de ce projet est devenu Casablanca-Bourse Lens, qui est en ligne et a, lui, un public.

Le simulateur figure ici parce que l'ingénierie intéressante est transférable et déjà faite : mettre en cache une source hostile, modéliser exécutions et coûts, et garder une interface de trading réactive alors que la donnée en dessous est lente.

Réalisé avec

  • FastAPI
  • SQLAlchemy
  • PostgreSQL
  • Redis
  • React
  • TanStack Start
  • Docker Compose

Non hébergé : Postgres, Redis, une API, un frontend et un worker de préchargement. Les cotations sont différées, et le simulateur sert à s'entraîner — ce n'est pas un conseil d'investissement.