GeoOptions Intelligence est un cockpit de trading d'options à usage personnel, conçu pour un trader individuel opérant sur Interactive Brokers avec des positions de l'ordre de 1 000 € par trade et un horizon moyen de 3 mois. Le système fusionne en temps quasi-réel trois flux d'information hétérogènes — données de marché financières (prix, volatilité implicite, open interest), signaux géopolitiques (flux RSS de presse internationale, scores de tension par région) et analyse macroéconomique (régime macro dominant parmi 4 états : Expansion, Stagflation, Récession, Stress Géopolitique) — pour générer des suggestions de patterns de trading options avec probabilités de succès, tailles de position ajustées au risque, et contre-thèses d'invalidation. L'ensemble tourne sur un VPS Linux sous FastAPI (backend) et React (frontend), avec SQLite comme base de données persistante et GPT-4o comme moteur de raisonnement.
start_all.bat (Windows dev) ou pm2 (VPS)| # | Page | Description | Fréquence d'usage |
|---|---|---|---|
| 1 | Dashboard | Vue synthétique : KPIs macro, dernière analyse IA, signaux marché du jour | Plusieurs fois/jour |
| 2 | Radar Géopolitique | Carte interactive des tensions mondiales par région, score géo global 0–100 | Quotidien |
| 3 | Marchés | Prix temps réel : actions, ETF, matières premières, crypto, forex avec variations | Quotidien |
| 4 | Régime Macro | État actuel (Expansion/Stagflation/Récession/Stress Géo), scores, historique | Hebdomadaire |
| 5 | Options Lab | IV Rank, IV Percentile, Term Structure, Skew, Open Interest pour tous tickers | Avant chaque trade |
| 6 | Patterns IA | Suggestions du cycle en cours avec scores, tailles Kelly, contre-thèses | À chaque cycle (6h) |
| 7 | Portefeuille | Positions ouvertes, P&L, concentration, alertes risque cluster | Quotidien |
| 8 | Journal de Bord | Trades historiques, filtres par pattern/date/résultat, statistiques de performance | Hebdomadaire |
| 9 | Rapport IA | Texte complet de la dernière analyse GPT-4o, raisonnement visible | À chaque cycle |
| 10 | Super Contexte | Texte narratif enrichi injecté dans le méga-prompt : patterns matures, historique récent | Lecture mensuelle |
| 11 | Analytics | Win rate par pattern, PnL cumulé, distribution des scores, calibration Brier | Mensuel |
| 12 | Analytics Avancées | Clustering K-Means, matrices de transition, embeddings, déduplications sémantiques | Mensuel |
| 13 | Risk Dashboard | HHI, drawdown attendu, alertes concentration facteur, Kelly par position | Avant chaque trade |
| 14 | Config | Paramètres système : seuils Kelly, capital, intervalles cycle, clé API, tickers | Initial + rare |
| 15 | Knowledge Base | Base de patterns manuels, demi-vie, tags géopolitiques, édition directe | Mensuel |
Le système tourne un cycle complet toutes les 6 heures (configurable). Voici une simulation fidèle d'un cycle réel avec des données fictives mais réalistes.
Input : Liste de tickers configurés (XLE, GLD, VIX, SPY, TLT, DXY, USDCAD, etc.)
Traitement : Appel yfinance pour prix spot, variation J-1, volume. Calcul des ratios dérivés.
Output (données simulées) :
| Ticker | Prix | Var. Jour | Signal |
|---|---|---|---|
| VIX | 24.3 | +8.2% | Stress modéré |
| Brent | $89.40 | +3.1% | Choc offre |
| DXY | 104.2 | -0.4% | Dollar faible |
| Or (GLD) | $2,380 | +1.2% | Flight-to-safety |
| Cuivre | $3.82 | -1.8% | Demande industrielle faible |
| Pente 10Y-3M | -0.42% | — | Inversion (récession) |
Règle appliquée : Si VIX > 20 ET Brent > +2% → signal "choc d'offre pétrolier probable". Si pente < 0 → signal "risque récession". Ces deux signaux sont encodés et transmis à l'étape suivante.
Input : ~50 indicateurs de marché (yfinance batch) couvrant 6 blocs : Liquidité, Crédit, Énergie, Métaux, Croissance, Dérivés.
Algorithme en 3 couches :
Couche 1 — Signaux multi-périodes (anti-bruit) : Chaque variation est un blend pondéré pour éliminer le bruit intraday.
Couche 2 — Scoring par règles sur 8 régimes : Goldilocks, Désinflation, Soft Landing, Reflation, Stagflation, Choc Inflationniste, Récession, Crise de Liquidité. Chaque régime accumule des points (0–100) via ~15 conditions if/elif sur les signaux blendés.
Couche 3 — Lissage Bayésien + persistance : Les scores bruts sont blendés avec la moyenne glissante des 3–25 derniers jours (poids prior : 15%→45% selon la profondeur d'historique). Un régime résiste au changement si le nouveau leader ne le dépasse pas de 10 pts.
Bootstrap au démarrage : Au premier chargement, le système rejoue automatiquement les 20 derniers jours de cotations (via yf.download batch 45j) pour pré-remplir l'historique. La détection est stable dès la première ouverture de la page.
Output : Régime dominant lissé + score de stabilité (nombre de jours consécutifs) + biais par classe d'actifs. Affiché en bandeau sur la page Régime Macro.
Input : 7 flux RSS (Reuters World/Business/Commodities, AP, Al Jazeera, FT, Bloomberg) — jusqu'à 50 articles, cache 1h.
Pipeline en 3 couches :
Couche 1 — Classification déterministe (sans IA) :
classify_news() : correspondance de mots-clés → catégorie (military, energy, sanctions, elections, trade_war…)estimate_impact() : comptage de mots à risque → score 0.0–1.0 brutextract_tags() : entités nommées (Trump, Russia, OPEC…) par présence textuelleCouche 2 — Enrichissement GPT-4o-mini GPT-4o-mini (jusqu'à 20 news, 1 seul appel batch) :
Couche 3 — Alignement IA sur les patterns (dans compute_pattern_relevance()) :
Score géo calculé : utilise les impact_score corrigés par l'IA (plus de faux positifs sur les articles culturels ou sportifs mentionnant "Iran").
Input : Liste des tickers options (XLE, GLD, SPY, QQQ, TLT, USDCAD, VIX)
Traitement : Pour chaque ticker, calcul de IV Rank, IV Percentile, Term Structure (déformation courbe IV), Put/Call OI Ratio.
Résultats simulés :
| Ticker | IV Actuelle | IV Rank | IV Pctile | Structure | PC Ratio | Signal |
|---|---|---|---|---|---|---|
| XLE | 32% | 35% | 73% | Contango | 0.82 | Vente vol possible |
| GLD | 18% | 22% | 41% | Plat | 1.15 | Acheter protection |
| SPY | 21% | 48% | 59% | Légère backwardation | 1.38 | Neutre — attendre |
| TLT | 15% | 18% | 32% | Contango | 1.05 | IV Rank trop bas |
| USDCAD | 8% | 52% | 61% | Plat | 0.94 | Neutre |
| QQQ | 24% | 78% | 82% | Backwardation | 1.52 | Vendre vol |
| VIX | 24.3 | 61% | 68% | Backwardation | — | Vol short terme élevée |
Ces données sont encodées dans le méga-prompt de l'Étape 5.
Input : Base de données Knowledge Base (patterns historiques), trades des 90 derniers jours, insights récents avec scores de fiabilité
Gate de 6 heures : Le Super Contexte n'est régénéré que si le précédent a plus de 6 heures. Ceci évite de surcharger le contexte GPT-4o avec des données quasi-identiques entre deux cycles rapprochés.
Contenu généré (extrait simulé) :
Règle "trades matures uniquement" : Seuls les trades ayant consommé plus de 40% de leur horizon temporel sont inclus dans le contexte. Un trade ouvert depuis 5 jours pour 90 jours (5.5%) n'est pas encore informatif.
Structure du prompt (voir Section 7 pour le détail complet) :
Coût estimé : ~4,500 tokens input + ~800 tokens output ≈ 0.058$ par cycle (à 6h → ~0.23$/jour)
Input : Réponse JSON brute de GPT-4o
Filtres appliqués :
Output : 2–4 patterns validés, stockés dans la table analyses_ia
Input : Tous les trades fermés depuis le dernier cycle avec résultat (win/loss)
Traitement : Pour chaque pattern associé à un trade fermé, mise à jour du posterior bayésien (α, β). Le score GPT initial est utilisé comme prior. Voir Section 6.1 pour le détail.
Output : Tables pattern_performance et bayesian_estimates mises à jour
Input : Patterns validés, alertes risque, signaux d'invalidation détectés
Output : Mise à jour du frontend React (polling toutes les 60 secondes), envoi d'une notification push si score > 75 ou alerte risque critique
Durée totale du cycle : 47–120 secondes (selon disponibilité API OpenAI)
{
"analyse_globale": "Le contexte de stagflation confirmé (72%) combiné à un choc pétrolier en cours (Brent +3.1%, OPEC+ réunion d'urgence) et aux tensions en Asie du Nord-Est crée un environnement favorable aux stratégies longues volatilité sur l'énergie et aux protections défensives sur les indices. L'inversion de la courbe (-0.42%) renforce le risque de récession à 6-9 mois.",
"patterns": [
{
"nom": "Choc Pétrolier Corée du Nord — Perturbation Routes Énergétiques",
"strategie": "Long call spread XLE $90/$98 — expiration Septembre 2026",
"ticker_principal": "XLE",
"score_confiance": 78,
"probabilite_succes": 0.68,
"horizon_jours": 75,
"taille_kelly_pct": 12.4,
"raisonnement": "Le tir de missile nord-coréen perturbe les routes de navigation en mer du Japon et amplifie l'effet OPEC+. L'IV Rank de XLE à 35% est raisonnable pour acheter des calls. Le call spread limite le coût si la hausse est progressive.",
"contre_these": "Si les négociations diplomatiques US-Corée du Nord reprennent rapidement, la prime de risque géopolitique se dégonfle. Probabilité : 28%.",
"trigger_invalidation": "Annonce de contacts diplomatiques US-RPDC ou retrait des forces navales nord-coréennes",
"facteurs_risque": ["géopolitique", "énergie"],
"ajustement_cluster": "Facteur géo à 60% — taille réduite de 50%"
},
{
"nom": "Flight-to-Safety Or — Dollar Faible + VIX Hausse",
"strategie": "Long call GLD $195 — expiration Août 2026",
"ticker_principal": "GLD",
"score_confiance": 71,
"probabilite_succes": 0.65,
"horizon_jours": 45,
"taille_kelly_pct": 8.7,
"raisonnement": "Or à +1.2% en même temps que dollar faible (-0.4%) et VIX hausse = configuration classique de fuite vers la sécurité. IV Rank GLD à 22% (cheap) → acheter de la vol est justifié. Objectif $2,450.",
"contre_these": "Si le dollar rebondit sur des données économiques US solides (NFP, CPI surprise), l'or recule mécaniquement.",
"trigger_invalidation": "DXY +1.5% sur une session / NFP > 300K / CPI core < 2.8%",
"facteurs_risque": ["dollar", "inflation"],
"ajustement_cluster": "Facteur dollar saturé (53%) — taille réduite de 50%"
},
{
"nom": "Compression Volatilité QQQ — Pic VIX Technologique",
"strategie": "Short strangle QQQ $460/$510 — expiration Juillet 2026",
"ticker_principal": "QQQ",
"score_confiance": 64,
"probabilite_succes": 0.61,
"horizon_jours": 30,
"taille_kelly_pct": 6.2,
"raisonnement": "QQQ IV Rank à 78% (cher) avec backwardation → vendre de la vol. Le stress géo actuel est concentré sur l'énergie et l'Asie du Nord-Est, pas sur les techs. Short strangle profite du time decay si le marché reste dans la range.",
"contre_these": "Si NVDA ou MSFT publie des résultats décevants ou si une escalade géopolitique touche les semi-conducteurs (Taiwan), mouvement directionnel brutal.",
"trigger_invalidation": "VIX > 30 / Annonce guerre Taiwan / Earnings QQQ -10% gap",
"facteurs_risque": ["liquidité", "technologie"],
"ajustement_cluster": "Facteurs non saturés — taille nominale maintenue"
}
]
}
La volatilité implicite (IV) d'une option mesure ce que le marché "pense" de la volatilité future du sous-jacent. Mais une IV de 32% est-elle chère ou pas chère ? Tout dépend de l'historique récent. C'est le rôle de l'IV Rank et de l'IV Percentile.
Données : IV actuelle = 32% · IV min 52 semaines = 18% · IV max 52 semaines = 58%
Interprétation IV Rank 35% : La volatilité actuelle est dans le tiers inférieur de sa plage annuelle. Elle est relativement bon marché par rapport à son propre historique récent.
Divergence IV Rank vs IV Percentile : IV Rank = 35% mais IV Percentile = 73% — c'est possible ! Cela signifie que l'IV a passé beaucoup de temps sous 32%, mais les pics (jusqu'à 58%) tirent la moyenne haute. Le Rank est distordu par ce pic exceptionnel. Dans ce cas, le Percentile est plus informatif.
| Ticker | IV Actuelle | IV Min 52s | IV Max 52s | IV Rank | IV Pctile | Signal |
|---|---|---|---|---|---|---|
| XLE | 32% | 18% | 58% | 35% (cheap) | 73% | Acheter vol prudent |
| GLD | 18% | 12% | 34% | 27% (cheap) | 41% | IV bon marché |
| QQQ | 24% | 14% | 38% | 83% (cher) | 82% | Vendre vol |
| SPY | 21% | 13% | 42% | 55% (neutre) | 59% | Attendre |
| TLT | 15% | 11% | 28% | 24% (cheap) | 36% | Acheter protection |
| IWM | 28% | 16% | 48% | 38% (neutre-bas) | 52% | Neutre |
| USO | 41% | 22% | 65% | 44% (neutre) | 61% | Attendre |
| VXX | 62% | 45% | 120% | 23% (cheap) | 38% | Acheter vol longue |
La term structure décrit la forme de la courbe d'IV selon les expirations. Le skew décrit l'asymétrie de l'IV entre les puts et calls pour une même expiration.
Observation : Strike Call XLE $92 · Expiration Septembre 2026
| Strike | OI Calls | OI Puts | OI Moyen Calls (12m) | Signal |
|---|---|---|---|---|
| $88 | 12,400 | 18,600 | 9,200 | Normal |
| $90 | 22,800 | 15,200 | 11,000 | Légèrement élevé |
| $92 | 45,000 | 8,400 | 8,000 | INHABITUEL — 5.6x moyenne |
| $95 | 18,200 | 6,100 | 7,500 | Élevé mais explicable |
| $98 | 9,600 | 4,200 | 5,200 | Normal |
Interprétation : OI calls $92 = 45,000 contrats vs moyenne 8,000 → mur de résistance potentiel à $92. Deux scénarios possibles :
Le Dealer Gamma mesure si les market makers sont globalement "long gamma" ou "short gamma". C'est une estimation basée sur l'OI et les grecs approximatifs.
Le Pattern Reliability Score (PRS) mesure la fiabilité statistique d'un pattern basé sur son historique de trades réels. Il pénalise les petits échantillons et récompense les win rates élevés sur de nombreux trades.
| Pattern | Trades | Wins | Win Rate | PnL Moyen | Score Fiabilité | Statut |
|---|---|---|---|---|---|---|
| Choc Pétrolier Moyen-Orient | 28 | 19 | 68% | +12.4% | 2.27 | Fiable |
| Hausse Or Flight-to-Safety | 19 | 14 | 72% | +9.8% | 1.87 | Fiable |
| Escalade Taiwan Strait | 12 | 7 | 58% | +8.1% | 1.28 | Prometteur |
| Hausse Taux Fed Surprise | 7 | 3 | 43% | -2.3% | 0.55 | Faible |
| Crise Dollar Marchés Émergents | 4 | 3 | 75% | +18.2% | 1.04 ⚠ | Petit échantillon |
| Pénurie Blé Ukraine Escalade | 3 | 1 | 33% | -5.1% | 0.46 🔴 | Insuffisant |
Avec seulement 4 trades, l'intervalle de confiance binomial à 95% pour un win rate de 75% est [19.4%, 99.4%]. C'est extrêmement large. Le vrai win rate pourrait tout aussi bien être 20% ou 99%.
Avec 28 trades, l'intervalle est [48.8%, 83.1%] — beaucoup plus informative. La formule reflète naturellement cette réalité : le score "achète" de la crédibilité au fil des trades.
score_insuffisant = True en DB).
Chaque pattern généré par GPT-4o inclut obligatoirement une contre-thèse et un trigger d'invalidation. C'est l'une des protections les plus importantes du système contre le biais de confirmation.
| Thèse | "L'escalade en mer de Chine méridionale va perturber les routes pétrolières et faire monter XLE" → Long XLE calls $90, expiration Septembre 2026 |
| Contre-thèse | "La Chine bluff diplomatiquement pour forcer des concessions commerciales. Si les négociations reprennent, la prime de risque disparaît et le pétrole recule de 5–8%." |
| Triggers d'invalidation | 1. Annonce de pourparlers diplomatiques directs US-Chine en mer de Chine 2. Retrait des navires militaires chinois de la zone contestée 3. Déclaration conjointe ASEAN de "de-escalation" 4. Brent recule de plus de 4% en une séance |
| Probabilité d'invalidation | 35% (estimée par GPT-4o, à ajuster si des nouvelles émergent) |
| Action si trigger détecté | Alerte rouge dans l'interface, suggestion de fermer ou de réduire la position de 50% |
À chaque cycle (6h), le système passe les titres RSS dans GPT-4o-mini avec les triggers stockés en base pour chaque position ouverte. Si une correspondance sémantique est détectée (score cosinus > 0.82), une alerte d'invalidation est générée.
Le score de Brier mesure la précision des probabilités estimées par GPT-4o. Un modèle bien calibré annonce 70% quand la réalité est vraie 70% du temps.
| Bucket Prédit | Nb Trades | Taux Réel | Biais | Diagnostic |
|---|---|---|---|---|
| 10–20% | 8 | 13% | -3% | Bien calibré |
| 30–40% | 18 | 38% | -1% | Excellent |
| 50–60% | 31 | 52% | -6% | Légèrement surconfiant |
| 60–70% | 28 | 42% | -23% | SURCONFIANT |
| 80–90% | 14 | 61% | -25% | TRÈS SURCONFIANT |
Les insights de la Knowledge Base ont une durée de vie limitée. Le système gère une demi-vie de 180 jours (configurable) pour déprécier automatiquement les insights anciens.
| Date | Âge | Poids | Statut |
|---|---|---|---|
| Oct 2025 (création) | 0j | 1.00 | Actif, prioritaire |
| Jan 2026 | 90j | 0.71 | Actif, légèrement déprécié |
| Avr 2026 | 180j | 0.50 | Demi-vie atteinte |
| Oct 2026 | 360j | 0.25 | Archivage recommandé |
Règle système : Si poids < 0.15 ET l'événement géopolitique n'est plus détecté dans les flux RSS depuis 30 jours → insight archivé automatiquement et exclu du Super Contexte.
| Position | Secteur | Score Entrée | P&L | % Horizon | Taille € | Statut |
|---|---|---|---|---|---|---|
| Long XLE call spread $90/$98 Sept26 | Énergie | 78 | +14.2% | 67% | 1,240€ | Mature — surveiller sortie |
| Long GLD call $195 Août26 | Métaux | 62 | -3.1% | 18% | 820€ | Début — laisser courir |
| Short VIX straddle $22/$28 Juil26 | Indices | 71 | +8.7% | 52% | 980€ | Mature — surveiller VIX |
| Long USDCAD call 1.39 Juil26 | Forex | 55 | +2.3% | 8% | 460€ | Trop tôt — patience |
Deux positions dans des secteurs différents peuvent être exposées au même facteur de risque sous-jacent. Le Cluster Engine identifie ces dépendances cachées.
| Position | Facteur Géopolitique | Facteur Inflation | Facteur Dollar | Facteur Liquidité |
|---|---|---|---|---|
| Long XLE call spread | 60% | 40% | 0% | 0% |
| Long GLD call | 20% | 50% | 80% | 0% |
| Short VIX straddle | 0% | 0% | 0% | 80% |
| Long USDCAD call | 0% | 20% | 70% | 10% |
| Approche | Fraction Kelly | Taille (10k€) | Drawdown max espéré | Recommandation |
|---|---|---|---|---|
| Kelly Complet | 55.2% | 5,520€ | -65% (ruine possible) | JAMAIS |
| Kelly × 1/2 | 27.6% | 2,760€ | -38% | Agressif |
| Kelly × 1/3 | 18.4% | 1,840€ | -22% | Recommandé |
| Kelly × 1/4 | 13.8% | 1,380€ | -15% | Conservateur |
| Kelly × 1/3 + ajust. cluster | 9.2% | 920€ | -10% | Appliqué ici |
La mise à jour bayésienne permet au système d'apprendre des résultats réels pour corriger les probabilités estimées par GPT-4o.
| Étape | Trades | Wins | α | β | Posterior | IC 95% |
|---|---|---|---|---|---|---|
| Initial (prior neutre) | 0 | — | 1 | 1 | 50.0% | ±35% |
| 5 trades (3 wins) | 5 | 3 | 4 | 3 | 57.1% | ±28% |
| 12 trades (8 wins) | 12 | 8 | 9 | 5 | 64.3% | ±18% |
| 28 trades (19 wins) | 28 | 19 | 20 | 10 | 66.7% | ±9.2% |
Conclusion : Prior GPT (65%) et posterior (66.7%) convergent. GPT-4o était bien calibré sur ce pattern. Intervalle final : [57.5%, 75.9%].
| Étape | Trades | Wins | Posterior | Dérive vs Prior |
|---|---|---|---|---|
| 5 trades (2 wins) | 5 | 2 | 42.9% | -37.1% |
| 10 trades (4 wins) | 10 | 4 | 41.7% | -38.3% |
| 15 trades (7 wins) | 15 | 7 | 47.1% | -32.9% |
Diagnostic : Dérive de -32.9% — GPT surestimait massivement. Biais probable : sur-représentation médiatique des coups d'état africains dans le training data. Pattern automatiquement déclassé.
| Pattern | Prior GPT | Trades | Posterior | Dérive | Verdict |
|---|---|---|---|---|---|
| Choc Pétrolier MO | 65% | 28 | 66.7% | +1.7% | Bien calibré |
| Hausse Or Safety | 70% | 19 | 72.4% | +2.4% | Bien calibré |
| Escalade Tarifaire US-CN | 65% | 12 | 58.3% | -6.7% | Légèrement surconfiant |
| Coup d'État Afrique | 80% | 15 | 47.1% | -32.9% | TRÈS SURCONFIANT |
| Recession Tech Short | 55% | 9 | 50.0% | -5.0% | Acceptable |
| Hausse Taux Fed Surprise | 60% | 7 | 37.5% | -22.5% | Surconfiant |
Le clustering K-Means (implémenté en pur Python) identifie automatiquement le régime macroéconomique actuel.
| Feature | Mesure | Signal Principal |
|---|---|---|
| VIX | Niveau absolu (z-score 252j) | Stress / Panique |
| slope_10y3m | Spread taux 10Y - 3M | Récession (si <0) |
| DXY_change | Variation 1 mois dollar | Risk-off si fort |
| Brent_change | Variation 1 mois pétrole | Inflation / Géopolitique |
| Gold_change | Variation 1 mois or | Flight-to-safety |
| Copper_change | Variation 1 mois cuivre | Demande industrielle |
| SPX_vs_200d | SPX / MA200 - 1 | Trend bull/bear |
| Date | VIX | Slope | DXY | Brent | Gold | Copper | SPX/200d | Cluster Identifié |
|---|---|---|---|---|---|---|---|---|
| Oct 2022 | 32 | -0.8% | +2.1% | +4.5% | -1.2% | -2.3% | -15% | Cluster 2 — Récession/Risk-Off |
| Mar 2024 | 14 | +0.2% | -0.3% | +0.5% | +0.8% | +1.2% | +12% | Cluster 1 — Expansion Tranquille |
| Juin 2026 | 24 | -0.42% | -0.4% | +3.1% | +1.2% | -1.8% | -2% | Cluster 0 — Stress Géopolitique |
| De / Vers → | Expansion | Stress Géo | Récession | Stagflation |
|---|---|---|---|---|
| Expansion | 68% | 12% | 8% | 12% |
| Stress Géo | 18% | 52% | 15% | 15% |
| Récession | 22% | 8% | 58% | 12% |
| Stagflation | 10% | 20% | 15% | 55% |
Avant d'ajouter un pattern à la KB, le système vérifie l'absence de doublon sémantique. Jaccard (mots communs) rate la majorité des doublons réels. Les embeddings capturent le sens.
Pattern A : "Escalade tensions Taiwan Strait" · Pattern B : "Taiwan military conflict risk"
Pattern C : "Fed rate hike cycle accelerates" · Pattern D : "Monetary policy tightening pressure"
| Candidat | Pattern Existant | Jaccard | Cosine | Décision |
|---|---|---|---|---|
| Escalade Taiwan Strait | Taiwan military conflict | 14% | 0.89 | REJETÉ (cosine) |
| Fed rate hike cycle | Monetary policy tightening | 0% | 0.82 | REJETÉ (cosine) |
| OPEC supply cut shock | Choc pétrolier MO | 8% | 0.78 | REJETÉ (cosine) |
| Crypto crash régulation | Choc pétrolier MO | 0% | 0.12 | ACCEPTÉ — nouveau pattern |
| Pénurie céréales Inde | Pénurie Blé Ukraine | 22% | 0.71 | ACCEPTÉ — distinct |
| Section | Contenu | Question Clé | Action si Problème |
|---|---|---|---|
| Calibration Brier | Courbe prédit vs réalisé par bucket, score Brier global, trend 6 mois | "GPT-4o est-il trop confiant ?" | Appliquer un facteur de déflation sur scores >65% |
| Analyse Bayésienne | Prior vs posterior par pattern, dérive, IC 95%, convergence | "Le modèle apprend-il dans la bonne direction ?" | Déclasser patterns avec dérive >20% |
| Clustering Régimes | Projection 2D (PCA), centroides, matrice transition, anomalies | "Dans quel régime sommes-nous ?" | Si >3 changements en 30j → réduire tailles |
| Déduplication KB | Heatmap similarités cosine, clusters sémantiques | "La KB a-t-elle des doublons ?" | Fusions manuelles si cosine > 0.85 |
GeoOptions utilise 6 appels GPT distincts, chacun avec un rôle précis et une structure optimisée.
| Élément | Contenu | Pourquoi |
|---|---|---|
| Système | "Analyste géopolitique spécialisé en risques de marché financier." | Contextualise sur le cas d'usage financier, évite les analyses politiques sans lien trading |
| Input | Jusqu'à 20 news (titre + 150 chars résumé), indexées 0..N | Batch unique pour minimiser les appels API — réponse JSON structurée par index |
| Instruction | Par news : impact_score corrigé, dir_energy/metals/indices (bullish|bearish|neutral), resolution (bool), insight (1 phrase FR sur l'effet marché) | Les signaux directionnels permettent de détecter les contre-signaux sur les patterns (cessez-le-feu → pétrole baissier même si le mot "Iran" est présent) |
| Exclusions | Pas de contexte macro, pas d'historique de trades, pas de positions ouvertes | Évite le biais de confirmation — l'IA évalue la news indépendamment du portefeuille |
| Cache | Flag ai_scored par item — pas de double scoring sur le même cache 1h | Économie : chaque news n'est scorée qu'une fois par cycle |
ai_dir_energy="bearish", ai_resolution=true → alignment = -20 pts → similarity passe de 60% à 40% → pattern downranké, badge rouge "🤖 contre-signal".
SYSTÈME : "Expert en macroéconomie et cycles économiques. Classifiez le régime
actuel parmi : Expansion, Stagflation, Récession, Stress Géopolitique."
INPUT : VIX, slope 10Y-3M, DXY change, Brent change, Gold change,
Copper change, SPX vs MA200, CPI, PMI Manufacturing
OUTPUT JSON :
{
"regime_dominant": "STAGFLATION",
"score_dominant": 72,
"regimes": {"expansion": 11, "stagflation": 72, "recession": 42, "stress_geo": 63},
"indicateurs_cles": ["Brent +3.1%", "Cuivre -1.8%", "Pente -0.42%"],
"duree_regime_estimee_jours": 45
}
| Élément injecté | Source | Condition d'inclusion |
|---|---|---|
| Patterns KB fiables | Table knowledge_base | Score fiabilité > 1.5 ET poids demi-vie > 0.3 |
| Trades récents fermés | Table trades | Fermés dans les 30 derniers jours ET maturité > 40% |
| Trades ouverts | Table portfolio | Maturité horizon > 40% (trades "informatifs") |
| Alertes portefeuille | Risk Engine | Toujours inclus — filtres permanents |
| Patterns récents refusés | Table analyses_ia | Rejetés par le trader dans les 14 derniers jours |
SYSTÈME : "Expert options trader spécialisé en géopolitique, macroéconomie et volatilité implicite. Suggérer 3 à 5 patterns pour trader individuel ~1,000€ par position, horizon 3 mois, Interactive Brokers." CONTEXTE MARCHÉ : [Prix, VIX, Brent, DXY, Or, pente 10Y-3M...] RÉGIME MACRO : [Output Prompt 2 : STAGFLATION 72%...] CONTEXTE GÉO : [Output Prompt 1 : Geo Score 68, tensions par région...] MÉTRIQUES OPTIONS : [IV Rank, term structure, skew, PC Ratio par ticker...] SUPER CONTEXTE : [Output Prompt 3 : patterns fiables, trades récents, risques] CONTRAINTES OBLIGATOIRES : - Chaque pattern inclut : ticker, stratégie (strikes estimés), probabilité 0.0-1.0, horizon jours, contre-thèse, trigger invalidation, facteurs risque, taille Kelly% - IV Rank doit correspondre à la stratégie (vendre vol si rank >75%) - Ne pas suggérer patterns sur facteurs saturés sans réduction taille notée FORMAT : JSON strict avec champs définis.
Une fois les patterns filtrés et validés algorithmiquement, ce prompt crée le rapport narratif visible dans la page "Rapport IA". Il explique le raisonnement, les patterns refusés et les risques à surveiller.
| Table | Colonnes Clés | Rôle | Rétention |
|---|---|---|---|
market_data | ticker, timestamp, price, change_pct, volume, iv_current, iv_rank, iv_percentile | Prix et métriques marché par cycle | 180 jours |
geo_signals | timestamp, region, score, events_json, impact_oil, impact_gold, impact_usd | Scores géopolitiques par région, par cycle | 365 jours |
macro_regime | timestamp, regime_dominant, score_expansion, score_stagflation, score_recession, score_stress_geo, indicateurs_json | Historique des régimes macroéconomiques | Permanent |
options_flow | ticker, timestamp, strike, expiration, oi_calls, oi_puts, pc_ratio, iv_term_structure_json | Open Interest et structure de la volatilité | 90 jours |
| Table | Colonnes Clés | Rôle |
|---|---|---|
analyses_ia | id, timestamp, cycle_id, patterns_json, rapport_narratif, tokens_used, cost_usd, regime_at_time | Archive de toutes les sorties GPT-4o avec coûts |
knowledge_base | id, nom, description, strategie, ticker, facteurs_risque, score_fiabilite, nb_trades, win_rate, pnl_moyen, created_at, last_updated, halflife_weight, embedding_vector | Base de patterns avec scores et embeddings sémantiques |
pattern_performance | pattern_id, trade_id, resultat, pnl_pct, score_entree, regime_entree, regime_sortie | Lien entre patterns et résultats réels des trades |
super_contexte | id, timestamp, contenu_text, tokens_count, last_generated_at | Cache du Super Contexte avec gate 6 heures |
| Table | Colonnes Clés | Rôle |
|---|---|---|
portfolio | id, ticker, strategie, direction, score_entree, taille_eur, date_entree, date_expiration, pnl_actuel_pct, facteurs_risque_json, triggers_invalidation_json, statut | Positions options ouvertes avec métadonnées complètes |
trades | id, portfolio_id, date_fermeture, pnl_final_pct, raison_fermeture, notes_trader | Historique complet des trades fermés |
invalidation_alerts | id, portfolio_id, trigger_text, confidence, news_citation, timestamp, acquittee | Alertes d'invalidation détectées et leur statut |
| Table | Colonnes Clés | Rôle |
|---|---|---|
bayesian_estimates | pattern_id, alpha, beta, prior_gpt, posterior_mean, posterior_ic95_low, posterior_ic95_high, n_updates, last_updated | Posteriors bayésiens par pattern — le cœur de l'apprentissage |
regime_clusters | timestamp, cluster_id, cluster_label, centroid_json, features_json, distance_to_centroid, is_anomaly | Historique du clustering K-Means avec coordonnées |
brier_tracking | cycle_id, pattern_id, predicted_proba, actual_outcome, brier_contrib, bucket | Données brutes pour calcul du score de Brier |
config | key, value, description, updated_at | Paramètres système (seuils Kelly, capital, demi-vie KB) |
portfolio.id → trades.portfolio_id · knowledge_base.id → pattern_performance.pattern_id · knowledge_base.id → bayesian_estimates.pattern_id · analyses_ia.id → brier_tracking.cycle_id
Regarder en premier : Bandeau supérieur — régime dominant + geo score. Si géo > 60 (rouge) ou VIX > 25 → journée à risque élevé.
Quand agir : Si "Nouveaux patterns disponibles" avec score > 70 → aller sur page Patterns avant l'ouverture de marché.
Onglet Actualités — regarder en premier : Geo Score global en haut à droite (rouge ≥ 75 = extrême). Sur chaque news, cliquer pour voir l'insight IA (phrase bleue en italique), les flèches directionnelles ⛽↑ 🥇↓ 📊↓ et le badge "🕊 résolution" si l'article signale une désescalade. Impact corrigé par l'IA affiché à droite (0–100).
Onglet Patterns — regarder en premier : Patterns classés par relevance (= keyword matching + alignement IA). Badge vert "🤖 IA aligné" = l'IA confirme la direction du pattern. Badge rouge "🤖 contre-signal" = les news pointent dans le sens inverse — ne pas ouvrir ce trade. La pertinence de base (pure keyword) est affichée en gris sous le score ajusté.
Quand agir : Pattern avec relevance ≥ 60% ET badge IA vert ET IV Rank du sous-jacent favorable → candidat prioritaire pour le cycle. Si badge rouge même sur relevance élevée → attendre confirmation de marché.
Regarder en premier : Brent, Or, VIX, DXY — les 4 baromètres du régime. Ensuite ETF sectoriels (XLE, GLD, TLT).
Quand agir : Si XLE +3% ET VIX +8% le même jour → configuration "choc offre" → vérifier patterns énergie disponibles.
Regarder en premier : Régime dominant et le badge "stable Xj" affiché à côté du score. Un régime stable depuis 5+ jours (lissage Bayésien actif) est fiable. "0j d'historique" = premier chargement, le bootstrap est en cours.
Comprendre le score % : Ce n'est pas une probabilité — c'est un score 0–100 d'accumulation de signaux concordants, lissé sur l'historique. Un score de 65% ne signifie pas "65% de chances". Deux scénarios à 60% et 55% indiquent une ambiguïté réelle.
Quand agir : Si deux régimes à moins de 10 points après lissage → le système maintient l'ancien dominant et le badge "stable" reste fixe. Signe de transition — ne pas ouvrir de positions fortement directionnelles.
Regarder en premier : Tableau IV Rank. Vert (IV Rank < 30%) = opportunités d'achat vol. Rouge (> 75%) = opportunités de vente vol.
Quand agir : TOUJOURS consulter avant de valider un pattern. Si le pattern suggère "long call XLE" mais IV Rank = 80% → l'achat est très cher → attendre un pullback de vol.
Regarder en premier : Patterns classés par score décroissant. Ne considérer que les scores > 65. Vérifier taille Kelly et disponibilité en capital.
Quand agir : Valider = enregistrer l'intention. L'exécution est sur Interactive Brokers. Cliquer "Rejeter" évite la représentation dans les 2 prochains cycles.
Regarder en premier : Alertes de cluster (facteur saturé) en rouge. Puis P&L des positions matures (>60% horizon).
Quand agir : Position mature en profit +15% → prise de bénéfices partielle. Perte >20% avec trigger d'invalidation détecté → fermer immédiatement.
Regarder en premier : Win rate par régime macro. Si win rate en "Stagflation" = 42% mais global = 65% → problème structurel avec ce régime.
Quand agir : Revue mensuelle. Pattern répété > 5 fois avec win rate < 45% → exclure de la KB ou réduire le score fiabilité manuellement.
Regarder en premier : Section "Risques à Surveiller" — liste les catalyseurs à calendrier connu (réunions Fed, publications PMI, élections).
Quand agir : Si catalyseur attendu dans les 5 prochains jours, vérifier que les positions ouvertes ne sont pas directement exposées.
Lecture mensuelle. Vérifier que les patterns "obsolètes" (événements > 6 mois) sont archivés. Le texte narratif doit refléter la réalité actuelle, pas l'histoire.
Métriques de santé : Brier Score (viser < 0.20), N effectif (viser > 3.0), taux de patterns validés vs rejetés (si < 30% validés → filtres trop stricts ou qualité IA insuffisante).
Quand agir : Win rate en tendance baissière sur 3 mois → le marché a changé, revoir les paramètres.
Usage mensuel avancé. Contrôler la courbe de calibration Brier pour détecter une surconfiance croissante. Vérifier la matrice de transition pour ajuster les horizons selon la stabilité du régime.
Regarder en premier : Alertes rouges (saturation facteur, drawdown élevé). Puis tableau Kelly par position.
Quand agir : OBLIGATOIREMENT avant toute nouvelle position. Vérifier que l'ajout ne fait pas monter HHI > 0.35 ou un facteur > 50%.
Révision trimestrielle : capital total, fraction Kelly, seuils de concentration. Ne jamais modifier le modèle GPT en production sans tester sur un cycle complet.
| Décision | Alternative Rejetée | Raison du Choix |
|---|---|---|
| K-Means from scratch | scikit-learn KMeans | Zéro dépendance lourde. K-Means = 40 lignes Python pur pour 4 clusters sur 7 features. Scikit-learn ajoute ~50 Mo pour fonctionnalité identique. Sur VPS léger, la différence est significative. |
| Cosine Similarity plutôt que Jaccard | Jaccard, Levenshtein, TF-IDF | Les patterns géopolitiques utilisent un vocabulaire riche et synonymique. Jaccard rate les doublons sans mots communs (60% des cas testés). Cosine via embeddings OpenAI capture la sémantique complète. Disponible sans coût additionnel via l'API existante. |
| Kelly × 1/3 | Taille fixe, Kelly × 1/2, Kelly complet | Taille fixe ignore l'edge du pattern. Kelly complet = draws de 60%+ psychologiquement insoutenables. Kelly × 1/3 = consensus académique (Ed Thorp, Poundstone) : 75% de la croissance théorique pour 30% du risque. |
| Gate 6h Super Contexte | Régénérer à chaque cycle | Coût : ~0.015$ à régénérer. Sur cycles 15min : ~1.44$/jour. Gate 6h → 0.06$/jour. Le contenu change rarement sur 6h (trades ouverts et patterns KB évoluent lentement). |
| Trades matures uniquement dans le Super Contexte | Inclure tous les trades ouverts | Un trade à 3.3% de son horizon (3j/90j) n'a pas testé la thèse. L'inclure envoie un signal bruit. Les trades matures (>40% horizon) ont subi l'épreuve du temps et sont véritablement informatifs. |
| SQLite | PostgreSQL, MySQL | Usage mono-utilisateur sur VPS. SQLite = sans serveur, portable (fichier unique), supporte des centaines de milliers de lignes sans problème pour ce cas d'usage. PostgreSQL est justifié pour multi-utilisateurs ou millions de lignes. |
| Prior neutre (α=β=1) | Prior basé sur le score GPT | Si l'on utilise le score GPT comme prior et que GPT est surconfiant (>65%), on initialise avec un biais. Le prior de Jeffreys (α=β=1) laisse les données réelles parler sans polluer avec la surconfiance GPT. |
| GPT-4o-mini pour prompts simples | GPT-4o pour tout | Scoring RSS et surveillance triggers ne nécessitent pas le raisonnement avancé de GPT-4o. GPT-4o-mini = 5× moins cher et suffisant pour classification et correspondance. Économie : ~60% du coût IA total. |
| Demi-vie KB de 180 jours | Poids constant, demi-vie 365j | Les événements géopolitiques ont des cycles de vie naturels. Une crise qui dure > 6 mois soit se normalise soit évolue structurellement. 180 jours = délai médian empirique entre émergence d'un événement géopolitique et intégration dans les prix. |
| 4 régimes macro | 2 régimes (Risk-On/Off), 6 régimes | 2 régimes simplifient trop (ignorent stagflation vs récession = stratégies options radicalement différentes). 6+ régimes = sous-groupes trop petits pour matrices de transition statistiquement significatives. 4 régimes = quadrants classiques macro avec historique suffisant. |
| Terme | Définition |
|---|---|
| IV (Implied Volatility) | Volatilité future "anticipée" par le marché, calculée en inversant la formule de Black-Scholes à partir du prix observé d'une option. Exprimée en pourcentage annualisé. |
| IV Rank | Rang de l'IV actuelle dans sa plage annuelle : (IV_actuelle - IV_min_52s) / (IV_max_52s - IV_min_52s). Score 0–100. <25 = cheap, >75 = cher. |
| IV Percentile | Proportion des jours de l'année où l'IV était inférieure à l'IV actuelle. Plus robuste que l'IV Rank car ne dépend pas d'un seul pic ou creux extrême. |
| Term Structure | Courbe de l'IV en fonction des expirations. Contango = IV croissante (normal). Backwardation = IV décroissante (stress court terme). |
| Skew | IV_put_25delta - IV_call_25delta. Skew positif = puts plus chers = protection demand. Indique l'asymétrie anticipée par le marché. |
| Open Interest (OI) | Nombre de contrats options ouverts (non fermés). Spike d'OI sur un strike = intérêt institutionnel marqué = mur de résistance/support potentiel. |
| Put/Call Ratio | OI puts / OI calls. >1.2 = sentiment défensif institutionnel. <0.7 = sentiment spéculatif haussier. Indicateur contrarian. |
| Delta | Sensibilité du prix de l'option au mouvement du sous-jacent. Delta 0.25 = l'option gagne 0.25€ pour chaque +1€ du sous-jacent. Option ATM ≈ Delta 0.50. |
| Gamma | Vitesse de changement du delta. Dealer gamma négatif = les market makers amplifient les mouvements. Dealer gamma positif = ils amortissent les mouvements. |
| Thêta (Time Decay) | Érosion de la valeur d'une option avec le temps. Accélère dans les 30 derniers jours. Vendeurs bénéficient, acheteurs luttent contre lui. |
| Kelly Criterion | Formule de sizing optimal : f* = (p×G - (1-p)) / G. Maximise la croissance géométrique du capital à long terme. |
| Kelly Fractionnel | Kelly × 1/k (k=2, 3 ou 4). GeoOptions utilise k=3. Réduit le risque au détriment d'une partie de la croissance optimale, mais psychologiquement tenable. |
| HHI (Herfindahl-Hirschman Index) | Mesure de concentration : Σ(part_i)². De 0 (parfaitement diversifié) à 1.0 (monopole total). <0.25 = bien diversifié, >0.35 = concentré. |
| N Effectif | 1/HHI. Nombre de positions "complètement indépendantes" équivalentes dans le portefeuille. 6 positions corrélées peuvent avoir N effectif = 2.5. |
| Brier Score | Métrique de calibration probabiliste : Σ(prédiction - résultat)²/N. 0 = parfait, 0.25 = équivalent aléatoire. Mesure si les probabilités annoncées correspondent aux fréquences réelles. |
| Prior (Bayésien) | Probabilité initiale avant d'observer des données. GeoOptions utilise un prior neutre (α=β=1) qui est progressivement écrasé par les données réelles. |
| Posterior (Bayésien) | Probabilité mise à jour après observation : α/(α+β). Converge vers le vrai win rate avec suffisamment de trades. |
| Distribution Bêta | Distribution sur [0,1] paramétrée par (α, β). Utilisée pour modéliser l'incertitude sur un taux de succès. Conjuguée de la vraisemblance binomiale → mise à jour analytique simple. |
| Intervalle de Confiance IC95 | Plage contenant le vrai paramètre avec 95% de probabilité. IC large = incertitude élevée (peu de données). IC étroit = estimation fiable. |
| K-Means | Algorithme de clustering non supervisé. Partitionne N points en K groupes en minimisant la variance intra-groupe. Itère entre attribution au centroïde le plus proche et recalcul des centroïdes. |
| Centroïde | Centre d'un cluster K-Means. Moyenne de toutes les observations assignées à ce cluster sur toutes les dimensions. Représente le "point typique" du régime. |
| Matrice de Transition | Matrice K×K où l'entrée (i,j) = probabilité de passer du régime i au régime j. Permet d'anticiper les transitions et d'ajuster les horizons de trading. |
| Anomalie K-Means | Point à plus de 3σ du centroïde de son cluster. Signale des conditions hors-norme sans précédent récent (ex: VIX=48 en mars 2020). Exclu du calcul des centroïdes. |
| Embedding Vectoriel | Représentation d'un texte comme vecteur haute dimension (1536 dims pour text-embedding-ada-002). Textes sémantiquement similaires → vecteurs proches (angle faible). |
| Cosine Similarity | cos(θ) = (A·B)/(|A|×|B|). De -1 (opposés) à +1 (identiques). Mesure la direction (le sens) indépendamment de la norme. Seuil GeoOptions : >0.75 = doublon. |
| Jaccard Similarity | |A∩B|/|A∪B|. Mesure les mots communs entre deux textes. Simple mais aveugle aux synonymes et au sens sémantique. Seuil GeoOptions : >0.30 = doublon. |
| DBSCAN | Algorithme de clustering alternatif qui découvre des clusters de forme arbitraire et identifie les outliers. Non utilisé dans GeoOptions (K-Means suffisant pour 4 régimes fixes). |
| Straddle | Achat (ou vente) simultanée d'un call et d'un put de même strike et expiration. Long straddle = parie sur un mouvement important. Short straddle = parie sur la stabilité. |
| Strangle | Comme le straddle mais avec des strikes différents (call OTM + put OTM). Moins cher à acheter. Short strangle = stratégie de vente de vol populaire en IV Rank élevé. |
| Call Spread (Bull) | Achat call strike bas + vente call strike élevé. Coût réduit vs call seul, profit plafonné. Idéal pour hausse modérée en IV élevée. |
| OTM / ATM | Out-of-The-Money : strike moins favorable que le prix actuel. At-The-Money : strike proche du prix actuel (maximum de gamma et valeur temps). |
| Calendar Spread | Vente d'option court terme + achat même strike long terme. Profite de la décroissance plus rapide du time value court. Adapté en backwardation. |
| Contango / Backwardation | Contango : IV croissante avec la maturité (marché calme). Backwardation : IV décroissante (stress aigu court terme). Signaux opposés pour les stratégies de vol. |
| Demi-vie (Half-life) | Temps nécessaire pour que le poids d'un insight KB diminue de moitié. w(t) = e^(-λt), λ = ln(2)/demi_vie. GeoOptions : 180 jours par défaut. |
| Pattern Reliability Score | win_rate × log(n+1). Pénalise les petits échantillons et valorise la cohérence sur de nombreux trades. >1.5 = fiable, <0.5 = insuffisant. |
| Régime Macro | État macroéconomique parmi 8 scénarios : Goldilocks, Désinflation, Soft Landing, Reflation, Stagflation, Choc Inflationniste, Récession, Crise de Liquidité. Déterminé par scoring règle-basé sur ~50 indicateurs (signaux blendés 1j/5j/10j) + lissage Bayésien sur 25 jours d'historique. Score 0–100 par régime, non normalisé (pas des probabilités). Badge "stable Xj" = nombre de jours consécutifs du dominant actuel. |
| Géo Score | Score agrégé de tension géopolitique mondiale, 0–100. Calculé par moyenne pondérée des scores régionaux. >60 = élevé, >75 = critique. Impacte directement les suggestions IA. |
| Trigger d'Invalidation | É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 > 0.75. |
| Factor Clustering | 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. |