This project note is written in French. The Casablanca Stock Exchange (BVC) operates in a French-speaking financial environment — the source data, the regulatory references, and the intended readers of this analysis are all Francophone, so the write-up follows the same language. An English version is available on request.
Finance Quantitative · Analyse Fondamentale · Bourse de Casablanca · Sécurité des Systèmes Linux
Casablanca Quant Framework (BVC)
Un environnement de recherche quantitative pour la Bourse de Casablanca (BVC), qui combine un moteur de simulation de Monte-Carlo, un calcul de Value at Risk, un optimiseur de portefeuille — et un choix technique plus rare : les données financières sensibles ne sont jamais écrites en clair sur le disque, mais stockées dans un conteneur chiffré, isolé de Git par construction.
Le projet a deux couches de lecture, volontairement séparées puis reliées : une thèse d’investissement — l’analyse fondamentale et technique des titres choisis, écrite et chiffrée comme le ferait un analyste actions — puis un moteur de simulation qui met cette thèse à l’épreuve statistiquement, en projetant des milliers de scénarios de marché plutôt qu’un seul.
Contexte et objectif
Ce projet est né d’un exercice académique réalisé dans le cadre de mes études à l’ENCG Casablanca : simuler la gestion d’un portefeuille de 1 000 000 MAD sur la Bourse de Casablanca. (Le récit complet de cette première version, réalisée en équipe, est raconté dans un billet de blog séparé.) Le Casablanca Quant Framework en est le prolongement en solo : la même question de gestion de portefeuille, mais reconstruite comme un outil reproductible, versionné avec Git, et pensé pour un usage réel plutôt que pour une seule remise de devoir.
La problématique reste concrète : un investisseur a alloué 1 000 000 MAD entre deux valeurs cotées à la BVC — Attijariwafa Bank (52,5 %, le socle bancaire) et Akdital (17,5 %, la valeur de croissance dans la santé privée) — et une poche de Bons du Trésor (30 %, l’amortisseur obligataire). Trois questions se posent alors, et ce sont elles que le framework outille :
- Quelle est la trajectoire probable de ce portefeuille sur l’année à venir ?
- Dans le pire des cas raisonnable, combien peut-on perdre ?
- Comment garder les données de marché — souvent proches de secrets professionnels dans un cadre académique ou de conseil — hors de portée d’une fuite accidentelle vers GitHub ?
L’allocation a été fixée à une date précise — le 15 avril 2026 — en tenant compte du contexte de marché du jour : l’indice MASI20 (l’indice qui regroupe les 20 plus grosses capitalisations de la Bourse de Casablanca, l’équivalent local du CAC 40 parisien) affichait alors 1 376,27 points, en hausse de 0,48 % sur la séance mais en retrait de 7,36 % sur un an. Concrètement, l’allocation cible s’est traduite par l’achat de 747 actions Attijariwafa Bank (703 MAD l’action, soit 525 141 MAD) et 142 actions Akdital (1 225 MAD l’action, soit 173 950 MAD) — un léger écart par rapport aux 525 000 MAD et 175 000 MAD visés au départ, dû au fait qu’on ne peut acheter que des actions entières.
Le moteur est écrit pour être extensible à d’autres valeurs de la cote (TGCC, IAM, etc.), mais l’implémentation actuelle porte sur ces trois positions, alimentées par l’historique de cours d’Akdital et d’Attijariwafa Bank.
Analyse fondamentale : pourquoi Akdital et Attijariwafa Bank
Avant de simuler quoi que ce soit, encore faut-il justifier le choix des actifs. Cette partie du travail — la plus « analyste financier » du projet — s’appuie sur la thèse d’investissement complète rédigée en avril 2026, dont le document original (13 pages) est consultable et téléchargeable ci-dessous, et dont les grandes lignes sont reprises et vulgarisées dans les sections qui suivent.
Le secteur de la santé : un pari sur la réforme de l’Assurance Maladie
Akdital est un groupe de cliniques privées coté à la Bourse de Casablanca. Pour comprendre pourquoi il pèse 17,5 % du portefeuille, il faut d’abord comprendre le contexte : le Maroc réforme en profondeur son système de santé, avec un budget public record de 42,3 milliards MAD prévu pour 2026 et une nouvelle loi-cadre (n° 06-22) qui facilite l’émergence de groupes privés structurés comme Akdital, notamment via des partenariats public-privé. L’objectif affiché est de créer 11 338 lits d’hôpital supplémentaires d’ici 2030 — Akdital est l’un des principaux véhicules privés de cette expansion.
Sur le terrain, ces chiffres se traduisent par une croissance quasi exponentielle du groupe entre 2023 et 2025 :
Le chiffre d’affaires passe de 1,8 à 4,4 milliards MAD (+144 % en deux ans), porté par l’ouverture de nouvelles cliniques (41 établissements et 4 505 lits fin 2025) et par la généralisation de l’AMO (l’Assurance Maladie Obligatoire, la couverture santé qui rembourse une partie des frais médicaux des Marocains assurés) : environ 80 % du chiffre d’affaires d’Akdital provient aujourd’hui de patients couverts par la CNSS ou une assurance privée. Le résultat d’exploitation triple sur la période (228 → 807 millions MAD), preuve que le groupe rentabilise de mieux en mieux ses coûts fixes à mesure qu’il grandit — un effet d’échelle classique : plus une clinique reçoit de patients, moins chaque patient supplémentaire coûte cher à traiter avec la même infrastructure et le même personnel.
Au-delà des montants bruts, quatre ratios financiers permettent de juger la qualité de cette croissance — les mêmes que les analystes utilisent pour n’importe quelle action cotée en Bourse :
Petit lexique des ratios financiers
- BPA (Bénéfice Par Action) — le profit net de l’entreprise divisé par le nombre d’actions en circulation. C’est la part du bénéfice qui revient, en théorie, à chaque action détenue.
- ROE (Return on Equity, rentabilité des fonds propres) — le bénéfice net rapporté à l’argent apporté par les actionnaires. Un ROE de 15 % signifie que chaque 100 MAD investi par les actionnaires génère 15 MAD de profit par an.
- PER (Price Earnings Ratio) — le cours de l’action divisé par le bénéfice par action. Un PER de 30 signifie que le marché est prêt à payer 30 fois le bénéfice annuel pour posséder l’action : plus il est élevé, plus le marché anticipe de croissance future.
- PBR (Price to Book Ratio) — le cours de l’action divisé par sa valeur comptable (les fonds propres divisés par le nombre d’actions). Un PBR de 5 signifie que l’action se paie 5 fois ce qu’elle vaudrait si l’entreprise était liquidée et son actif net redistribué aux actionnaires.
Le BPA bondit de 15,62 à 34,91 MAD (+123 %) malgré une augmentation de capital en 2024 qui a créé de nouvelles actions — le bénéfice a crû plus vite que la dilution. Le ROE remonte à 16,90 % en 2025, un excellent niveau pour un secteur aussi gourmand en capital que la santé. Le PER, à 33,80, reste élevé — la moyenne du marché marocain tourne plutôt autour de 18-20 — signe que le marché continue de payer cher une croissance qu’il juge encore devant elle, même si ce multiple se détend par rapport aux 42,86 de 2024. En clair : Akdital est passé du statut de start-up de la santé à celui de machine à cash, mais reste valorisé par le marché comme une valeur de croissance, pas comme une valeur mature.
Le secteur bancaire : la valeur refuge
Attijariwafa Bank — 52,5 % du portefeuille, le socle — évolue dans un tout autre contexte : celui du secteur bancaire marocain, l’un des plus matures du continent africain. Il est dominé par trois acteurs — Attijariwafa Bank, BCP et Bank of Africa, surnommés les « Big Three » — qui contrôlent à eux seuls près de 80 % du PNB (le Produit Net Bancaire, l’équivalent du chiffre d’affaires pour une banque : la somme des marges d’intérêt et des commissions qu’elle facture). Casablanca est par ailleurs le premier centre financier d’Afrique : grâce au statut de Casablanca Finance City (CFC), plus de 220 entreprises internationales y pilotent leurs activités africaines.
Sur trois ans, le chiffre d’affaires (PNB) progresse de 28,3 à 34,5 milliards MAD (+22 %) et le résultat net bondit de 6 à 9,5 milliards MAD (+58 %) — porté par la hausse des taux d’intérêt, qui améliore la marge que la banque tire de la différence entre ce qu’elle prête et ce qu’elle emprunte. Les fonds propres atteignent 72,5 milliards MAD, largement au-dessus des exigences prudentielles de Bâle III (l’ensemble de règles internationales qui imposent aux banques de détenir un minimum de capital en réserve pour absorber d’éventuelles pertes). Signe de solidité supplémentaire : le nombre d’actions en circulation reste rigoureusement stable (215 140 839 titres) sur toute la période — contrairement à Akdital, ATW finance sa croissance sans diluer ses actionnaires.
Le BPA grimpe de 28,19 à 44,18 MAD (+57 %), un bénéfice supplémentaire entièrement absorbé par les actionnaires existants puisque le nombre de titres ne bouge pas. Le ROE progresse de 9,76 % à 13,11 %, un niveau qualifié de « classe mondiale » pour une banque de cette taille. Et contrairement à Akdital, le PER d’ATW baisse (de 13,90 à 12,00) alors même que les bénéfices augmentent : le cours de l’action ne suit pas la même pente que les profits, ce qui rend le titre statistiquement moins cher aujourd’hui qu’il y a deux ans, malgré des résultats records.
Pourquoi les deux ensemble ?
Le duo Akdital / Attijariwafa Bank répond à deux logiques d’investissement complémentaires plutôt qu’à une seule : Akdital est le moteur de croissance — jeune, volatil, acheté pour la plus-value potentielle du cours ; Attijariwafa Bank est l’ancrage de stabilité — mature, régulier, moins cher à l’achat rapporté à ce qu’il génère. Le solde du portefeuille (30 %) va aux Bons du Trésor, des titres de dette émis par l’État marocain : en échange d’un prêt à l’État, l’investisseur touche un rendement fixe et garanti, quoi qu’il arrive à la Bourse. C’est l’amortisseur du portefeuille — l’équivalent d’une ceinture de sécurité qui ne rapporte pas grand-chose en soi, mais qui protège le reste du capital si le marché actions traverse une zone de turbulence, tout en restant assez liquide pour être remobilisé rapidement si une opportunité se présente sur l’un des deux titres.
Analyse technique : ce que racontent les graphiques boursiers
Complément de l’analyse fondamentale, l’analyse technique ne s’intéresse plus à ce que vaut une entreprise, mais à la façon dont son cours s’est comporté en Bourse. Les graphiques ci-dessous sont des graphiques en chandeliers (ou candlesticks) : chaque « bougie » verticale résume une période de cotation avec quatre informations — le cours d’ouverture, le cours de clôture, le plus haut et le plus bas atteints sur la période. Une bougie verte signifie que le cours a clôturé plus haut qu’il n’avait ouvert (le marché a été acheteur), une bougie rouge l’inverse. La bande bleue en bas de chaque graphique indique le volume échangé — combien de MAD de titres ont changé de mains — un indicateur classique de l’intensité de l’intérêt des investisseurs à un instant donné.
Sur la période avril 2025 - avril 2026, ATW progresse par paliers, avec des corps de chandeliers courts — signe d’une pression acheteuse régulière plutôt que spéculative. Le titre passe d’environ 630-650 MAD à près de 700 MAD, après une phase haussière (avril-octobre) qui l’a porté jusqu’à 800 MAD, suivie d’une consolidation qui vient retester le support des 700 MAD. Le pic de volume en décembre coïncide généralement avec des rebalancements de portefeuille de fin d’année ou des transactions de blocs institutionnels.
Le graphique d’Akdital est nettement plus nerveux — des corps de bougies plus longs, davantage de rouge consécutif — ce qui reflète une valeur de croissance où les prises de bénéfices sont plus rapides. Le titre culmine au-dessus de 1 500 MAD avant de corriger fortement pour se stabiliser autour de 1 150-1 200 MAD en fin de période, avec un signal de retournement (succession de bougies vertes, hausse des volumes) tout en fin de période, sous les 1 100 MAD. Cette volatilité plus marquée est précisément ce que la simulation de Monte-Carlo, plus bas, vient quantifier statistiquement plutôt que de la décrire seulement visuellement.
La méthode : simuler mille avenirs plutôt que d’en prédire un seul
Personne ne peut prédire avec certitude ce que vaudra une action dans un an. La simulation de Monte-Carlo part de ce constat et le retourne en avantage : au lieu de chercher la bonne prévision, elle en génère des milliers, chacune plausible, et regarde ce qu’elles ont en commun.
Une image simple pour saisir le principe : imaginez que vous voulez connaître la superficie d’un lac à la forme irrégulière, sans en connaître la formule mathématique. Vous délimitez un grand terrain carré autour du lac et vous y lancez, au hasard, mille fléchettes. Si 700 d’entre elles tombent dans l’eau, vous pouvez raisonnablement en conclure que le lac occupe environ 70 % du terrain — sans jamais avoir calculé sa surface directement. La simulation de Monte-Carlo applique la même logique à un portefeuille boursier : au lieu de fléchettes, elle tire des milliers de trajectoires de marché plausibles, et regarde où elles atterrissent.
Concrètement, pour chaque actif du portefeuille, le framework calcule sa volatilité historique (à quel point son cours a l’habitude de varier d’un jour à l’autre) à partir des deux dernières années de cotation. Il tire ensuite, au hasard mais selon cette même volatilité, une nouvelle trajectoire de rendements journaliers sur les 252 prochains jours de bourse — l’équivalent d’une année. Il répète l’opération 1000 fois. Le résultat est le graphique ci-dessous : un faisceau de 1000 trajectoires possibles pour la valeur totale du portefeuille, plutôt qu’une seule ligne optimiste ou pessimiste.
Mille scénarios est un compromis délibéré : suffisamment nombreux pour que la forme statistique de la distribution finale (sa moyenne, sa dispersion) se stabilise et cesse de dépendre du hasard d’un tirage particulier, sans pour autant demander un temps de calcul disproportionné pour un portefeuille de cette taille.
Value at Risk (VaR) à 95 % — c’est la question que tout gestionnaire de portefeuille finit par poser : « Dans le pire des cas raisonnable, combien puis-je perdre ? » La VaR à 95 % y répond en cherchant, parmi les 1000 scénarios simulés, le seuil en-dessous duquel le portefeuille ne descend que dans les 5 % de scénarios les plus défavorables (soit 50 sur 1000). Autrement dit : il y a 95 % de chances statistiques que la valeur finale du portefeuille reste au-dessus de ce seuil. Le choix de 95 % — plutôt que 99 % ou 100 % — est un standard de l’industrie (repris des normes prudentielles de Bâle) : il écarte les scénarios catastrophes extrêmes (qu’aucun modèle statistique ne capture bien) pour se concentrer sur un risque réellement mesurable, sans jamais prétendre à une garantie absolue — qui n’existe pas en finance de marché.
Un différenciateur technique : les données financières ne touchent jamais le disque en clair
C’est la partie la moins habituelle de ce projet — et la plus révélatrice de sa double origine, à la croisée de la finance quantitative et de l’administration système Linux (Fedora/Red Hat).
Les exports de cours boursiers et les bases de données qui en découlent sont, par nature, des données qu’on ne veut pas voir traîner en clair sur un poste de travail ni, pire, remonter par erreur vers un dépôt Git public. Le framework répond à ce risque par un design de stockage de confiance (trusted storage) plutôt que par une simple ligne dans .gitignore :
- Chiffrement LUKS — les données vivent dans une image disque chiffrée (
finance.img, 500 Mo), verrouillée par une phrase de passe. Tant que le coffre n’est pas explicitement déverrouillé (make vault_open), son contenu est illisible. - Système de fichiers XFS — une fois le volume déchiffré et monté (via
cryptsetup+dm-mapper), il est formaté en XFS, choisi pour sa robustesse sur les volumes de données à forte volumétrie — un choix cohérent avec les usages qu’on trouve côté infrastructure des salles de marché. - Isolation Git par construction — le conteneur chiffré et son point de montage sont exclus du dépôt : même en cas d’erreur de manipulation, il n’y a rien d’exploitable à commiter, puisque les données n’existent en clair que dans un volume monté localement, jamais dans l’arborescence versionnée.
Le workflow quotidien tient dans quatre commandes make, pilotées depuis un Makefile qui fait office de centre de contrôle du projet :
make vault_open # déverrouille et monte le coffre-fort chiffré
make data_clean # nettoie les CSV bruts et les injecte dans une base SQLite, à l'intérieur du vault
make run # lance Jupyter Lab pour l'analyse
make vault_close # démonte le volume et referme le tunnel chiffré
C’est une discipline empruntée à la sécurité système plus qu’à la data science classique — et c’est précisément ce qui distingue ce projet d’un notebook Jupyter isolé : la donnée sensible est traitée comme telle, du premier import jusqu’à la simulation.
Résultats et interprétation
Après l’analyse fondamentale et technique des deux titres, place aux résultats de la simulation proprement dite — la partie qui répond aux deux premières questions posées en introduction : quelle trajectoire probable, et quelle perte maximale statistiquement raisonnable.
Répartition et évolution du capital — la référence historique
Avant de simuler l’avenir, le framework rejoue le passé : ce graphique en aires empilées retrace comment les 1 000 000 MAD se seraient répartis et auraient évolué entre Attijariwafa Bank (gris), Akdital (orange) et les Bons du Trésor (vert), sur la période historique disponible. La ligne noire au sommet est la valeur totale du portefeuille. On y voit la fonction de chaque brique : la bande obligataire progresse en pente régulière, insensible aux à-coups du marché, tandis que les deux bandes actions absorbent l’essentiel de la volatilité visible sur la courbe totale. C’est cette trajectoire de référence — pas une hypothèse, mais un historique réellement observé — qui sert ensuite de point de départ statistique à la simulation de Monte-Carlo.
1000 trajectoires simulées pour l’année à venir
Voici le cœur du framework. Chaque ligne grise est une trajectoire simulée parmi les 1000 générées ; la ligne rouge est leur moyenne. Deux lectures s’en dégagent immédiatement : d’abord, l’éventail s’élargit avec le temps — plus l’horizon de simulation s’allonge, plus l’incertitude cumulée sur la valeur finale augmente, ce qui est le comportement attendu d’une marche aléatoire. Ensuite, la pente de la moyenne rouge est légèrement ascendante, ce qui reflète un biais haussier hérité du comportement historique des deux actifs sur la période d’apprentissage — un signal utile, mais qui doit être lu comme une tendance statistique et non comme une promesse de rendement.
Distribution des valeurs finales et seuil de VaR
Ce dernier graphique condense les 1000 scénarios en une seule distribution : chaque barre bleue représente combien de scénarios simulés ont abouti à telle valeur finale de portefeuille, et la courbe rouge est l’approximation par une loi normale (ici de moyenne μ ≈ 1 047 972 MAD et d’écart-type σ ≈ 156 108 MAD). La ligne pointillée verticale marque le seuil de VaR à 95 % : 794 571 MAD — dans cette exécution de la simulation, il y a 95 % de chances que le portefeuille termine au-dessus de ce montant, soit une perte maximale statistiquement probable d’environ 20 % du capital initial dans les scénarios défavorables (hors événement extrême).
Note méthodologique : la simulation n’étant pas figée par une graine aléatoire fixe, deux exécutions successives produisent des chiffres légèrement différents — c’est une propriété attendue de la méthode (chaque tirage explore une combinaison différente de trajectoires plausibles), pas une incohérence entre les figures présentées ici. À titre d’illustration, une autre exécution de cette même simulation, documentée dans la thèse d’investissement d’origine, aboutissait à une valeur moyenne attendue de 1 114 632,55 MAD et une VaR 95 % de 906 115,62 MAD : des chiffres différents, mais qui racontent la même histoire — un portefeuille orienté à la hausse en moyenne, avec un plancher statistique compris, selon l’exécution, entre environ 79 % et 91 % du capital initial.
Stack technique
| Composant | Rôle |
|---|---|
| Python (NumPy, Pandas, Matplotlib, Seaborn) | Moteur de calcul, nettoyage des données, simulation et visualisation |
| Jupyter Lab | Environnement d’analyse interactif (notebooks/presentation.ipynb) |
| SQLite + SQLAlchemy | Stockage structuré des cours historiques, à l’intérieur du vault chiffré |
| Makefile | Automatisation du workflow (installation, vault, nettoyage, exécution) |
| LUKS + cryptsetup | Chiffrement du conteneur de données au repos |
| XFS | Système de fichiers du volume déchiffré |
| Fedora / Red Hat Linux | Environnement cible pour le déploiement et le workflow sécurisé |
Limites
- Les rendements simulés supposent une loi normale et une volatilité future égale à celle observée sur la période historique — une simplification classique qui sous-estime généralement les événements extrêmes (queues de distribution plus épaisses en réalité).
- Les tirages aléatoires pour Akdital et Attijariwafa Bank sont générés indépendamment l’un de l’autre dans le moteur actuel ; une corrélation historique entre les deux titres (ou avec l’indice MASI) n’est pas encore modélisée, ce qui peut légèrement sous- ou sur-estimer la diversification réelle du portefeuille.
- La VaR à 95 % quantifie un risque statistique dans des conditions de marché « normales » — elle ne couvre pas les scénarios de crise systémique ou de rupture de liquidité, par construction.
- L’analyse fondamentale (ratios, contexte sectoriel) est une photographie prise à une date donnée (avril 2026) ; les chiffres d’Akdital et d’Attijariwafa Bank évoluent à chaque publication trimestrielle et devront être rafraîchis pour rester pertinents.
Liens et références
Le code source complet du framework — moteur de simulation, scripts de nettoyage des données, Makefile — est disponible sur GitHub. La thèse d’investissement qui sert de socle à l’analyse fondamentale de cette page est téléchargeable plus haut, et ce travail a également été partagé sur LinkedIn.
Conclusion et perspectives
Ce framework transforme une thèse d’investissement — l’analyse fondamentale et technique d’Akdital et d’Attijariwafa Bank — en outil chiffré, reproductible et versionné : la même question — « combien puis-je perdre, et avec quelle probabilité ? » — peut désormais être reposée à chaque mise à jour des données de marché, en une seule commande (make run), sans jamais exposer les données sous-jacentes.
Les prochaines étapes naturelles sont d’introduire la corrélation entre actifs dans le moteur de simulation (matrice de covariance plutôt que tirages indépendants), d’étendre l’univers d’actifs couverts (TGCC, IAM, et au-delà), et de faire du calcul de VaR un input direct d’un optimiseur de frontière efficiente — pour passer d’un portefeuille défini a priori à une allocation qui maximise le ratio de Sharpe sous une contrainte de VaR donnée. Une base technique déjà posée : le stockage sécurisé, l’automatisation via Makefile et la structure modulaire du dépôt sont conçus pour absorber cette montée en complexité sans refonte — tout comme l’analyse fondamentale, mise à jour à chaque publication trimestrielle, pourra continuer à nourrir le moteur de simulation en amont.