Documentation & Architecture Exécutive — Bourse V2
Mémo Complet : Système Challenger IA (Python + SQLite + Escouade de 8 Agents) REVUE : 25-10-2026
Vue d'Ensemble & Philosophie du Système

Architecture "Champion vs Challenger" & Gouvernance Multi-Agents IA

Ce mémo documente l'intégralité du système algorithmique Bourse V2 (MarketLens Pro) tel qu'il tourne en production 24h/24 sur le serveur VPS OVH (`https://app.cyrild.ovh`). Il détaille la logique globale du moteur Challenger (Python + SQLite) face au système historique Champion (n8n + Supabase), le rôle des 8 agents spécialisés, le séquencement chronologique d'une journée de bourse et la feuille de route de bascule finale.

verifiedWin Rate Challenger : 87,14 % (61/70 trades) trending_upProfit Factor : 6,06 (+1 326,20 € Net) shieldMax Drawdown maîtrisé : -111,77 € dns100 % Autonome sur VPS OVH (Mac éteint)
Système A — Champion (Actuel)
n8n + Supabase PostgreSQL
Paramètres uniformes globaux sur toutes les actions (-1 593,16 € sur 35 séances).
Système B — Challenger (Nouveau)
Python Natif + SQLite Isolé
Calibration Option B par action + ADN Quali Tier 1/2/3 + Breakeven Floor (+1 326,20 €).
Validation Prédictive (OOS)
Walk-Forward + Shrinkage
Entraînement 70% / Test aveugle 30% (+228,01 € d'avance Out-of-Sample).
Objectif Risque & Capital
Zéro Risque Overnight
Allocation 2 500 €/ligne, Frais Saxo (2 € + 0,08%), Liquidation Flat-Book à 16h30.
1. Logique Globale : Pourquoi le Challenger bat le Champion (87,14 % vs 13,92 % Win Rate)

Le système historique (Champion n8n) appliquait une règle unique à l'ensemble du portefeuille (ex: acheter dès +0,20 % de hausse avec un Stop Loss large). Or, une Large Cap industrielle, une Mid Cap technologique et une Small Cap Biotech n'ont ni la même volatilité (ATR), ni le même comportement de carnet d'ordres à 09h00. Le moteur Challenger résout ce problème grâce à 5 piliers algorithmiques :

1. Calibration Granulaire "Option B" par Action & Profil de Volatilité (`optimizer.py`) — Chaque action est classée selon son ATR journalier en DEFENSIVE_LARGE (< 2%), MOMENTUM_MID (2%–4%) ou EXPLOSIVE_SMALL (> 4%) et possède ses propres seuils (condition_prix_percent, condition_volume_x, take_profit_percent, trailing_stop_percent, hard_stop_percent) stockés dans SQLite (challenger_stock_profiles et bourse_admin).
2. Filtre Anti-Bull-Trap (09h00–09h15) & Confirmation sur 2 Bougies 5-min — Pour éviter les mèches spéculatives d'ouverture qui retombent dès 09h10 (principale cause des Hard Stops), le Challenger exige un maintien haussier confirmé sur deux créneaux consécutifs de 5 minutes (cur_p >= prev_slot_p) et filtre les faux départs entre 09h05 et 09h10 (skip_early_whipsaw).
3. Plancher Breakeven Automatique sur Trailing Stop (`breakeven_floor_actif`) — Sur une ligne de 2 500 €, les frais Saxo Bank aller-retour (2 € fixe + 0,08 % par ordre, soit ~8 € A/R) représentent 0,32 % du capital investi. Dès que le Trailing Stop s'active, le Challenger verrouille un plancher strict à entry_price × 1,0038 (+0,38 %) afin qu'aucun trade gagnant ne puisse se transformer en perte nette après frais.
4. Fiche ADN Qualitatif (`TIER 1 / 2 / 3`) & Détecteur de Thèses Contradictoires (`quali_audit_engine.py`) — L'Agent Quali classe les 134 sociétés en 🟢 TIER_1_COMPOUNDER (leaders rentables à forte visibilité), 🟡 TIER_2_CYCLICAL (valeurs cycliques) et 🔴 TIER_3_SPECULATIVE_BIOTECH (biotechs/micro-caps à risque de dilution). Il détecte également les thèses IA complaisantes (ex: "Malgré un Death Cross et un volume faible...") et bloque automatiquement les dossiers fragiles dont le Win Rate est inférieur à 65 %.
5. Régularisation Bayésienne (Shrinkage) & Validation Walk-Forward Out-of-Sample — Pour empêcher le sur-apprentissage (overfitting) sur les actions ayant peu de trades historiques, leurs paramètres sont pondérés avec ceux de leur cluster de volatilité, et la performance prédictive est mesurée en aveugle sur les séances les plus récentes (Walk-Forward Train/Test).
2. Rôle et Responsabilités des 8 Agents IA du Fonds

Le projet est gouverné par une hiérarchie de 8 agents spécialisés. Ils opèrent à la fois en autonomie 24h/24 sur le VPS OVH (via leurs moteurs Python planifiés) et dans VS Code (pour le développement logiciel continu via /autopilot).

Agent / Commande Moteur Python Associé Rôle Métier & Responsabilité Décisionnelle Exécution OVH
👔 `bmad-agent-ceo` (`/ceo`) ceo_orchestrator.py Directeur Général (Alexandre Sterling) : Supervise la croissance nette du capital, arbitre entre les pôles Quant/Quali/News, rédige le verdict exécutif quotidien et peut spawner de nouveaux agents spécialisés (--spawn). 08h45 / 17h35 / 18h35
📊 `bmad-agent-quant-ci` (`/quant-ci`) optimizer.py
quant_ci_agent.py
Directeur Quantitatif & Amélioration Continue : Exécute les backtests multi-paramètres (63 721 combinaisons), calibre l'Option B par action, audite les horizons DAILY, WEEKLY, MONTHLY et génère les User Stories pour /autopilot. Quotidien 17h35
🔍 `bmad-agent-quali` quali_audit_engine.py Analyste Fondamental & ADN Métier : Audite les 134 sociétés sur 10 points (PEA, Capitalisation, Tier 1/2/3, Momentum Sectoriel, détection des thèses contradictoires, calendrier d'earnings T1–T4) et génère watchlist-intelligence.json. Quotidien 17h35
📰 `bmad-agent-premarket-news` premarket_news_scanner.py Radar de Catalyseurs Pré-Ouverture : Scanne avant 09h00 les flux RSS Google News Finance et catalyseurs pour classer chaque titre en CATALYSEUR_HAUSSIER (bonus seuil -0,15%), NEUTRE ou ALERTE_BAISSIERE (Veto immédiat). Matin 08h45 & 17h35
🔄 `bmad-agent-portfolio-screener` portfolio_screener_engine.py Curateur Mensuel Small & Mid Caps PEA : Identifie les poids morts à retirer du Portfolio (candidates_out) et screene les meilleures pépites Small/Mid Caps européennes (150 M€–8 Mds€, ATR 2,2%–4,5%) à intégrer en 1 clic (candidates_in). Mensuel & Sur Demande
⚡ Cerveau Intraday workflow_intraday_momentum.py Exécuteur Temps Réel 5-min & Portfolio Manager : Évalue de 09h00 à 17h30 les conditions d'entrée/sortie (TP, TS avec Breakeven Floor, Hard Stop, Cutoff 16h30) et met à jour le capital disponible en temps réel dans SQLite. Toutes les 5 min (09h-17h30)
🛠️ `bmad-agent-dev` (`/autopilot`) VS Code Autopilot Ingénieur Logiciel Autonome : Dépile séquentiellement les User Stories [ ] de docs/5-BACKLOG.md, code les évolutions Python/HTML, met à jour les 6 fichiers Markdown et crée un commit Git par story. VS Code (/autopilot)
🎨 `ux-designer` & 🛡️ `sre` challenger-api.service Design & Fiabilité Infrastructure : Respect du Design System Kinetic Terminal Light et maintien en condition opérationnelle de Nginx, Certbot SSL et du daemon systemd sur OVH. Daemon 24h/24
3. Séquencement Chronologique Automatisé (Du Lundi au Vendredi — Fuseau Paris)

Toutes les étapes ci-dessous s'exécutent automatiquement sur le serveur VPS OVH (`152.228.217.41`) via le planificateur crontab et le service challenger-api.service, même lorsque votre ordinateur Mac est éteint :

🕒 08h45 — Radar Pré-Ouverture (`premarket_news_scanner.py` + `ceo_orchestrator.py`)
L'agent bmad-agent-premarket-news scanne les flux RSS Google News Finance et les thèses matinales sur les valeurs actives du Portfolio. Il enregistre les catalyseurs dans la table SQLite challenger_premarket_news, applique un bonus de réactivité (-0,15% sur le seuil de prix) aux CATALYSEUR_HAUSSIER et verrouille un Veto protecteur sur toute ALERTE_BAISSIERE ou publication de résultats imminente (J / J-1).
🕒 09h00 à 11h00 (Toutes les 5 min) — Fenêtre d'Entrée Intraday (`workflow_intraday_momentum.py --sync`)
À chaque bougie de 5 minutes, le moteur récupère le cours et le volume, applique un forward-fill propre depuis 09h00, et vérifie pour chaque action ses paramètres personnalisés Option B :
  • decision_finale == 'ACHETER' et absence de Veto Quali / Earnings / News.
  • Heure courante ≤ signal_heure_max (11h00 par défaut) et filtre anti-faux-départ 09h05–09h10 validé.
  • Hausse depuis 09h00 ≥ condition_prix_percent avec maintien haussier confirmé sur 2 bougies 5-min consécutives.
  • Ratio de volume ≥ condition_volume_x et capital disponible suffisant (Quantité = floor(2 500 € / entry_price)).
🕒 09h05 à 16h25 (Toutes les 5 min) — Pilotage des Positions Ouvertes & Breakeven Floor
Pour chaque position ouverte, le moteur met à jour le plus haut atteint (max_price_reached) et surveille 3 seuils de sortie :
  • Take Profit (TP) : Vente immédiate dès que le cours atteint take_profit_price.
  • Trailing Stop avec Plancher Breakeven (TS) : Dès que la plus-value latente atteint activation_ts_percent, le stop suiveur s'active et ne peut jamais descendre sous entry_price × 1,0038 (+0,38 % pour couvrir les 8 € de frais Saxo A/R). À partir de 15h00, la distance du stop suiveur se resserre automatiquement à trailing_stop_2nd_percent.
  • Hard Stop (HARD_STOP) : Coupe-circuit de protection du capital si le cours casse hard_stop_price.
🕒 16h30 — Liquidation Forcée de Fin de Séance (`CUTOFF` — Flat-Book)
Toute position encore ouverte à 16h30 est automatiquement clôturée au cours de marché, les frais A/R sont déduits et le capital net est réintégré dans portfolio_admin. Aucune position n'est jamais conservée la nuit.
🕒 17h35 — Clôture Quotidienne, Recalibration Option B & Audit Quant CI / CEO (`daily_closing_runner.py`)
Cinq minutes après la clôture d'Euronext (17h30), le pipeline automatique :
  1. Synchronise les dernières cotations de la séance (sync_from_supabase.py) sans écraser les paramètres Challenger.
  2. Recalibre les profils par action Option B et la validation Walk-Forward (optimizer.py → challenger-data.json).
  3. Met à jour les scores qualitatifs 360° des 134 entreprises (quali_audit_engine.py → watchlist-intelligence.json).
  4. Exécute l'audit Daily / Weekly / Monthly avec synthèse Gemini du CEO (ceo_orchestrator.py → ci-quant-report.json).
🕒 18h35 — Préparation Quants J+1 (`workflow_18h30_quants.py` & `sync_from_supabase.py`)
Calcul des indicateurs techniques de clôture (EMA 13/34, Golden/Death Cross, RSI 14/7, OBV, Bollinger Squeeze, Micro-ATR 5-min) et génération des thèses d'investissement Gemini pour la séance du lendemain.
🗓️ 1er du Mois (ou à la demande) — Comité d'Arbitrage du Portfolio (`portfolio_screener_engine.py`)
L'agent bmad-agent-portfolio-screener propose dans la page Portfolio les valeurs sans intérêt à retirer et les meilleures nouvelles Small & Mid Caps européennes PEA à intégrer en 1 clic.
4. Architecture Technique, Base SQLite Isolée & Infrastructure VPS OVH
A. Base de Données SQLite Isolée (`challenger-engine/trading_challenger.db`)
Isolation stricte vis-à-vis de Supabase : Le Challenger possède sa propre base SQLite en mode WAL sur le VPS OVH (/var/www/marketlens-challenger/trading_challenger.db). Ses paramètres bourse_admin sont protégés contre tout écrasement lors des synchronisations de prix.
Tables principales SQLite :
  • bourse_admin : Référentiel des 134 sociétés + paramètres de trading personnalisés par action.
  • day_data : Indicateurs techniques du soir (18h30), décisions Quants, thèses Gemini et bilan journalier.
  • minutes_data : Cotations et volumes toutes les 5 minutes de 09h00 à 17h30 + état du trade.
  • challenger_stock_profiles : Profils de volatilité ATR et paramètres Option B calibrés par uic_saxo.
  • challenger_quali_scores : Fiche ADN Qualitatif (TIER_1/2/3, Score /10, Contradiction thèse, Régime secteur).
  • challenger_premarket_news : Signaux catalyseurs et titres d'actualités pré-ouverture (08h45).
  • challenger_portfolio_rotation : Propositions mensuelles d'entrées/sorties Small & Mid Caps PEA.
B. Serveur API Python, Reverse Proxy Nginx & Cartographie Web
Daemon `systemd` permanent (`challenger-api.service`) : Fait tourner challenger-engine/api_server.py sur 127.0.0.1:8001 avec redémarrage automatique (Restart=always), exposé en HTTPS par Nginx sous https://app.cyrild.ovh/api/challenger/*.
Endpoints REST disponibles en production :
  • GET /api/challenger/duel & /state
  • GET /api/challenger/watchlist & /ci-report
  • POST /api/challenger/optimize & /apply-sqlite
  • POST /api/challenger/ci-run & /spawn-agent
  • POST /api/challenger/portfolio-add & /portfolio-remove
Cartographie des Écrans Front-end (`/var/www/marketlens/`) :
5. Protocole de Bascule Finale (Cutover Plan : Arrêt de n8n → 100 % Challenger SQLite + Saxo Direct)

Durant la phase d'évaluation en conditions réelles (2 séances de bourse), le Challenger et le Champion tournent en parallèle. Dès validation de la surperformance Live du Challenger par l'opérateur et le CEO, la bascule définitive s'effectue en 3 étapes sans interruption de service :

Étape 1 — Arrêt des workflows n8n : Désactivation des workflows n8n (18h30 et 09h00-17h30) sur https://n8n.cyrild.ovh afin de libérer l'unique jeton d'authentification Saxo Bank OpenAPI.
Étape 2 — Branchement direct Saxo Bank OpenAPI → SQLite (`trading_challenger.db`) : Les scripts workflow_18h30_quants.py et workflow_intraday_momentum.py interrogent directement les endpoints Saxo Bank (bougies Daily et bougies 5 minutes) et écrivent nativement dans les tables day_data et minutes_data de SQLite, supprimant toute dépendance à Supabase.
Étape 3 — Couronnement du Challenger : Le moteur Challenger devient l'unique système de production de Bourse V2.
Historique des Révisions Majeures
Date Version / Cycle Évolutions Déployées & Résultats Vérifiés
25-10-2026 Cycles CEO 1 à 6 (`US-11` à `US-22`) Déploiement de l'autonomie 100 % VPS OVH (challenger-api.service + 4 crons), Breakeven Floor (+0,38%), Fiche ADN Qualitatif (TIER 1/2/3), Radar News Pré-Ouverture (08h45), renommage en Portfolio, Screener Mensuel Small/Mid Caps PEA et mise à jour complète du Mémo. Win Rate porté à 87,14 % (Profit Factor 6,06, Max DD -111,77 €).
24-10-2026 Fondations Challenger (`US-01` à `US-10`) Création de la base SQLite trading_challenger.db, transcription Python des workflows 18h30 et 09h00–17h30, calibration Option B par action et création de l'escouade d'agents (CEO, Quant CI, Quali).
03-10-2026 Baseline Champion Documentation initiale de la stratégie Intraday Trailing Momentum sous n8n + Supabase (cutoff 16h30, allocation 2 500 €).