feat: simulation portfolio surveillance + patterns grid/filter UI

Portfolio Monitor (v4.4):
- New portfolio_risk.py service: concentration by asset_class, directional
  conflict detection (same underlying, opposite directions), overweight alerts
- AI agent (Step 7b) runs GPT-4o-mini after each cycle log: assessment +
  prioritized actions + rebalance suggestion, persisted in system_logs
- GET /api/journal/portfolio-risk — full risk breakdown + latest AI monitor reco
- POST /api/journal/trade-check — pre-entry conflict & concentration check
- asset_class column added to trade_entry_prices (auto-migration + populated at INSERT)
- Journal: new "Risque Sim." tab with concentration bars, conflict alerts,
  AI recommendations; red badge on tab when danger alerts exist

PatternEditor:
- Grid view default (2-3 cols responsive), list toggle
- Asset class filter chips (energy/metals/agri/equities/indices/forex/rates)
- Sort: Date (default) / Score IA / Prob.
- Period filter: Tout / 7j / 30j
- Result count badge when filters active

Doc: v4.3 → v4.4, updated Journal/PatternEditor/cycle steps/schema/glossary

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
OpenSquared
2026-06-19 15:49:46 +02:00
parent d34b4043fb
commit 58c3767a9d
8 changed files with 749 additions and 38 deletions

View File

