# MANIFEST des figures README

Provenance des images de `assets/readme/` (EPIC #5654, source 1 = extraction d'outputs de notebooks QuantConnect).

> **Audit vision po-2026 c.436 (2026-07-14, doctrine #5780)** : les 6 PNG ci-dessous ont été ouverts un par un via l'outil `Read` et comparés à leur alt-text. Verdict par figure dans le champ *Contenu réel vérifié*. Cohérence caption ↔ image = **0/6 exacte, 6 corrections d'alt-text appliquées** — tous les alt-texts d'origine étaient **generiques** (omettaient la structure dual-panel pedagogiquement cruciale et les valeurs concretes visibles sur la figure, defaut fondateur type isole par L490 c.433 + c.435).

**Migration c.781 (2026-07-22, doctrine #5780, asset-side enforcement)** : ajout du champ canonique `Description visuelle` aux 6 entrées (format vague-1 → 3-champs canonique Source / Description visuelle / Alt-text / Poids / Contenu réel vérifié). Source = vision-QA MiniMax M3 (`Read` direct des 6 PNG via po-2024, mandat 2026-07-11) + stats RGB PIL (mean/std par canal, échantillonnage 2000 pixels random seed 42). Conformité avec le détecteur `scripts/notebook_tools/detect_manifest_field.py` (PR #7819 c.754). Le champ `Contenu réel vérifié` (audit c.436 po-2026) reste en place comme preuve falsifiable détaillée ; le nouveau `Description visuelle` est la version canonique courte destinée à l'extraction automatique et au lecteur rapide. **6/6 figures conformes au détecteur post-migration.**

## quantpy04-research-buyhold.png

- **Source** : notebook `QC-Py-04-Research-Workflow.ipynb` (cellule 37, output 0)
- **Description visuelle** : Figure `matplotlib` 2 panneaux empilés (1200×595, fond `seaborn-darkgrid` gris-violet tell `mean RGB ~235 + std ~25`). **Haut « SPY avec SMA 50/200 »** : courbe noire `SPY Close` sur juil. 2025 → mai 2026, range 600-750 $, SMA 50 (bleu `tab:blue` `#1f77b4`) démarre vers 2025-08, SMA 200 (rouge `tab:red` `#d62728`) démarre vers 2025-12. **Bas « Comparaison Returns Cumulatifs »** : 2 courbes — `Buy & Hold` gris (~+25 % pic) vs `SMA Crossover` vert (`#2ca02c` `tab:green`, ~+15 % pic, drawdown visible vers 2026-03 à ~0.97), ligne pointillée rouge horizontale à 1.00 (baseline). Légendes internes coin haut-gauche de chaque panneau. Stats RGB PIL : moyenne (234.92, 235.15, 241.34), std (25.69, 24.48, 24.29) — `mean R = G ≈ 235 + mean B = 241` tell discriminant **fond seaborn-darkgrid** (gris-violet `#E5E5EE` dominant) avec `std faible ~25` typique de zones colorées denses sur fond pastel. Démontre la **discipline crossover** : ne trader qu'après confirmation crossover 50/200, pas en continu (le SMA Crossover reste plat toute 2025 puis monte brutalement après le crossover de 2026-03).
- **Alt-text (FR)** *(corrigé c.436)* : Workflow de recherche QuantBook : **deux sous-graphiques empilés** produits sur SPY (juil. 2025 → mai 2026). **Haut** — prix SPY (noir) avec SMA 50 (bleu) et SMA 200 (rouge) superposées, range 600-750 $. **Bas** — comparaison des returns cumulatifs normalisés (axe Y = 0.95 → 1.30) : Buy & Hold (gris, +25 % pic) vs SMA Crossover (vert, +15 % pic après une longue période plate et un drawdown visible vers 2026-03). Démontre le **crossover SMA 50/200** comme signal de tendance long terme (le TP `QC-Py-04` illustre la discipline « ne trader qu'après confirmation crossover, pas en continu »).
- **Contenu réel vérifié** (audit visuel MiniMax M3, c.436) : figure composite à 2 panneaux. Haut : « SPY avec SMA 50/200 », courbe noire SPY Close sur ~22 mois, SMA 50 (bleu) démarre vers 2025-08, SMA 200 (rouge) démarre vers 2025-12, range 600-750 $, ligne horizontale implicite. Bas : « Comparaison Returns Cumulatifs », Buy & Hold gris sur toute la période, SMA Crossover vert plat à 1.0 jusqu'à 2026-03 (drawdown à 0.97) puis montée vers 1.13. Ligne pointillée rouge horizontale à 1.00 (baseline). **Alt-text précédent annonçait simplement « comparaison visuelle d'une stratégie SMA contre le buy-and-hold sur SPY » — corrigé : la formulation generique occultait la structure dual-panel (haut = prix + moyennes mobiles, bas = returns cumulés Buy & Hold vs SMA Crossover) ainsi que les valeurs concretes (range 600-750 $, return pic Buy&Hold +25 %, SMA Crossover pic +15 %, drawdown -3 % 2026-03). Reformulé pour mentionner explicitement « deux sous-graphiques empilés » et le crossover SMA 50/200 qui est la notion-clé du TP.**
- **Poids** : 146.7 KB (downscale max-dim 1200, source 1390×690 / 114.2 KB)

## quantpy08-rolling-corr.png

- **Source** : notebook `QC-Py-08-Multi-Asset-Strategies.ipynb` (cellule 23, output 1)
- **Description visuelle** : Figure `matplotlib` 2 panneaux empilés (1200×682, fond `seaborn-darkgrid` gris-violet tell `mean RGB ~234 + std ~28`). **Haut « Returns Cumules SPY vs TLT »** : 2 courbes sur 4 ans (2020-01 → 2024-01) — `SPY` bleu marine (`navy` `#1f3a93`-ish) cumul +110 % pic, `TLT` orange (`tab:orange` `#ff7f0e`) cumul +30 % pic ; **bandeau vertical rouge clair « Periode stress »** couvrant ~3 mois sur 2021-Q1 (zone COVID / choc taux). **Bas « Correlation Glissante 60 jours (SPY-TLT) »** : courbe violette (`tab:purple` `#9467bd`) oscillant dans [-0.8, -0.2], ligne pointillée rouge horizontale « Moyenne : -0.45 ». Légendes internes coin haut-droite des deux panneaux. Stats RGB PIL : moyenne (235.54, 231.95, 238.50), std (20.41, **28.06**, 27.35) — `mean B > mean R > mean G` tell discriminant **fond seaborn-darkgrid + dominance violet tell** (le `G_std 28` élevé vs `R_std 20` signale la courbe violette qui tire le G vers le bas). Tell **bandeau rouge stress** : zone `~#F08080` semi-transparente sur 2021-Q1 (contribue au `R_mean` ~235, plus chaud que les autres fonds purement violets). Démontre la **diversification actions/obligations** et son **effondrement en période stress** : la corrélation remonte vers -0.2 dans le bandeau rouge (2 actifs positivement corrélés temporairement = diversification KO).
- **Alt-text (FR)** *(corrigé c.436)* : Stratégies multi-actifs SPY vs TLT : **deux sous-graphiques empilés** sur 4 ans (2020-01 → 2024-01). **Haut** — returns cumulés SPY (bleu marine, +110 %) vs TLT (orange, +30 %), avec un **bandeau vertical rouge « Periode stress »** sur 2021-Q1 (zone COVID / choc taux). **Bas** — corrélation glissante 60 jours (SPY-TLT) en violet, oscillant entre -0.8 (corrélation fortement négative) et -0.2, avec une ligne pointillée rouge horizontale « Moyenne : -0.45 ». Démontre la **diversification actions/obligations** (couverture naturelle) et son **effondrement en période stress** (la corrélation remonte brièvement vers -0.2 dans la bande rouge avant de rechuter).
- **Contenu réel vérifié** (audit visuel MiniMax M3, c.436) : figure composite à 2 panneaux. Haut : « Returns Cumules SPY vs TLT », 2 courbes (SPY bleu marine +110 % pic, TLT orange +30 % pic) sur 4 ans, bandeau vertical rouge couvrant ~3 mois (2021-Q1) labellisé « Periode stress ». Bas : « Correlation Glissante 60 jours (SPY-TLT) », courbe violette oscillant dans la zone [-0.8, -0.2], ligne pointillée rouge horizontale à -0.45 (« Moyenne : -0.45 »). Pendant le bandeau rouge, la corrélation remonte vers -0.2 (les 2 actifs deviennent **positivement corrélés** sous stress = diversification KO temporaire). **Alt-text précédent disait simplement « évolution temporelle de la corrélation entre deux actifs, instable en période de stress » — corrigé : occultait le bandeau rouge « Periode stress » qui est l'element pédagogique central de la figure, ainsi que la moyenne -0.45 et le range -0.8/-0.2. Reformulé pour mentionner explicitement le bandeau rouge et la valeur moyenne.**
- **Poids** : 174.3 KB (downscale max-dim 1200, source 1389×790 / 136.2 KB)

## quantpy10-stoploss.png

- **Source** : notebook `QC-Py-10-Risk-Portfolio-Management.ipynb` (cellule 33, output 1)
- **Description visuelle** : Figure `matplotlib` 2 panneaux empilés (1100×782, fond `seaborn-darkgrid` gris-violet tell `mean RGB ~225 + std B 52`). **Haut « Comparaison des Types de Stop-Loss »** : courbe bleu `Prix` (axe Y 100-118 $) sur ~75 jours (2023-01-01 → 2023-03-20), 3 stops horizontaux : `Fixed Stop 5 % = $97.01` (rouge `#d62728` tirets), `ATR Stop 2× = $95.60` (orange `#ff7f0e` tirets-points, plus bas car plus conservateur), `Support Stop SMA-2 %` (vert `#2ca02c` tirets mobile). Point d'entrée `$102.12` marqué d'un gros point bleu + ligne verticale pointillée. **Bas « Distance au Stop (%) »** : **aires empilées** `ATR Stop` (orange clair `#FFA07A` 5-18 %) sous `Fixed Stop` (rose pâle `#FFC0CB` 5 % fixe), courbe `Support Stop` (vert, varie 0-10 %). Légende interne coin haut-droit du panneau bas. Stats RGB PIL : moyenne (234.99, 221.55, 219.54), std (28.71, 37.40, **51.70**) — **`R mean > G mean > B mean tell discriminant** = fond seaborn-darkgrid (gris-violet dominant, ~#E5E5EE) + zone empilée orange ATR Stop qui tire le R vers le haut et le B vers le bas ; **`std B 51.70` tell discriminant** de la zone empilée orange clair vs fond violet (contraste spectral maximal). Démontre la **comparaison stop-loss fixe vs adaptatif (ATR) vs trend-following (SMA)** : l'ATR stop s'élargit quand la volatilité monte (protection anti-whipsaw), le SMA stop suit la tendance.
- **Alt-text (FR)** *(corrigé c.436)* : Gestion des risques stop-loss : **deux sous-graphiques empilés** sur ~75 jours (2023-01-01 → 2023-03-20). **Haut** — prix simulé (bleu) avec **trois stops horizontaux** : Fixed Stop 5 % = $97.01 (rouge tirets), ATR Stop 2× = $95.60 (orange tirets-points), Support Stop SMA-2 % (vert tirets), plus le point d'entrée $102.12 (gros point bleu). **Bas** — distance au stop en %, aires empilées ATR Stop (orange clair) + Fixed Stop (rose pâle), courbe Support Stop (vert). Démontre la **comparaison stop-loss fixe vs adaptatif (ATR) vs trend-following (SMA)** : l'ATR stop s'élargit quand la volatilité monte (protection anti-whipsaw), le SMA stop suit la tendance.
- **Contenu réel vérifié** (audit visuel MiniMax M3, c.436) : figure composite à 2 panneaux. Haut : « Comparaison des Types de Stop-Loss », courbe bleu « Prix » oscillant 100-118, 3 stops horizontaux : Fixed Stop 5 % ($97.01 rouge tirets), ATR Stop 2× ($95.60 orange tirets-points, plus bas que le fixed car plus conservateur), Support Stop SMA-2 % (vert tirets, mobile). Point d'entrée $102.12 marqué d'un gros point bleu + ligne verticale pointillée. Bas : « Distance au Stop (%) », aires empilées Fixed Stop (rose pâle, fixe 5 %) + ATR Stop (orange clair, varie entre 5 % et 18 %), courbe Support Stop (vert, varie 0-10 %). **Alt-text précédent disait simplement « comparaison visuelle des types de stop-loss (fixe, trailing, volatilité) sur un prix simulé » — corrigé : occultait les valeurs concretes (Fixed $97.01, ATR $95.60, Entry $102.12) et la structure empilée aire + courbe. Reformulé pour mentionner explicitement les 3 stops avec leurs valeurs exactes et le point d'entrée.**
- **Poids** : 184.0 KB (downscale max-dim 1100, source 1390×989 / 167.1 KB)

## quantpy12-backtest-scatter.png

- **Source** : notebook `QC-Py-12-Backtesting-Analysis.ipynb` (cellule 55, output 0)
- **Description visuelle** : Figure `matplotlib` 2 panneaux côte-à-côte (1200×423, fond `seaborn-darkgrid` gris-violet tell `mean RGB ~233 + std ~32`). **Gauche « Strategy vs Benchmark Returns »** : **scatter plot** ~250 points bleus (`steelblue` `#4682B4`-ish, transparence alpha) dispersés dans le quadrant [-3 %, +3 %]², **droite de régression rouge en pointillés β = 0.44** (annotation « Beta = 0.44 » coin haut-droit) traversant le nuage avec pente modérée, axes croisés à (0, 0) par lignes noires fines (Y=0 horizontale, X=0 verticale). **Droite « Equity Curves Comparees »** : 2 courbes sur 2022-01 → 2024-01 — `Strategie` bleu marine (`navy` `#1f3a93`-ish, plein) finit à 1.42, `Benchmark` gris (`#808080` tirets) finit à 1.47, baseline noire horizontale à 1.00 (1.0 = buy-hold baseline). Légendes internes coin haut-gauche de chaque panneau. Stats RGB PIL : moyenne (230.52, 231.47, 238.88), std (35.73, 33.08, 28.11) — **`mean B = 239 tell discriminant > mean R = G ~231** (fond seaborn-darkgrid violet `#E5E5EE` à tonalité bleue dominante), **`std R 35.73` tell discriminant** = la droite de régression rouge tire la variance R vers le haut (vs les autres panneaux où la couleur rouge est mineure). Démontre la **mesure du β** (sensibilité au benchmark) et le **profil risque/rendement** : β=0.44 < 1 = stratégie **défensive** (moins volatile que le marché).
- **Alt-text (FR)** *(corrigé c.436)* : Analyse de backtest : **deux sous-graphiques côte-à-côte** sur 2 ans (2022-01 → 2024-01). **Gauche** — scatter Strategy Returns (%) vs Benchmark Returns (%) avec **droite de régression rouge en pointillés β = 0.44** (la stratégie amplifie modérément le benchmark), points bleus dispersés dans le quadrant [-3 %, +3 %]², axes croisés à (0, 0). **Droite** — equity curves comparées : Strategie (bleu marine) finit à 1.42, Benchmark (gris tirets) finit à 1.47, baseline noire horizontale à 1.00. Démontre la **mesure du β** (sensibilité au benchmark) et le **profil risque/rendement** : β=0.44 < 1 = stratégie **défensive** (moins volatile que le marché).
- **Contenu réel vérifié** (audit visuel MiniMax M3, c.436) : figure composite à 2 panneaux. Gauche : « Strategy vs Benchmark Returns », scatter ~250 points bleus dispersés, droite de régression rouge pointillée β=0.44 (pente modérée), axes [-3, +3] % chacun, lignes noires horizontale (Y=0) et verticale (X=0) qui se croisent à l'origine. Droite : « Equity Curves Comparees », Strategie (bleu marine, plein) et Benchmark (gris, tirets) ; la Strategie reste sous le Benchmark toute la période 2022 (sous-performance), puis dépasse en 2023-07 → 2023-10 (pic ~1.50), finit à 1.42 vs Benchmark 1.47. **Alt-text précédent disait simplement « scatter des rendements quotidiens stratégie vs benchmark, profil risque/rendement » — corrigé : occultait la valeur β=0.44 (qui est LA mesure pedagogiquement cruciale = stratégie defensive), les valeurs finales equity (1.42 vs 1.47) et la structure côte-à-côte (gauche scatter bêta, droite equity). Reformulé pour mentionner explicitement β=0.44 et la nature defensive de la stratégie.**
- **Poids** : 178.8 KB (downscale max-dim 1200, source 1388×490 / 121.9 KB)

## quantpy19-walkforward.png

- **Source** : notebook `QC-Py-19-ML-Supervised-Classification.ipynb` (cellule 47, output 0)
- **Description visuelle** : Figure `matplotlib` 2 panneaux empilés (1200×682, fond `seaborn-darkgrid` gris-violet tell). **Haut « Walk-Forward Validation - Accuracy par Fold »** : **bar chart** 14 barres bleues (`steelblue` `#4682B4`) accuracy par fold (axe Y 0.0 → 1.0, axe X 1 → 14), valeurs typiques ≈ 0.95 (folds 5-7 ≈ pics), ≈ 0.65 (folds 4, 9), ≈ 0.51 (fold 8, plus mauvais), ≈ 0.80 (fold 12). 2 lignes horizontales : **`Mean Accuracy = 0.874`** (rouge `#d62728` pointillés), **`Random Baseline = 0.5`** (gris `#808080` pointillés). **Bas « Accuracy Cumulee au Fil du Temps »** : courbe bleue pleine avec aire bleu clair dessous, démarre à 1.0 (2023-03), chute vers 0.84 sur 2023-04, converge asymptotiquement vers 0.87 à 2024-05. Stats RGB PIL : moyenne (**186.44, 203.38, 222.03**), std (**72.17**, 51.84, 37.48) — **`mean B > mean G > mean R tell discriminant bar chart bleu dominant** (les barres bleues foncées `steelblue` ~#4682B4 + fond seaborn-darkgrid créent une dominance B tell) + **`std R 72 tell discriminant** = variance forte sur R à cause des barres `steelblue` (R bas) qui contrastent avec le fond clair (R haut) ; ce tell est l'opposé du pattern c.778 ICT-Série heatmap dark-field où `mean R/G/B < 100`. Démontre la **stabilité OOS** du modèle : accuracy cumulée reste > 0.85 malgré les folds médiocres (convergence finale 0.87 vs baseline random 0.5 = +0.37 marge substantielle).
- **Alt-text (FR)** *(corrigé c.436)* : Validation walk-forward d'un classifieur supervisé : **deux sous-graphiques empilés** sur 14 mois (2023-03 → 2024-05). **Haut** — accuracy par fold (bar chart bleu, axe Y = 0.0 → 1.0, axe X = 1 → 14), 2 lignes horizontales : **Mean Accuracy = 0.874** (rouge pointillés, donc performance moyenne élevée) et **Random Baseline = 0.5** (gris pointillés, baseline 50/50). 11 folds au-dessus de 0.8, 3 folds entre 0.5 et 0.7 (sous-performances ponctuelles). **Bas** — accuracy cumulée au fil du temps (courbe bleue pleine, aire bleu clair sous la courbe), démarrant à 1.0 puis convergeant vers 0.87 sur 14 mois. Démontre la **stabilité OOS** du modèle (accuracy cumulée reste > 0.85 malgré les folds médiocres).
- **Contenu réel vérifié** (audit visuel MiniMax M3, c.436) : figure composite à 2 panneaux. Haut : « Walk-Forward Validation - Accuracy par Fold », 14 barres bleues (folds 1-14), range 0.0-1.0, valeurs typiques ≈ 0.95 (folds 5-7), ≈ 0.65 (folds 4, 9), ≈ 0.51 (fold 8, plus mauvais), ≈ 0.80 (fold 12). 2 lignes horizontales : Mean Accuracy 0.874 rouge pointillés, Random Baseline 0.5 gris pointillés. Bas : « Accuracy Cumulee au Fil du Temps », courbe bleue pleine avec aire bleu clair dessous, démarre à 1.0 (2023-03), chute vers 0.84-0.90 sur 2023-04 → 2024-03, converge asymptotiquement vers ~0.87 à 2024-05. Ligne pointillée Random Baseline 0.5 en haut-droite (annotation). **Alt-text précédent disait simplement « accuracy par fold avec fenêtre de train glissante, simulation du trading réel avec retrain périodique » — corrigé : occultait la valeur Mean Accuracy 0.874 (qui est LA mesure pedagogiquement cruciale = performance globale), la baseline random 0.5, et la courbe cumulée convergente. Reformulé pour mentionner explicitement les valeurs 0.874 et 0.5 et la structure 2 panneaux (bars + cumul).**
- **Poids** : 112.2 KB (downscale max-dim 1200, source 1389×790 / 69.9 KB)

## quantpy32-dqn-training.png

- **Source** : notebook `QC-Py-32-RL-DQN-Trading.ipynb` (cellule 29, output 0)
- **Description visuelle** : Figure `matplotlib` **4 panneaux en grille 2×2** (1200×747, fond **matplotlib blanc** tell `mean RGB ~248 + std ~31` typique `seaborn-whitegrid` ou `default`). **Haut-gauche « Reward par Episode »** : courbe brute bleu clair (`lightblue` `#ADD8E6`) oscillant -75 à +150 sur 200 épisodes, **MA-10** rouge `#d62728` qui passe de -65 (épisodes 0-100) à +50 (épisodes 175-190). **Haut-droite « Loss d'Apprentissage »** : courbe brute bleu clair oscillant 0.005-0.06, **MA-50** rouge en cloche centrée sur l'épisode 175 (pic 0.038 = explosion temporaire transition exploration→exploitation). **Bas-gauche « Sharpe Ratio Validation »** : courbe bleue pleine sur 10 évaluations [0.0, 0.6, 0.4, -6.8, -2.0, -5.4, -1.2, -0.4, -0.1, 0.05] ; ligne horizontale pointillée verte `#2ca02c` **`Target 0.7`** en haut. **Bas-droite « Resume Meilleur Modele »** : encadré beige `#F5F5DC`-ish listant 6 métriques : `Meilleur Episode = 40`, `Val Sharpe = 0.683`, `Val Return = +50.1 %`, `Epsilon final = 0.050`, `Buffer size = 100 000`, `Total steps = 1 113 615`. Stats RGB PIL : moyenne (**248.33, 247.74, 247.54**), std (30.69, 31.84, 31.63) — **`mean R = G = B ≈ 248 tell discriminant fond matplotlib blanc dominant** (proche du blanc pur, std uniforme ~31 sur les 3 canaux = variance R/G/B équivalente typique du style par défaut) ; complémentaire au tell **seaborn-darkgrid** des autres figures du même MANIFEST (mean ~230 + tonalité violette). Tell discriminant **DQN-RL grid 2×2** vs **scatter simple** = ce 4-panneaux présente une std uniforme (les 4 panneaux sont équilibrés visuellement) tandis qu'un scatter simple aurait une std concentrée sur un seul canal. Démontre l'**apprentissage par renforcement profond** appliqué au trading : convergence tardive (épisode 175+), drawdown intermédiaire sévère (Sharpe -7), compromis exploration/exploitation (epsilon 0.05 = exploitation largement majoritaire).
- **Alt-text (FR)** *(corrigé c.436)* : Entraînement DQN (Deep Q-Network) sur trading : **quatre sous-graphiques en grille 2×2** sur 200 épisodes. **Haut-gauche** — reward par épisode (axe Y = -75 à +150), courbe bleue brute très volatile + moyenne mobile **MA-10** rouge qui passe de -65 (épisodes 0-100) à ~+50 (épisodes 175-190) — convergence finale vers reward positif. **Haut-droite** — loss Huber (axe Y = 0.00 à 0.06), courbe brute + moyenne mobile **MA-50** rouge en cloche centrée sur l'épisode 175 (explosion temporaire de la loss = transition de phase exploration→exploitation). **Bas-gauche** — Sharpe Ratio sur 10 évaluations (axe Y = -7 à +1), chute à -7 vers l'évaluation 3, remonte progressivement vers 0 à l'évaluation 9 ; ligne horizontale pointillée verte **Target 0.7** en haut. **Bas-droite** — résumé textuel « Meilleur Modele » : Meilleur Épisode = 40, Val Sharpe = 0.683, Val Return = +50.1 %, Epsilon final = 0.050, Buffer size = 100 000, Total steps = 1 113 615. Démontre l'**apprentissage par renforcement profond** appliqué au trading : convergence tardive (épisode 175+), drawdown intermédiaire sévère (Sharpe -7), et le **compromis exploration/exploitation** (epsilon final 0.05 = exploitation largement majoritaire).
- **Contenu réel vérifié** (audit visuel MiniMax M3, c.436) : figure composite **à 4 panneaux** (grille 2×2). Haut-gauche : « Reward par Episode », courbe bleue brute oscillant fortement entre -75 et +150, MA-10 rouge qui démarre à -65 puis monte vers +50 sur les épisodes 175-190. Haut-droite : « Loss d'Apprentissage », courbe brute bleue oscillant 0.005-0.06, MA-50 rouge lisse en cloche centrée à l'épisode 175 (pic 0.038). Bas-gauche : « Sharpe Ratio Validation », courbe bleue pleine, 10 points d'évaluation (0 → 9), valeurs [0.0, 0.6, 0.4, -6.8, -2.0, -5.4, -1.2, -0.4, -0.1, 0.05] ; ligne horizontale pointillée verte Target 0.7 en haut. Bas-droite : « Resume Meilleur Modele » vide visuellement à part le texte encadré beige listant les 6 métriques (Meilleur Épisode 40, Val Sharpe 0.683, Val Return +50.1 %, Epsilon final 0.050, Buffer size 100 000, Total steps 1 113 615). **Alt-text précédent disait simplement « récompenses par épisode et courbes d'apprentissage de l'agent de renforcement profond (exploration vs exploitation) » — corrigé : occultait complètement la structure 4 panneaux (vs 2 implicites), la loss Huber en cloche, le Sharpe ratio oscillant entre -7 et +0.6, et les 6 métriques du résumé texte. Reformulé pour mentionner explicitement « quatre sous-graphiques en grille 2×2 » et les valeurs clés (MA-10/MA-50, Target 0.7, Sharpe -7, Epsilon 0.05, Total steps 1.1M).**
- **Poids** : 155.6 KB (downscale max-dim 1200, source 1590×990 / 137.6 KB)
