Backend: - iv_engine.py: ATM IV, term structure (30/60/90/180j), put/call skew, options flow (P/C OI ratio, unusual strikes, gamma bias), proxy map for futures→ETFs - database.py: iv_history table + save_iv_snapshot, get_iv_rank_percentile, get_iv_history - routers/options_vol.py: /api/options-vol/ endpoints (snapshot, batch, watchlist, history) - auto_cycle.py: inject IV context string into scoring prompt (step 3.5) - ai_analyzer.py: score_patterns_with_context accepts iv_context param - main.py: register options_vol router Frontend: - pages/OptionsLab.tsx: full IV dashboard (watchlist by IVR, term structure, skew, flow, sparkline) - pages/JournalDeBord.tsx: IvRankCell component + IV Rank column per trade - hooks/useApi.ts: useIvSnapshot, useIvWatchlist, useIvBatch, useIvHistory, useIvForTrade Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
901 lines
45 KiB
HTML
901 lines
45 KiB
HTML
<!DOCTYPE html>
|
||
<html lang="fr">
|
||
<head>
|
||
<meta charset="UTF-8">
|
||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||
<title>GeoOptions Intelligence — Roadmap de Développement</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: 940px;
|
||
margin: 0 auto;
|
||
padding: 40px 48px;
|
||
}
|
||
|
||
h1 { font-size: 22pt; font-weight: 700; color: #0f2d6b; margin-bottom: 6px; }
|
||
h2 { font-size: 14pt; font-weight: 700; color: #0f2d6b; margin: 36px 0 12px; border-bottom: 2.5px solid #0f2d6b; padding-bottom: 6px; }
|
||
h3 { font-size: 11pt; font-weight: 700; color: #1a3a7c; margin: 22px 0 8px; }
|
||
h4 { font-size: 10pt; font-weight: 700; color: #2d5a9e; margin: 14px 0 5px; }
|
||
p { margin-bottom: 9px; }
|
||
|
||
.cover { text-align: center; padding: 50px 0 40px; border-bottom: 3px solid #0f2d6b; margin-bottom: 44px; }
|
||
.cover .subtitle { font-size: 12pt; color: #4a6fa5; margin-top: 8px; font-style: italic; }
|
||
.cover .meta { font-size: 9pt; color: #7a8aaa; margin-top: 20px; font-family: 'Courier New', monospace; }
|
||
.cover .logo { font-size: 32pt; margin-bottom: 14px; }
|
||
|
||
/* ── Phase blocks ── */
|
||
.phase {
|
||
border: 1.5px solid;
|
||
border-radius: 10px;
|
||
margin: 28px 0;
|
||
overflow: hidden;
|
||
}
|
||
.phase-header {
|
||
padding: 14px 20px;
|
||
display: flex;
|
||
align-items: center;
|
||
justify-content: space-between;
|
||
flex-wrap: wrap;
|
||
gap: 8px;
|
||
}
|
||
.phase-title { font-size: 12pt; font-weight: 700; display: flex; align-items: center; gap: 10px; }
|
||
.phase-body { padding: 0 20px 20px; }
|
||
|
||
.phase.p1 { border-color: #dc2626; }
|
||
.phase.p1 .phase-header { background: #dc2626; color: #fff; }
|
||
.phase.p2 { border-color: #d97706; }
|
||
.phase.p2 .phase-header { background: #d97706; color: #fff; }
|
||
.phase.p3 { border-color: #2563eb; }
|
||
.phase.p3 .phase-header { background: #2563eb; color: #fff; }
|
||
.phase.p4 { border-color: #7c3aed; }
|
||
.phase.p4 .phase-header { background: #7c3aed; color: #fff; }
|
||
|
||
.phase-meta { font-size: 9pt; opacity: 0.88; font-family: 'Courier New', monospace; }
|
||
|
||
/* ── Sprint cards ── */
|
||
.sprint {
|
||
background: #f8fafc;
|
||
border: 1px solid #e2e8f0;
|
||
border-radius: 8px;
|
||
margin: 14px 0;
|
||
overflow: hidden;
|
||
}
|
||
.sprint-header {
|
||
padding: 10px 16px;
|
||
background: #f1f5f9;
|
||
border-bottom: 1px solid #e2e8f0;
|
||
display: flex;
|
||
align-items: center;
|
||
justify-content: space-between;
|
||
gap: 8px;
|
||
flex-wrap: wrap;
|
||
}
|
||
.sprint-num { font-size: 8.5pt; font-weight: 700; font-family: 'Courier New', monospace; color: #64748b; }
|
||
.sprint-name { font-size: 10.5pt; font-weight: 700; color: #1e3a8a; }
|
||
.sprint-duration { font-size: 8.5pt; background: #dbeafe; color: #1e40af; padding: 2px 8px; border-radius: 20px; font-family: 'Courier New', monospace; font-weight: 700; }
|
||
.sprint-body { padding: 14px 16px; display: grid; grid-template-columns: 1fr 1fr; gap: 16px; }
|
||
@media (max-width: 700px) { .sprint-body { grid-template-columns: 1fr; } }
|
||
|
||
.sprint-section-title { font-size: 8pt; font-weight: 700; text-transform: uppercase; letter-spacing: 0.8px; color: #64748b; margin-bottom: 6px; }
|
||
|
||
ul.deliverables { list-style: none; margin: 0; padding: 0; }
|
||
ul.deliverables li { padding: 3px 0 3px 16px; position: relative; font-size: 9.5pt; }
|
||
ul.deliverables li::before { content: "→"; position: absolute; left: 0; color: #2563eb; font-weight: 700; }
|
||
|
||
ul.why { list-style: none; margin: 0; padding: 0; }
|
||
ul.why li { padding: 3px 0 3px 16px; position: relative; font-size: 9.5pt; color: #475569; }
|
||
ul.why li::before { content: "✓"; position: absolute; left: 0; color: #16a34a; font-weight: 700; }
|
||
|
||
ul.blockers { list-style: none; margin: 0; padding: 0; }
|
||
ul.blockers li { padding: 3px 0 3px 16px; position: relative; font-size: 9.5pt; color: #92400e; }
|
||
ul.blockers li::before { content: "⚠"; position: absolute; left: 0; }
|
||
|
||
.sprint-full { grid-column: 1 / -1; }
|
||
|
||
/* ── Score table ── */
|
||
table { width: 100%; border-collapse: collapse; margin: 14px 0 20px; font-size: 9.5pt; }
|
||
th { background: #0f2d6b; color: #fff; padding: 8px 12px; text-align: left; font-size: 8.5pt; text-transform: uppercase; letter-spacing: 0.5px; }
|
||
td { padding: 7px 12px; border-bottom: 1px solid #e2e8f0; vertical-align: top; }
|
||
tr:nth-child(even) td { background: #f8fafc; }
|
||
|
||
.score-bar { display: inline-block; height: 8px; border-radius: 4px; vertical-align: middle; margin-right: 6px; }
|
||
.score-now { background: #94a3b8; }
|
||
.score-then { background: #22c55e; }
|
||
|
||
/* ── Callout ── */
|
||
.callout { border-left: 4px solid; padding: 11px 15px; margin: 16px 0; border-radius: 0 6px 6px 0; font-size: 9.5pt; }
|
||
.callout.blue { border-color: #2d6be4; background: #eef4ff; }
|
||
.callout.green { border-color: #16a34a; background: #f0fdf4; }
|
||
.callout.amber { border-color: #d97706; background: #fffbeb; }
|
||
.callout.red { border-color: #dc2626; background: #fff5f5; }
|
||
.callout .label { font-weight: 700; font-size: 8.5pt; text-transform: uppercase; letter-spacing: 0.8px; margin-bottom: 3px; }
|
||
.callout.blue .label { color: #2d6be4; }
|
||
.callout.green .label { color: #16a34a; }
|
||
.callout.amber .label { color: #d97706; }
|
||
.callout.red .label { color: #dc2626; }
|
||
|
||
code { font-family: 'Courier New', monospace; font-size: 8.5pt; background: #f1f5f9; padding: 1px 5px; border-radius: 3px; color: #1e3a8a; }
|
||
|
||
/* ── Timeline ── */
|
||
.timeline { display: flex; gap: 0; margin: 24px 0; overflow-x: auto; }
|
||
.tl-item { flex: 1; min-width: 90px; text-align: center; position: relative; }
|
||
.tl-item::before { content: ''; position: absolute; top: 16px; left: 50%; right: -50%; height: 2px; background: #e2e8f0; z-index: 0; }
|
||
.tl-item:last-child::before { display: none; }
|
||
.tl-dot { width: 32px; height: 32px; border-radius: 50%; margin: 0 auto 6px; display: flex; align-items: center; justify-content: center; font-size: 9pt; font-weight: 700; color: #fff; position: relative; z-index: 1; }
|
||
.tl-item.p1 .tl-dot { background: #dc2626; }
|
||
.tl-item.p2 .tl-dot { background: #d97706; }
|
||
.tl-item.p3 .tl-dot { background: #2563eb; }
|
||
.tl-item.p4 .tl-dot { background: #7c3aed; }
|
||
.tl-label { font-size: 8pt; font-weight: 700; line-height: 1.3; color: #334155; }
|
||
.tl-weeks { font-size: 7.5pt; color: #94a3b8; font-family: 'Courier New', monospace; }
|
||
|
||
.badge { display: inline-block; padding: 1px 8px; border-radius: 20px; font-size: 8pt; font-weight: 700; font-family: 'Courier New', monospace; }
|
||
.badge-crit { background: #fee2e2; color: #991b1b; }
|
||
.badge-high { background: #fef3c7; color: #92400e; }
|
||
.badge-med { background: #dbeafe; color: #1e40af; }
|
||
.badge-low { background: #ede9fe; color: #5b21b6; }
|
||
.badge-data { background: #f0fdf4; color: #14532d; border: 1px solid #bbf7d0; }
|
||
.badge-back { background: #f1f5f9; color: #475569; border: 1px solid #cbd5e1; }
|
||
.badge-front { background: #fdf4ff; color: #7e22ce; border: 1px solid #e9d5ff; }
|
||
.badge-ai { background: #eff6ff; color: #1d4ed8; border: 1px solid #bfdbfe; }
|
||
|
||
.page-break { page-break-before: always; }
|
||
hr { border: none; border-top: 1px solid #e2e8f0; margin: 28px 0; }
|
||
|
||
.score-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; margin: 16px 0; }
|
||
.score-item { background: #f8fafc; border: 1px solid #e2e8f0; border-radius: 6px; padding: 10px 14px; }
|
||
.score-item .domain { font-size: 8.5pt; color: #64748b; margin-bottom: 4px; }
|
||
.score-item .now-val { font-size: 14pt; font-weight: 700; }
|
||
.score-item .target { font-size: 8.5pt; color: #16a34a; font-weight: 700; }
|
||
.score-item.p1 .now-val { color: #dc2626; }
|
||
.score-item.p2 .now-val { color: #d97706; }
|
||
.score-item.p3 .now-val { color: #2563eb; }
|
||
|
||
@media print {
|
||
body { padding: 18px 24px; font-size: 9.5pt; }
|
||
.phase { break-inside: avoid; }
|
||
.sprint { break-inside: avoid; }
|
||
@page { margin: 1.5cm 1.8cm; size: A4; }
|
||
}
|
||
</style>
|
||
</head>
|
||
<body>
|
||
|
||
<!-- COVER -->
|
||
<div class="cover">
|
||
<div class="logo">🗺️</div>
|
||
<h1>GeoOptions Intelligence</h1>
|
||
<div class="subtitle">Roadmap de Développement — Vers le Niveau Hedge Fund</div>
|
||
<div class="meta">
|
||
Basé sur l'audit expert · Juin 2026 · 4 Phases · ~6 mois
|
||
</div>
|
||
</div>
|
||
|
||
|
||
<!-- ÉTAT ACTUEL -->
|
||
<h2>État actuel vs Cibles</h2>
|
||
|
||
<p>L'audit positionne le système à <strong>6,5/10 au niveau "fonds professionnel"</strong> avec des notes excellentes sur l'architecture IA et la discipline de recherche, mais des lacunes importantes sur le côté purement options (volatilité implicite, structure de marché, sizing). Ce roadmap adresse chacune.</p>
|
||
|
||
<div class="score-grid">
|
||
<div class="score-item p1"><div class="domain">Trading d'Options</div><div class="now-val">5/10</div><div class="target">→ Cible : 8/10 (Phase 1 + 2)</div></div>
|
||
<div class="score-item p1"><div class="domain">Gestion du risque</div><div class="now-val">6/10</div><div class="target">→ Cible : 8.5/10 (Phase 3)</div></div>
|
||
<div class="score-item p2"><div class="domain">Niveau Fonds Pro</div><div class="now-val">6.5/10</div><div class="target">→ Cible : 8.5/10 (Phase 1→3)</div></div>
|
||
<div class="score-item p3"><div class="domain">Architecture IA</div><div class="now-val">8.5/10</div><div class="target">→ Cible : 9.5/10 (Phase 2 + 4)</div></div>
|
||
</div>
|
||
|
||
|
||
<!-- TIMELINE -->
|
||
<h2>Vue d'ensemble — 6 mois</h2>
|
||
|
||
<div class="timeline">
|
||
<div class="tl-item p1">
|
||
<div class="tl-dot">1</div>
|
||
<div class="tl-label">Phase 1<br>IV & Vol</div>
|
||
<div class="tl-weeks">S1–S6</div>
|
||
</div>
|
||
<div class="tl-item p2">
|
||
<div class="tl-dot">2</div>
|
||
<div class="tl-label">Phase 2<br>Fiabilité & Thèses</div>
|
||
<div class="tl-weeks">S7–S12</div>
|
||
</div>
|
||
<div class="tl-item p3">
|
||
<div class="tl-dot">3</div>
|
||
<div class="tl-label">Phase 3<br>Portefeuille & Risk</div>
|
||
<div class="tl-weeks">S13–S20</div>
|
||
</div>
|
||
<div class="tl-item p4">
|
||
<div class="tl-dot">4</div>
|
||
<div class="tl-label">Phase 4<br>Moteur Quantitatif</div>
|
||
<div class="tl-weeks">S21–S26</div>
|
||
</div>
|
||
</div>
|
||
|
||
<table>
|
||
<tr>
|
||
<th>Phase</th><th>Thème</th><th>Durée</th><th>Lacune adressée</th><th>Impact note globale</th>
|
||
</tr>
|
||
<tr>
|
||
<td><strong>1</strong></td>
|
||
<td>Volatilité implicite & structure du marché options</td>
|
||
<td>6 semaines</td>
|
||
<td>Trading options 5/10 → 7.5/10</td>
|
||
<td>+1.5 pts niveau pro</td>
|
||
</tr>
|
||
<tr>
|
||
<td><strong>2</strong></td>
|
||
<td>Fiabilité historique, contre-thèses & calibration</td>
|
||
<td>6 semaines</td>
|
||
<td>Architecture IA 8.5/10 → 9.5/10</td>
|
||
<td>+0.8 pts niveau pro</td>
|
||
</tr>
|
||
<tr>
|
||
<td><strong>3</strong></td>
|
||
<td>Portefeuille, corrélations & position sizing</td>
|
||
<td>8 semaines</td>
|
||
<td>Gestion risque 6/10 → 8.5/10</td>
|
||
<td>+1.2 pts niveau pro</td>
|
||
</tr>
|
||
<tr>
|
||
<td><strong>4</strong></td>
|
||
<td>Moteur probabiliste & apprentissage automatique</td>
|
||
<td>6 semaines</td>
|
||
<td>Calibration statistique / ML</td>
|
||
<td>Niveau recherche quant</td>
|
||
</tr>
|
||
</table>
|
||
|
||
|
||
<!-- ═══════════════════════════════════════════════════════════════
|
||
PHASE 1
|
||
═══════════════════════════════════════════════════════════════ -->
|
||
<div class="page-break"></div>
|
||
|
||
<div class="phase p1">
|
||
<div class="phase-header">
|
||
<div class="phase-title">🔴 Phase 1 — Volatilité Implicite & Structure Marché Options</div>
|
||
<div class="phase-meta">Semaines 1–6 · PRIORITÉ CRITIQUE · Lacune la plus impactante</div>
|
||
</div>
|
||
<div class="phase-body">
|
||
|
||
<div class="callout red">
|
||
<div class="label">Pourquoi c'est la priorité absolue</div>
|
||
"Tu trades des options. IV Rank, term structure, skew sont les paramètres fondamentaux de valorisation d'une option. Sans eux, une bonne thèse géopolitique peut quand même produire un mauvais trade : si l'IV est déjà au 95e percentile, tu paies 3× trop cher pour la convexité." — Audit expert
|
||
</div>
|
||
|
||
<!-- Sprint 1 -->
|
||
<div class="sprint">
|
||
<div class="sprint-header">
|
||
<div>
|
||
<div class="sprint-num">Sprint 1.1</div>
|
||
<div class="sprint-name">IV Rank & IV Percentile par underlying</div>
|
||
</div>
|
||
<div style="display:flex;gap:6px;align-items:center;flex-wrap:wrap;">
|
||
<span class="badge badge-data">data</span>
|
||
<span class="badge badge-back">backend</span>
|
||
<span class="badge badge-front">frontend</span>
|
||
<span class="sprint-duration">S1 – S2</span>
|
||
</div>
|
||
</div>
|
||
<div class="sprint-body">
|
||
<div>
|
||
<div class="sprint-section-title">Livrables</div>
|
||
<ul class="deliverables">
|
||
<li>Endpoint <code>GET /api/options/iv/{ticker}</code> retournant IV actuelle, IV Rank, IV Percentile (52 semaines)</li>
|
||
<li>Service <code>iv_engine.py</code> : récupère les options chains yfinance, calcule IV par Black-Scholes inverse (ou utilise la mid-price des ATM options)</li>
|
||
<li>Table DB <code>iv_history</code> : stockage journalier de l'IV par underlying (pour calculer Rank/Percentile)</li>
|
||
<li>Affichage dans Journal de Bord : badge "IV Rank 78%" coloré (vert <25%, orange 25–75%, rouge >75%)</li>
|
||
<li>Affichage dans Cockpit : section "Options Atmosphere" avec IV des actifs clés</li>
|
||
</ul>
|
||
</div>
|
||
<div>
|
||
<div class="sprint-section-title">Pourquoi ces choix</div>
|
||
<ul class="why">
|
||
<li>IV Rank = (IV actuelle − IV min 52s) / (IV max 52s − IV min 52s) → signal cheap/cher universel</li>
|
||
<li>IV Percentile = % jours où IV était inférieure → plus robuste aux pics extrêmes</li>
|
||
<li>yfinance donne accès aux options chains gratuitement sur les actions US et ETFs</li>
|
||
<li>Stockage journalier nécessaire : sans historique, pas de Rank/Percentile</li>
|
||
</ul>
|
||
<div class="sprint-section-title" style="margin-top:10px">Contraintes</div>
|
||
<ul class="blockers">
|
||
<li>yfinance : données options limitées aux actions US/ETF (pas les futures)</li>
|
||
<li>Calcul BS inverse peut être instable sur les options très OTM — utiliser uniquement les ATM proches</li>
|
||
</ul>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- Sprint 2 -->
|
||
<div class="sprint">
|
||
<div class="sprint-header">
|
||
<div>
|
||
<div class="sprint-num">Sprint 1.2</div>
|
||
<div class="sprint-name">Term Structure & Skew</div>
|
||
</div>
|
||
<div style="display:flex;gap:6px;align-items:center;flex-wrap:wrap;">
|
||
<span class="badge badge-data">data</span>
|
||
<span class="badge badge-back">backend</span>
|
||
<span class="badge badge-front">frontend</span>
|
||
<span class="sprint-duration">S3 – S4</span>
|
||
</div>
|
||
</div>
|
||
<div class="sprint-body">
|
||
<div>
|
||
<div class="sprint-section-title">Livrables</div>
|
||
<ul class="deliverables">
|
||
<li>Term structure : IV à 30j, 60j, 90j, 180j — affiché comme courbe dans une nouvelle page "Options Lab"</li>
|
||
<li>Indicateur contango/backwardation : <code>structure = "contango" | "backwardation" | "flat"</code></li>
|
||
<li>Put/Call skew : IV put 25-delta − IV call 25-delta (proxy de protection de marché)</li>
|
||
<li>Injection dans le prompt de scoring : "IV Rank=78%, structure=backwardation, skew=+4pts → IV élevée, marché achète des puts"</li>
|
||
<li>Règle dans le prompt : si IV Rank > 80%, pénaliser les stratégies acheteuses de vol (long straddle, long call)</li>
|
||
</ul>
|
||
</div>
|
||
<div>
|
||
<div class="sprint-section-title">Pourquoi ces choix</div>
|
||
<ul class="why">
|
||
<li>Contango (IV court terme < long terme) = marché calme, bon pour vendre de la vol courte</li>
|
||
<li>Backwardation (IV court terme > long terme) = stress, bon pour acheter de la protection courte</li>
|
||
<li>Skew positif (puts plus chers que calls) = marché se protège → biais baissier implicite</li>
|
||
<li>Injecter dans le scoring change concrètement les recommandations de stratégie d'option</li>
|
||
</ul>
|
||
<div class="sprint-section-title" style="margin-top:10px">Lié à</div>
|
||
<ul class="why">
|
||
<li>Sprint 1.1 (infrastructure IV)</li>
|
||
<li>Modifie le prompt de scoring (étape 4 du cycle)</li>
|
||
</ul>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- Sprint 3 -->
|
||
<div class="sprint">
|
||
<div class="sprint-header">
|
||
<div>
|
||
<div class="sprint-num">Sprint 1.3</div>
|
||
<div class="sprint-name">Options Flow (proxy Open Interest)</div>
|
||
</div>
|
||
<div style="display:flex;gap:6px;align-items:center;flex-wrap:wrap;">
|
||
<span class="badge badge-data">data</span>
|
||
<span class="badge badge-back">backend</span>
|
||
<span class="sprint-duration">S5 – S6</span>
|
||
</div>
|
||
</div>
|
||
<div class="sprint-body">
|
||
<div>
|
||
<div class="sprint-section-title">Livrables</div>
|
||
<ul class="deliverables">
|
||
<li>Calcul du Put/Call Open Interest Ratio par underlying (via yfinance options chains)</li>
|
||
<li>Détection des strikes avec OI inhabituel (OI > 2σ de la moyenne sur 20j)</li>
|
||
<li>Indicateur "Dealer Gamma" simplifié : net gamma des market makers estimé depuis l'OI puts/calls ATM</li>
|
||
<li>Signal injecté dans le prompt : "OI puts/calls = 1.8 → smart money défensif" ou "gros OI call sur strike 550 → mur de résistance potentiel"</li>
|
||
</ul>
|
||
</div>
|
||
<div>
|
||
<div class="sprint-section-title">Pourquoi ces choix</div>
|
||
<ul class="why">
|
||
<li>Options flow = ce que font réellement les institutionnels, pas ce qu'ils disent</li>
|
||
<li>Gamma exposure élevée des dealers → ils vont hedger → amortit les mouvements de prix</li>
|
||
<li>yfinance permet d'accéder à l'OI sans abonnement premium (limité aux US)</li>
|
||
</ul>
|
||
<div class="sprint-section-title" style="margin-top:10px">Contraintes</div>
|
||
<ul class="blockers">
|
||
<li>Gamma dealer exact nécessite des données tick-by-tick (abonnement SpotGamma ~$50/mois si souhaité plus tard)</li>
|
||
<li>Proxy OI est une approximation — le labeler "estimation" dans l'UI</li>
|
||
</ul>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
</div>
|
||
</div>
|
||
|
||
|
||
<!-- ═══════════════════════════════════════════════════════════════
|
||
PHASE 2
|
||
═══════════════════════════════════════════════════════════════ -->
|
||
<div class="page-break"></div>
|
||
|
||
<div class="phase p2">
|
||
<div class="phase-header">
|
||
<div class="phase-title">🟠 Phase 2 — Fiabilité Historique, Contre-Thèses & Calibration</div>
|
||
<div class="phase-meta">Semaines 7–12 · PRIORITÉ HAUTE · Renforce l'intégrité de l'apprentissage</div>
|
||
</div>
|
||
<div class="phase-body">
|
||
|
||
<div class="callout amber">
|
||
<div class="label">Enjeu</div>
|
||
"Tous les patterns sont traités pareil. Or un pattern avec 28 trades à 68% de win rate mérite beaucoup plus de crédit qu'un pattern avec 3 trades à 100% (biais de petit échantillon)." — Audit expert
|
||
</div>
|
||
|
||
<!-- Sprint 2.1 -->
|
||
<div class="sprint">
|
||
<div class="sprint-header">
|
||
<div>
|
||
<div class="sprint-num">Sprint 2.1</div>
|
||
<div class="sprint-name">Pattern Reliability Score</div>
|
||
</div>
|
||
<div style="display:flex;gap:6px;align-items:center;flex-wrap:wrap;">
|
||
<span class="badge badge-back">backend</span>
|
||
<span class="badge badge-front">frontend</span>
|
||
<span class="badge badge-ai">prompt</span>
|
||
<span class="sprint-duration">S7 – S8</span>
|
||
</div>
|
||
</div>
|
||
<div class="sprint-body">
|
||
<div>
|
||
<div class="sprint-section-title">Livrables</div>
|
||
<ul class="deliverables">
|
||
<li>Vue DB <code>pattern_reliability</code> : pour chaque pattern, calcule trades_count, win_rate, avg_pnl_pct, max_pnl, max_loss sur les trades <em>matures uniquement</em></li>
|
||
<li>Score de fiabilité composite = win_rate × log(trades_count + 1) (pénalise les petits échantillons)</li>
|
||
<li>Endpoint <code>GET /api/patterns/reliability</code></li>
|
||
<li>Affichage dans la page Patterns : tableau avec colonnes Trades / Win Rate / Avg P&L / Fiabilité</li>
|
||
<li>Badge dans Journal de Bord : "⭐ 68% sur 28 trades" ou "🔬 2 trades — données insuffisantes"</li>
|
||
<li>Injection dans le prompt de suggestion : tableau de fiabilité des 10 meilleurs patterns → GPT-4o ne suggère pas de variantes d'un pattern déjà fiable si le contexte n'a pas changé</li>
|
||
</ul>
|
||
</div>
|
||
<div>
|
||
<div class="sprint-section-title">Pourquoi ces choix</div>
|
||
<ul class="why">
|
||
<li>Un pattern nouveau n'a aucune track record → sa "fiabilité" = 0 jusqu'à accumulation de données</li>
|
||
<li>Le multiplicateur log(n+1) évite qu'un pattern à 100% sur 2 trades écrase un pattern à 65% sur 30 trades</li>
|
||
<li>Injecter dans le prompt de suggestion : GPT-4o peut adapter ses thèses en connaissant ce qui a empiriquement fonctionné</li>
|
||
<li>Critique = base uniquement sur trades MATURES pour éviter le bruit (cohérence avec le principe fondamental)</li>
|
||
</ul>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- Sprint 2.2 -->
|
||
<div class="sprint">
|
||
<div class="sprint-header">
|
||
<div>
|
||
<div class="sprint-num">Sprint 2.2</div>
|
||
<div class="sprint-name">Contre-Thèses & Événements Invalidants</div>
|
||
</div>
|
||
<div style="display:flex;gap:6px;align-items:center;flex-wrap:wrap;">
|
||
<span class="badge badge-back">backend</span>
|
||
<span class="badge badge-front">frontend</span>
|
||
<span class="badge badge-ai">prompt</span>
|
||
<span class="sprint-duration">S9 – S10</span>
|
||
</div>
|
||
</div>
|
||
<div class="sprint-body">
|
||
<div>
|
||
<div class="sprint-section-title">Livrables</div>
|
||
<ul class="deliverables">
|
||
<li>Champs <code>counter_thesis</code>, <code>invalidation_trigger</code>, <code>invalidation_probability</code> ajoutés à la table <code>custom_patterns</code></li>
|
||
<li>Modification du prompt de suggestion : GPT-4o doit retourner pour chaque pattern {"thesis": ..., "counter_thesis": ..., "invalidation_trigger": ..., "invalidation_prob": 0-100}</li>
|
||
<li>Affichage dans la page Patterns : onglet "Thèse / Contre-thèse / Invalidation" avec couleur de probabilité d'invalidation</li>
|
||
<li>Système de surveillance : si une news matche le <code>invalidation_trigger</code> d'un trade ouvert → alerte dans le Journal de Bord</li>
|
||
<li>Intégration dans le scoring : patterns avec forte probabilité d'invalidation imminente → score pénalisé</li>
|
||
</ul>
|
||
</div>
|
||
<div>
|
||
<div class="sprint-section-title">Pourquoi ces choix</div>
|
||
<ul class="why">
|
||
<li>Force GPT-4o à raisonner en "steel man" de la position opposée → réduit le biais de confirmation</li>
|
||
<li>Le trigger d'invalidation permet une gestion dynamique : si le trigger se réalise, sortir du trade</li>
|
||
<li>Exemple : thèse = escalade Taiwan; contre-thèse = bluff diplomatique; invalidation = annonce négociations US-Chine</li>
|
||
</ul>
|
||
<div class="sprint-section-title" style="margin-top:10px">Impact Super Contexte</div>
|
||
<ul class="why">
|
||
<li>Le rapport portfolio pourra distinguer "thèse correcte mais invalidation s'est réalisée" vs "thèse incorrecte dès le départ"</li>
|
||
</ul>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- Sprint 2.3 -->
|
||
<div class="sprint">
|
||
<div class="sprint-header">
|
||
<div>
|
||
<div class="sprint-num">Sprint 2.3</div>
|
||
<div class="sprint-name">Calibration Probabiliste & Demi-Vie des Insights</div>
|
||
</div>
|
||
<div style="display:flex;gap:6px;align-items:center;flex-wrap:wrap;">
|
||
<span class="badge badge-back">backend</span>
|
||
<span class="badge badge-front">frontend</span>
|
||
<span class="sprint-duration">S11 – S12</span>
|
||
</div>
|
||
</div>
|
||
<div class="sprint-body">
|
||
<div>
|
||
<div class="sprint-section-title">Livrables</div>
|
||
<ul class="deliverables">
|
||
<li>Stockage de la probabilité prédite (0–100) dans <code>pattern_scores</code> — issue du champ <code>probability</code> du pattern à la date de scoring</li>
|
||
<li>À maturité du trade : comparaison probabilité prédite vs résultat binaire (P&L > 0)</li>
|
||
<li>Courbe de calibration : "quand je prédis 75%, le taux de réussite réel est X%"</li>
|
||
<li>Score de Brier affiché dans une page Analytics</li>
|
||
<li>Demi-vie des insights KB : champ <code>expires_at</code> + <code>confidence_decay_days</code> sur les entrées KB. Les insights de plus de 90j sans confirmation voient leur confiance baisser automatiquement</li>
|
||
</ul>
|
||
</div>
|
||
<div>
|
||
<div class="sprint-section-title">Pourquoi ces choix</div>
|
||
<ul class="why">
|
||
<li>Si le système annonce "80%" et n'a raison qu'à 52% → il est surconfiant → recalibrer le prompt</li>
|
||
<li>Protège contre la dérive du Super Contexte : une leçon apprise en 2024 peut ne plus être valide en 2026 si le régime a changé</li>
|
||
<li>Score de Brier = mesure standard de calibration probabiliste (0 = parfait, 1 = nul, 0.25 = aléatoire)</li>
|
||
</ul>
|
||
<div class="sprint-section-title" style="margin-top:10px">Adresse le risque expert</div>
|
||
<ul class="why">
|
||
<li>Protège la boucle SC contre l'auto-confirmation : les insights expirent s'ils ne sont pas reconfirmés empiriquement</li>
|
||
</ul>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
</div>
|
||
</div>
|
||
|
||
|
||
<!-- ═══════════════════════════════════════════════════════════════
|
||
PHASE 3
|
||
═══════════════════════════════════════════════════════════════ -->
|
||
<div class="page-break"></div>
|
||
|
||
<div class="phase p3">
|
||
<div class="phase-header">
|
||
<div class="phase-title">🔵 Phase 3 — Portefeuille, Corrélations & Position Sizing</div>
|
||
<div class="phase-meta">Semaines 13–20 · PRIORITÉ HAUTE · Raisonnement portefeuille vs trade par trade</div>
|
||
</div>
|
||
<div class="phase-body">
|
||
|
||
<div class="callout blue">
|
||
<div class="label">Enjeu</div>
|
||
"Tu peux avoir 3 trades différents (pétrole, défense, short Europe) qui dépendent tous d'une seule variable : guerre au Moyen-Orient. En réalité, tu n'as qu'un seul risque concentré. Un Risk Engine révèle ça." — Audit expert
|
||
</div>
|
||
|
||
<!-- Sprint 3.1 -->
|
||
<div class="sprint">
|
||
<div class="sprint-header">
|
||
<div>
|
||
<div class="sprint-num">Sprint 3.1</div>
|
||
<div class="sprint-name">Vue Portefeuille Consolidée</div>
|
||
</div>
|
||
<div style="display:flex;gap:6px;align-items:center;flex-wrap:wrap;">
|
||
<span class="badge badge-back">backend</span>
|
||
<span class="badge badge-front">frontend</span>
|
||
<span class="sprint-duration">S13 – S14</span>
|
||
</div>
|
||
</div>
|
||
<div class="sprint-body">
|
||
<div>
|
||
<div class="sprint-section-title">Livrables</div>
|
||
<ul class="deliverables">
|
||
<li>Nouvelle page "Portefeuille Global" : vue consolidée de toutes les positions ouvertes par classe d'actif</li>
|
||
<li>Exposition nette par classe d'actif (énergie, métaux, indices US, Europe, Asie, forex)</li>
|
||
<li>P&L agrégé et décomposé (par classe, par régime d'entrée, par pattern)</li>
|
||
<li>Graphique d'évolution du P&L portefeuille dans le temps</li>
|
||
<li>Indicateur de concentration : si >40% du portefeuille dans une classe → alerte</li>
|
||
</ul>
|
||
</div>
|
||
<div>
|
||
<div class="sprint-section-title">Pourquoi ces choix</div>
|
||
<ul class="why">
|
||
<li>La vue par trade masque les concentrations : 5 trades en énergie = 1 gros pari sur le pétrole</li>
|
||
<li>Décomposer par régime d'entrée permet de voir "ai-je sur-tradé en régime stagflation ?"</li>
|
||
</ul>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- Sprint 3.2 -->
|
||
<div class="sprint">
|
||
<div class="sprint-header">
|
||
<div>
|
||
<div class="sprint-num">Sprint 3.2</div>
|
||
<div class="sprint-name">Risk Cluster Engine</div>
|
||
</div>
|
||
<div style="display:flex;gap:6px;align-items:center;flex-wrap:wrap;">
|
||
<span class="badge badge-back">backend</span>
|
||
<span class="badge badge-front">frontend</span>
|
||
<span class="badge badge-ai">prompt</span>
|
||
<span class="sprint-duration">S15 – S16</span>
|
||
</div>
|
||
</div>
|
||
<div class="sprint-body">
|
||
<div>
|
||
<div class="sprint-section-title">Livrables</div>
|
||
<ul class="deliverables">
|
||
<li>Classification des trades ouverts par "facteur de risque" : géopolitique, inflation, récession, liquidité, dollar</li>
|
||
<li>Calcul de l'exposition nette par facteur (en nb de trades ET en P&L potentiel)</li>
|
||
<li>Heatmap des corrélations entre patterns (corrélation P&L historique entre paires de patterns)</li>
|
||
<li>Alerte "Concentration Risque" : si exposition > seuil sur un facteur → alerte dans le Cockpit</li>
|
||
<li>Injection dans le prompt de scoring : "Attention : 60% du portefeuille est déjà exposé au risque géopolitique Asie — pénaliser les nouveaux patterns dépendants de ce facteur"</li>
|
||
</ul>
|
||
</div>
|
||
<div>
|
||
<div class="sprint-section-title">Pourquoi ces choix</div>
|
||
<ul class="why">
|
||
<li>Le Risk Cluster révèle le risque "caché" commun à des trades apparemment indépendants</li>
|
||
<li>Injecter dans le scoring modifie concrètement les recommandations selon l'état du portefeuille</li>
|
||
<li>Corrélation P&L historique : deux patterns corrélés à 0.8 ne sont pas deux opportunités indépendantes</li>
|
||
</ul>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- Sprint 3.3 -->
|
||
<div class="sprint">
|
||
<div class="sprint-header">
|
||
<div>
|
||
<div class="sprint-num">Sprint 3.3</div>
|
||
<div class="sprint-name">Position Sizing — Kelly Fractionnel</div>
|
||
</div>
|
||
<div style="display:flex;gap:6px;align-items:center;flex-wrap:wrap;">
|
||
<span class="badge badge-back">backend</span>
|
||
<span class="badge badge-front">frontend</span>
|
||
<span class="sprint-duration">S17 – S18</span>
|
||
</div>
|
||
</div>
|
||
<div class="sprint-body">
|
||
<div>
|
||
<div class="sprint-section-title">Livrables</div>
|
||
<ul class="deliverables">
|
||
<li>Calcul du Kelly fractionnel par trade : <code>f* = (p × G − (1−p)) / G</code> où p = probabilité estimée, G = gain max</li>
|
||
<li>Kelly fractionnel : recommander 25–50% du Kelly théorique (standard institutionnel)</li>
|
||
<li>Ajustement par Risk Cluster : si le facteur de risque est déjà saturé → diviser le sizing par 2</li>
|
||
<li>Volatility targeting : ajuster la taille pour maintenir une contribution constante au risque portefeuille (ex : chaque trade cible 1% de VaR)</li>
|
||
<li>Affichage dans Journal de Bord : colonne "Sizing suggéré" avec explication (Kelly brut / ajusté)</li>
|
||
</ul>
|
||
</div>
|
||
<div>
|
||
<div class="sprint-section-title">Pourquoi ces choix</div>
|
||
<ul class="why">
|
||
<li>"Un signal moyen avec un sizing exceptionnel gagne de l'argent. L'inverse non." — Audit expert</li>
|
||
<li>Kelly fractionnel (25–50%) est la norme : le Kelly complet sur-optimise et produit des drawdowns brutaux</li>
|
||
<li>VaR contribution constante = technique de risk parity adaptée au sizing d'options</li>
|
||
</ul>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- Sprint 3.4 -->
|
||
<div class="sprint">
|
||
<div class="sprint-header">
|
||
<div>
|
||
<div class="sprint-num">Sprint 3.4</div>
|
||
<div class="sprint-name">Tableau de Bord Risque Global</div>
|
||
</div>
|
||
<div style="display:flex;gap:6px;align-items:center;flex-wrap:wrap;">
|
||
<span class="badge badge-front">frontend</span>
|
||
<span class="sprint-duration">S19 – S20</span>
|
||
</div>
|
||
</div>
|
||
<div class="sprint-body">
|
||
<div>
|
||
<div class="sprint-section-title">Livrables</div>
|
||
<ul class="deliverables">
|
||
<li>Page "Risk Dashboard" : vue unique de tout le risque portefeuille</li>
|
||
<li>Jauge de concentration par facteur (géo, inflation, récession, liquidité)</li>
|
||
<li>Expected Drawdown du portefeuille estimé (basé sur corrélations historiques)</li>
|
||
<li>Score de "diversification effective" : 1 (positions toutes corrélées) → N (positions parfaitement indépendantes)</li>
|
||
<li>Recommandation automatique : "Portefeuille sur-concentré sur risque géo Asie — les 2 prochains trades devraient être sur d'autres facteurs"</li>
|
||
</ul>
|
||
</div>
|
||
<div>
|
||
<div class="sprint-section-title">Pourquoi ces choix</div>
|
||
<ul class="why">
|
||
<li>Un Risk Committee sérieux regarde ce tableau avant chaque trade</li>
|
||
<li>La recommandation automatique ferme la boucle : le Risk Engine alimente directement les suggestions du prochain cycle</li>
|
||
</ul>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
</div>
|
||
</div>
|
||
|
||
|
||
<!-- ═══════════════════════════════════════════════════════════════
|
||
PHASE 4
|
||
═══════════════════════════════════════════════════════════════ -->
|
||
<div class="page-break"></div>
|
||
|
||
<div class="phase p4">
|
||
<div class="phase-header">
|
||
<div class="phase-title">🟣 Phase 4 — Moteur Probabiliste & Apprentissage Automatique</div>
|
||
<div class="phase-meta">Semaines 21–26 · NIVEAU RECHERCHE · Vers le niveau quant fund</div>
|
||
</div>
|
||
<div class="phase-body">
|
||
|
||
<div class="callout blue">
|
||
<div class="label">Enjeu</div>
|
||
"Un fonds institutionnel voudrait : IA → hypothèse → Modèle statistique → validation. Aujourd'hui tu as LLM → score. Il manque la validation quantitative indépendante de GPT." — Audit expert
|
||
</div>
|
||
|
||
<!-- Sprint 4.1 -->
|
||
<div class="sprint">
|
||
<div class="sprint-header">
|
||
<div>
|
||
<div class="sprint-num">Sprint 4.1</div>
|
||
<div class="sprint-name">Bayesian Updating des Scores</div>
|
||
</div>
|
||
<div style="display:flex;gap:6px;align-items:center;flex-wrap:wrap;">
|
||
<span class="badge badge-back">backend</span>
|
||
<span class="badge badge-front">frontend</span>
|
||
<span class="sprint-duration">S21 – S22</span>
|
||
</div>
|
||
</div>
|
||
<div class="sprint-body">
|
||
<div>
|
||
<div class="sprint-section-title">Livrables</div>
|
||
<ul class="deliverables">
|
||
<li>Chaque pattern a un prior bayésien (distribution Beta sur le win rate) mis à jour à chaque trade mature</li>
|
||
<li>Score composite = α × score_GPT + (1−α) × score_bayesien où α décroît avec le nombre de trades (confiance croissante dans l'historique)</li>
|
||
<li>Intervalles de confiance affichés : "Win rate estimé : 65% ± 12%" (beta distribution)</li>
|
||
<li>Recalibration automatique du facteur alpha selon le score de Brier du système (Phase 2.3)</li>
|
||
</ul>
|
||
</div>
|
||
<div>
|
||
<div class="sprint-section-title">Pourquoi ces choix</div>
|
||
<ul class="why">
|
||
<li>Beta(α,β) est le prior conjugué naturel pour un taux de succès → mise à jour simple et analytique</li>
|
||
<li>Plus le pattern a de trades → plus l'historique prime sur l'opinion de GPT-4o</li>
|
||
<li>Adresse directement le manque de calibration statistique identifié par l'expert</li>
|
||
</ul>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- Sprint 4.2 -->
|
||
<div class="sprint">
|
||
<div class="sprint-header">
|
||
<div>
|
||
<div class="sprint-num">Sprint 4.2</div>
|
||
<div class="sprint-name">Détection Automatique de Régimes (Clustering)</div>
|
||
</div>
|
||
<div style="display:flex;gap:6px;align-items:center;flex-wrap:wrap;">
|
||
<span class="badge badge-back">backend</span>
|
||
<span class="badge badge-front">frontend</span>
|
||
<span class="sprint-duration">S23 – S24</span>
|
||
</div>
|
||
</div>
|
||
<div class="sprint-body">
|
||
<div>
|
||
<div class="sprint-section-title">Livrables</div>
|
||
<ul class="deliverables">
|
||
<li>Clustering non supervisé (K-Means ou DBSCAN) sur les vecteurs macro journaliers (VIX, pente, DXY, Brent, or) pour auto-détecter les régimes latents</li>
|
||
<li>Comparaison régime détecté vs régime nommé (stagflation, expansion...) → mesure d'alignement</li>
|
||
<li>Auto-découverte de sous-régimes : "stagflation avec stress dollar" vs "stagflation avec fuite vers l'or"</li>
|
||
<li>Affichage dans Régime Macro : "Cluster 3 (similaire à Oct 2022, Nov 2023)" avec performance historique des patterns dans ce cluster</li>
|
||
</ul>
|
||
</div>
|
||
<div>
|
||
<div class="sprint-section-title">Pourquoi ces choix</div>
|
||
<ul class="why">
|
||
<li>Les régimes nommés à la main sont une approximation — le clustering découvre les régimes réels dans les données</li>
|
||
<li>"Les marchés ne sont pas stationnaires" — le clustering aide à identifier quand le régime a changé</li>
|
||
<li>Librairie sklearn (déjà dans l'environnement Python probable) — pas de dépendance lourde</li>
|
||
</ul>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- Sprint 4.3 -->
|
||
<div class="sprint">
|
||
<div class="sprint-header">
|
||
<div>
|
||
<div class="sprint-num">Sprint 4.3</div>
|
||
<div class="sprint-name">Embeddings de Patterns & Similarité Sémantique</div>
|
||
</div>
|
||
<div style="display:flex;gap:6px;align-items:center;flex-wrap:wrap;">
|
||
<span class="badge badge-back">backend</span>
|
||
<span class="badge badge-ai">API</span>
|
||
<span class="sprint-duration">S25</span>
|
||
</div>
|
||
</div>
|
||
<div class="sprint-body">
|
||
<div>
|
||
<div class="sprint-section-title">Livrables</div>
|
||
<ul class="deliverables">
|
||
<li>Embedding de chaque pattern via l'API OpenAI (<code>text-embedding-3-small</code>) stocké en DB</li>
|
||
<li>Remplacement du filtre Jaccard par similarité cosinus sur embeddings → détection de doublons sémantiques, pas juste des mots identiques</li>
|
||
<li>Recherche sémantique : "trouver les patterns similaires à cette thèse" dans la page Patterns</li>
|
||
</ul>
|
||
</div>
|
||
<div>
|
||
<div class="sprint-section-title">Pourquoi ces choix</div>
|
||
<ul class="why">
|
||
<li>Jaccard rate "Taiwan Tensions" et "Détroit de Taiwan Risk" comme différents — embeddings les détecte comme proches</li>
|
||
<li><code>text-embedding-3-small</code> = $0.002/1M tokens, quasi gratuit</li>
|
||
</ul>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- Sprint 4.4 -->
|
||
<div class="sprint">
|
||
<div class="sprint-header">
|
||
<div>
|
||
<div class="sprint-num">Sprint 4.4</div>
|
||
<div class="sprint-name">Tableau de Bord Analytique Complet</div>
|
||
</div>
|
||
<div style="display:flex;gap:6px;align-items:center;flex-wrap:wrap;">
|
||
<span class="badge badge-front">frontend</span>
|
||
<span class="sprint-duration">S26</span>
|
||
</div>
|
||
</div>
|
||
<div class="sprint-body">
|
||
<div class="sprint-full">
|
||
<div class="sprint-section-title">Livrables</div>
|
||
<ul class="deliverables">
|
||
<li>Page Analytics avec : courbe de calibration, Brier score, win rate par régime, performance par pattern, drawdown historique</li>
|
||
<li>Comparaison score GPT vs résultat réel sur 6 mois : "le modèle sur-performe dans les régimes de crise, sous-performe en régime d'expansion"</li>
|
||
<li>Export CSV de toutes les métriques pour analyse externe</li>
|
||
</ul>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
</div>
|
||
</div>
|
||
|
||
|
||
<!-- RÉCAPITULATIF -->
|
||
<div class="page-break"></div>
|
||
<h2>Récapitulatif Exécutif</h2>
|
||
|
||
<table>
|
||
<tr>
|
||
<th>Sprint</th><th>Feature</th><th>Durée</th><th>Dépendances</th><th>Impact</th>
|
||
</tr>
|
||
<tr><td>1.1</td><td>IV Rank & Percentile</td><td>2s</td><td>—</td><td>★★★★★</td></tr>
|
||
<tr><td>1.2</td><td>Term Structure & Skew</td><td>2s</td><td>1.1</td><td>★★★★★</td></tr>
|
||
<tr><td>1.3</td><td>Options Flow (proxy OI)</td><td>2s</td><td>1.1</td><td>★★★★☆</td></tr>
|
||
<tr><td>2.1</td><td>Pattern Reliability Score</td><td>2s</td><td>historique trades</td><td>★★★★★</td></tr>
|
||
<tr><td>2.2</td><td>Contre-thèses & Invalidation</td><td>2s</td><td>—</td><td>★★★★☆</td></tr>
|
||
<tr><td>2.3</td><td>Calibration + Demi-vie KB</td><td>2s</td><td>2.1</td><td>★★★★☆</td></tr>
|
||
<tr><td>3.1</td><td>Vue Portefeuille Consolidée</td><td>2s</td><td>—</td><td>★★★★☆</td></tr>
|
||
<tr><td>3.2</td><td>Risk Cluster Engine</td><td>2s</td><td>3.1</td><td>★★★★★</td></tr>
|
||
<tr><td>3.3</td><td>Position Sizing (Kelly)</td><td>2s</td><td>2.1, 3.2</td><td>★★★★★</td></tr>
|
||
<tr><td>3.4</td><td>Risk Dashboard</td><td>2s</td><td>3.1, 3.2, 3.3</td><td>★★★☆☆</td></tr>
|
||
<tr><td>4.1</td><td>Bayesian Updating</td><td>2s</td><td>2.1, 2.3</td><td>★★★★☆</td></tr>
|
||
<tr><td>4.2</td><td>Clustering de Régimes</td><td>2s</td><td>données macro</td><td>★★★☆☆</td></tr>
|
||
<tr><td>4.3</td><td>Embeddings Patterns</td><td>1s</td><td>—</td><td>★★★☆☆</td></tr>
|
||
<tr><td>4.4</td><td>Analytics Dashboard</td><td>1s</td><td>toutes phases</td><td>★★★☆☆</td></tr>
|
||
</table>
|
||
|
||
<h3>Décisions de démarrage immédiates</h3>
|
||
|
||
<table>
|
||
<tr><th>Question</th><th>Recommandation</th></tr>
|
||
<tr>
|
||
<td>Source des données IV ?</td>
|
||
<td>yfinance pour les sous-jacents US/ETF (gratuit). Pour les futures (Brent, or), explorer Yahoo Finance "BZ=F", "GC=F" — options disponibles mais limitées.</td>
|
||
</tr>
|
||
<tr>
|
||
<td>Stocker l'IV en DB ou calculer à la volée ?</td>
|
||
<td>Stocker journalièrement. IV Rank et Percentile ont besoin de 52 semaines d'historique — impossible à calculer à la volée sur yfinance sans cet historique.</td>
|
||
</tr>
|
||
<tr>
|
||
<td>Kelly sur quel capital de référence ?</td>
|
||
<td>Laisser l'utilisateur définir un capital de référence dans la Config (ex : 50 000€) — le sizing est exprimé en % et en € notionnel.</td>
|
||
</tr>
|
||
<tr>
|
||
<td>Embeddings : OpenAI ou local ?</td>
|
||
<td>OpenAI <code>text-embedding-3-small</code> pour démarrer ($0.002/1M tokens, négligeable). Migration vers un modèle local (sentence-transformers) possible en Phase 4 si nécessaire.</td>
|
||
</tr>
|
||
</table>
|
||
|
||
<div class="callout green">
|
||
<div class="label">Projection des notes post-roadmap</div>
|
||
<strong>Trading d'Options :</strong> 5/10 → <strong>8.5/10</strong> (Phase 1 + 2)<br>
|
||
<strong>Gestion du Risque :</strong> 6/10 → <strong>8.5/10</strong> (Phase 3)<br>
|
||
<strong>Niveau Fonds Pro :</strong> 6.5/10 → <strong>8.5/10</strong> (Phase 1 → 3)<br>
|
||
<strong>Architecture IA :</strong> 8.5/10 → <strong>9.5/10</strong> (Phase 2 + 4)
|
||
</div>
|
||
|
||
<p style="margin-top:40px; font-size:8.5pt; color:#94a3b8; text-align:center;">
|
||
GeoOptions Intelligence v2.0 — Roadmap de développement · Basé sur audit expert · Juin 2026
|
||
</p>
|
||
|
||
</body>
|
||
</html>
|