@@ -3,7 +3,7 @@
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>GeoOptions Intelligence — Manuel Complet v4.3</title>
<title>GeoOptions Intelligence — Manuel Complet v4.4</title>
<style>
*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
body { font-family: 'Georgia', 'Times New Roman', serif; font-size: 10.5pt; line-height: 1.65; color: #1a1a2e; background: #fff; max-width: 960px; margin: 0 auto; padding: 40px 48px; }
@@ -239,7 +239,7 @@ li { margin-bottom: 4px; font-size: 9.5pt; }
<tr><td>5</td><td><strong>Options Lab</strong></td><td>IV Rank, IV Percentile, Term Structure, Skew, Open Interest pour tous tickers</td><td>Avant chaque trade</td></tr>
<tr><td>6</td><td><strong>Patterns IA</strong></td><td>Suggestions du cycle en cours avec scores, tailles Kelly, contre-thèses</td><td>À chaque cycle (6h)</td></tr>
<tr><td>7</td><td><strong>Portefeuille</strong></td><td>Positions ouvertes, P&L, concentration, alertes risque cluster</td><td>Quotidien</td></tr>
<tr><td>8</td><td><strong>Journal de Bord</strong></td><td>Trades ouverts (MtM + alertes cible/stop) · Trades fermés (P&L réalisé, win rate) · Fermeture 1-clic avec motif</td><td>Quotidien</td></tr>
<tr><td>8</td><td><strong>Journal de Bord</strong></td><td>Trades ouverts (MtM + alertes cible/stop) · Trades fermés (P&L réalisé, win rate) · <strong>Risque Sim.</strong> (conflits directionnels, concentration par classe d'actif, recommandations IA) · Fermeture 1-clic avec motif</td><td>Quotidien</td></tr>
<tr><td>9</td><td><strong>Rapport IA</strong></td><td>Texte complet de la dernière analyse GPT-4o, raisonnement visible</td><td>À chaque cycle</td></tr>
<tr><td>10</td><td><strong>Super Contexte</strong></td><td>Texte narratif enrichi injecté dans le méga-prompt : patterns matures, historique récent</td><td>Lecture mensuelle</td></tr>
<tr><td>11</td><td><strong>Analytics</strong></td><td>Win rate par pattern, PnL cumulé, distribution des scores, calibration Brier</td><td>Mensuel</td></tr>
@@ -456,6 +456,14 @@ final_relevance = clamp(base_relevance + ai_alignment, 0, 100)
<p><strong>Output :</strong> Tables <code>pattern_performance</code> et <code>bayesian_estimates</code> mises à jour</p>
</div>
<div class="step-block">
<div class="step-num">Étape 7b — Moniteur de Portefeuille Simulé <span class="badge badge-ai">GPT-4o-mini</span></div>
<p><strong>Input :</strong> Ensemble des trades ouverts dans <code>trade_entry_prices</code> après le log du cycle courant</p>
<p><strong>Traitement :</strong> Le service <code>portfolio_risk.py</code> analyse la répartition par classe d'actif, détecte les conflits directionnels (même sous-jacent, directions opposées) et les sur-concentrations (&gt; 35% en une seule classe). Si des alertes sont générées, GPT-4o-mini reçoit un résumé compact et produit : un assessment global en 2 phrases, une liste d'actions priorisées (<code>close_trade / rebalance / monitor</code>), et une suggestion de rééquilibrage.</p>
<p><strong>Output :</strong> Résultat persisté dans <code>system_logs</code> (source = <code>portfolio_monitor</code>). Affiché dans l'onglet <strong>Risque Sim.</strong> du Journal de Bord avec badge rouge sur l'onglet en cas de conflit. Étape non-bloquante : une erreur n'interrompt pas le cycle.</p>
<p><strong>Colonne ajoutée :</strong> <code>asset_class</code> maintenant stockée dans <code>trade_entry_prices</code> (migration automatique) — renseignée à chaque INSERT depuis le pattern d'origine.</p>
</div>
<div class="step-block">
<div class="step-num">Étape 8 — Notification &amp; Affichage</div>
<p><strong>Input :</strong> Patterns validés, alertes risque, signaux d'invalidation détectés</p>
@@ -1322,8 +1330,9 @@ Seuil : confidence &gt; 0.75 → ALERTE INVALIDATION générée dans l'UI
<table>
<thead><tr><th>Table</th><th>Colonnes Clés</th><th>Rôle</th></tr></thead>
<tbody>
<tr><td><code>portfolio</code></td><td>id, ticker, strategie, direction, score_entree, taille_eur, date_entree, date_expiration, pnl_actuel_pct, facteurs_risque_json, triggers_invalidation_json, statut</td><td>Positions options ouvertes avec métadonnées complètes</td></tr>
<tr><td><code>portfolio</code></td><td>id, ticker, strategie, direction, score_entree, taille_eur, date_entree, date_expiration, pnl_actuel_pct, facteurs_risque_json, triggers_invalidation_json, statut</td><td>Positions options ouvertes (portefeuille réel IBKR) avec métadonnées complètes</td></tr>
<tr><td><code>trades</code></td><td>id, portfolio_id, date_fermeture, pnl_final_pct, raison_fermeture, notes_trader</td><td>Historique complet des trades fermés</td></tr>
<tr><td><code>trade_entry_prices</code></td><td>id, run_id, pattern_id, pattern_name, underlying, strategy, <strong>asset_class</strong>, entry_price, entry_date, score_at_entry, horizon_days, status, pnl_realized, close_price, close_reason, target_pct, stop_loss_pct</td><td>Portefeuille simulé — trades logués par le cycle IA avec suivi MtM. <code>asset_class</code> permet la surveillance de la concentration par classe. Distinct du portefeuille réel IBKR.</td></tr>
<tr><td><code>invalidation_alerts</code></td><td>id, portfolio_id, trigger_text, confidence, news_citation, timestamp, acquittee</td><td>Alertes d'invalidation détectées et leur statut</td></tr>
</tbody>
</table>
@@ -1380,19 +1389,40 @@ Seuil : confidence &gt; 0.75 → ALERTE INVALIDATION générée dans l'UI
Lire TOUJOURS la contre-thèse avant de valider. Si elle vous semble plus probable que la thèse, rejeter le pattern même si le score est élevé. L'IA ne connaît pas votre contexte informationnel personnel.
</div>
<h3>Page — Éditeur de Patterns Géopolitiques</h3>
<p>L'éditeur de patterns (<code>PatternEditor</code>) est la bibliothèque de tous les patterns actifs — intégrés et personnalisés. Il offre :</p>
<ul>
<li><strong>Vue grille par défaut</strong> — affichage 23 colonnes adaptatif. Basculer en vue liste via le toggle <code>⊞ / ≡</code> en haut à droite.</li>
<li><strong>Filtres par classe d'actif</strong> — chips cliquables : ⚡ Énergie · 🥇 Métaux · 🌾 Agri · 📈 Actions · 📊 Indices · 💱 Forex · 📉 Taux. Click sur le chip actif = réinitialisation.</li>
<li><strong>Tri</strong> — trois modes : <em>Date</em> (plus récent en tête, défaut), <em>Score IA</em> (meilleur score du dernier cycle en tête), <em>Prob.</em> (probabilité déclarée décroissante).</li>
<li><strong>Filtre temporel</strong> — Tout / 7j / 30j (patterns ajoutés dans la période).</li>
<li>Badge de résultat ("<em>N résultats</em>") affiché dès qu'un filtre autre que "Tous types" est actif.</li>
</ul>
<p><strong>Quand agir :</strong> Après chaque cycle IA, filtrer par classe d'actif puis trier par Score IA pour identifier les patterns les plus alignés avec le régime actuel. Utiliser le filtre "7j" pour revoir uniquement les ajouts récents de l'IA.</p>
<h3>Page 7 — Portefeuille</h3>
<p><strong>Regarder en premier :</strong> Alertes de cluster (facteur saturé) en rouge. Puis P&L des positions matures (&gt;60% horizon).</p>
<p><strong>Quand agir :</strong> Position mature en profit +15% → prise de bénéfices partielle. Perte &gt;20% avec trigger d'invalidation détecté → fermer immédiatement.</p>
<h3>Page 8 — Journal de Bord</h3>
<p>Le Journal comporte 5 onglets : <strong>Cycles IA</strong> · <strong>Régimes Macro</strong> · <strong>Ouverts</strong> · <strong>Fermés</strong> · <strong>Alertes Géo</strong>.</p>
<p>Le Journal comporte <strong>6 onglets</strong> : <strong>Cycles IA</strong> · <strong>Régimes Macro</strong> · <strong>Risque Sim.</strong> · <strong>Ouverts</strong> · <strong>Fermés</strong> · <strong>Alertes Géo</strong>.</p>
<p><strong>Onglet Risque Sim. — Surveillance du Portefeuille Simulé :</strong></p>
<ul>
<li><strong>Répartition par classe d'actif</strong> — barres horizontales colorées (⚡ Énergie, 🥇 Métaux, 🌾 Agri, 📈 Actions, 📊 Indices, 💱 Forex, 📉 Taux) avec compteurs bull/bear par classe et pourcentage du portefeuille total.</li>
<li><strong>Alertes rouge — Conflits directionnels</strong> : le système détecte automatiquement deux trades de sens opposés sur le même sous-jacent (ex. long call EUR/USD + short put EUR/USD). Chaque conflit affiche les IDs des trades impliqués, leur direction, leur date d'entrée et le pattern associé.</li>
<li><strong>Alertes jaune — Concentration excessive</strong> : une classe d'actif représentant &gt; 35% du portefeuille simulé, ou 3+ trades sur le même sous-jacent, déclenchent une alerte de sur-exposition.</li>
<li><strong>Recommandations IA</strong> (panel bleu) : à chaque cycle, un agent GPT-4o-mini analyse les alertes détectées et génère un assessment en 2 phrases + une liste d'actions prioritaires (close_trade / rebalance / monitor) avec le sous-jacent et la raison. Mis à jour automatiquement après chaque cycle.</li>
<li>Badge rouge sur l'onglet dès qu'un conflit directionnel existe — visible sans entrer dans l'onglet.</li>
</ul>
<p><strong>Onglet Ouverts (Mark-to-Market) :</strong></p>
<ul>
<li>Chaque trade logué par le cycle affiche le <strong>P&L théorique</strong> en temps réel (prix actuel vs prix d'entrée), avec une <strong>barre Cible/Stop</strong> qui visualise la distance à l'objectif et au stop-loss.</li>
<li>Badge <code>🎯</code> = objectif de gain atteint (ex. +30%). Badge <code>🛑</code> = stop-loss déclenché (ex. -50%). Ces seuils sont configurés dans Config → "Paramètres de sortie" et peuvent être surchargés trade par trade.</li>
<li>Bouton 🔒 (colonne de droite) → ouvre le modal de fermeture : saisir le prix de clôture, choisir le motif (Objectif / Stop-loss / Signal IA / Manuel), ajouter une note. Le P&L réalisé est calculé automatiquement.</li>
<li>Badge <code>⚠ NO DATA / NO ENTRY / NO LIVE</code> en ambre sur l'underlying = données de prix manquantes pour ce trade, monitoring impossible.</li>
<li>Bouton 🔒 (colonne de droite, scroll horizontal) → ouvre le modal de fermeture : saisir le prix de clôture, choisir le motif (Objectif / Stop-loss / Signal IA / Manuel), ajouter une note. Le P&L réalisé est calculé automatiquement.</li>
</ul>
<p><strong>Onglet Fermés :</strong></p>
@@ -1401,8 +1431,13 @@ Seuil : confidence &gt; 0.75 → ALERTE INVALIDATION générée dans l'UI
<li>Table complète avec dates d'entrée/sortie, durée de détention, P&L réalisé coloré, motif de fermeture, note libre.</li>
</ul>
<p><strong>Regarder en premier :</strong> Onglet Fermés → win rate sur les 30/60/90 derniers jours. Si win rate en "Signal IA retourné" &lt; 45% → les signaux de retournement sont trop tardifs, abaisser le seuil dans Config.</p>
<p><strong>Quand agir :</strong> Badge 🎯 ou 🛑 visible dans l'onglet Ouverts → décider manuellement de fermer ou de laisser courir. Le système n'agit jamais automatiquement — la confirmation humaine est toujours requise.</p>
<p><strong>Regarder en premier :</strong> Onglet <strong>Risque Sim.</strong> en premier — badge rouge sur l'onglet = conflit directionnel actif à résoudre. Puis Onglet Fermés → win rate sur les 30/60/90 derniers jours.</p>
<p><strong>Quand agir :</strong> Conflit détecté → lire la recommandation IA et décider quel trade fermer. Badge 🎯 ou 🛑 dans l'onglet Ouverts → décider de fermer ou laisser courir. Le système n'agit jamais automatiquement — la confirmation humaine est toujours requise.</p>
<div class="callout amber">
<div class="label">Philosophie Portefeuille Simulé</div>
Le portefeuille simulé (trades logués) est traité avec les mêmes outils de gestion du risque que le portefeuille réel Interactive Brokers. La surveillance de la concentration par classe d'actif et la détection des conflits directionnels sont identiques — seule la source des trades diffère (cycle IA vs exécution manuelle IBKR).
</div>
<h3>Page 9 — Rapport IA</h3>
<p><strong>Regarder en premier :</strong> Section "Risques à Surveiller" — liste les catalyseurs à calendrier connu (réunions Fed, publications PMI, élections).</p>
@@ -1499,13 +1534,18 @@ Seuil : confidence &gt; 0.75 → ALERTE INVALIDATION générée dans l'UI
<tr><td><strong>Géo Score</strong></td><td>Score agrégé de tension géopolitique mondiale, 0100. Calculé par moyenne pondérée des scores régionaux. &gt;60 = élevé, &gt;75 = critique. Impacte directement les suggestions IA.</td></tr>
<tr><td><strong>Trigger d'Invalidation</strong></td><td>Événement spécifique dont l'occurrence remet en cause la thèse d'un trade. Surveillance automatique via RSS + GPT-4o-mini à chaque cycle. Alerte si confidence &gt; 0.75.</td></tr>
<tr><td><strong>Factor Clustering</strong></td><td>Classification des positions par facteur de risque sous-jacent (géopolitique, inflation, dollar, liquidité) pour détecter les corrélations cachées entre positions de secteurs différents.</td></tr>
<tr><td><strong>Portefeuille Simulé</strong></td><td>Ensemble des trades logués automatiquement par le cycle IA dans la table <code>trade_entry_prices</code>. Distinct du portefeuille réel Interactive Brokers. Soumis aux mêmes outils d'analyse du risque (concentration, conflits, P&L MtM). Ne déclenche aucune exécution — simulation et apprentissage uniquement.</td></tr>
<tr><td><strong>Conflit Directionnel</strong></td><td>Situation où deux trades ouverts dans le portefeuille simulé ont des directions opposées sur le même sous-jacent (ex. long call XLE + short put XLE). Détecté automatiquement par <code>portfolio_risk.py</code>. Déclenche une alerte rouge dans l'onglet Risque Sim. et une recommandation IA de fermeture.</td></tr>
<tr><td><strong>Moniteur de Portefeuille IA</strong></td><td>Agent GPT-4o-mini (Step 7b du cycle) qui analyse l'état du portefeuille simulé après chaque log de trades. Produit un assessment global + liste d'actions (close / rebalance / monitor) + suggestion de rééquilibrage. Non-bloquant et persisté dans system_logs pour affichage dans le Journal.</td></tr>
<tr><td><strong>Concentration de Classe</strong></td><td>Pourcentage d'une classe d'actif (energy, metals, agriculture, equities, indices, forex, rates) dans le portefeuille simulé total. Seuil d'alerte : &gt; 35%. Affiché sous forme de barres horizontales colorées dans l'onglet Risque Sim.</td></tr>
<tr><td><strong>Price Warning</strong></td><td>Badge ambre sur un trade dans l'onglet Ouverts : <code>NO DATA</code> (ni prix d'entrée ni prix actuel disponible), <code>NO ENTRY</code> (prix d'entrée absent), <code>NO LIVE</code> (prix actuel non récupéré). Signale que le monitoring MtM est impossible pour ce trade.</td></tr>
</tbody>
</table>
<hr>
<div class="footer-doc">
<p>Document généré le 19 juin 2026 · GeoOptions Intelligence v4.3</p>
<p>Document généré le 19 juin 2026 · GeoOptions Intelligence v4.4</p>
<p>FastAPI + React + SQLite + GPT-4o · Usage interne trader · Confidentiel</p>
<p>Sections : Architecture · Cycle complet simulé · Phase 1 IV/Structure · Phase 2 Fiabilité/Calibration · Phase 3 Risk Engine · Phase 4 IA Probabiliste · 6 Prompts IA · 14+ Tables DB · Guide 15 pages · 10 Décisions conception · Glossaire 35+ termes</p>
</div>