From 91b3cc43f447a87d4878c7d96a06b2f516b98669 Mon Sep 17 00:00:00 2001 From: jsboige Date: Thu, 8 Oct 2026 11:05:15 +0200 Subject: [PATCH 1/3] fix(density,#17040): QC-Py-11 -- la lecture TrendStrength rejoint la classe qu'elle lit La lecture de TrendStrengthIndicator (cellule 32) precedait de 3 cellules la classe qu'elle decrit (cellule 35), avec l'exercice CompositeScoreIndicator entre les deux. Deplacee juste apres son code. Reordonnancement pur : ensemble des textes markdown identique, cellules code intactes. Co-Authored-By: Claude Sonnet 5.5 --- .../QC-Py-11-Technical-Indicators.ipynb | 50 +++++++++---------- 1 file changed, 25 insertions(+), 25 deletions(-) diff --git a/MyIA.AI.Notebooks/QuantConnect/Python/QC-Py-11-Technical-Indicators.ipynb b/MyIA.AI.Notebooks/QuantConnect/Python/QC-Py-11-Technical-Indicators.ipynb index 03c20f43d8..0534e9d270 100644 --- a/MyIA.AI.Notebooks/QuantConnect/Python/QC-Py-11-Technical-Indicators.ipynb +++ b/MyIA.AI.Notebooks/QuantConnect/Python/QC-Py-11-Technical-Indicators.ipynb @@ -1506,31 +1506,6 @@ ], "metadata": {} }, - { - "cell_type": "markdown", - "id": "trk39n5xq9", - "source": [ - "### Interpretation - TrendStrengthIndicator\n", - "\n", - "Le `TrendStrengthIndicator` est un exemple d'indicateur de tendance basé sur la **directionnalité des mouvements** plutôt que sur la magnitude des prix.\n", - "\n", - "**Principe** :\n", - "- Compte les mouvements \"up\" vs \"down\" sur la période\n", - "- Score normalisé entre -1 (100% bearish) et +1 (100% bullish)\n", - "- Zéro = consolidation (autant de mouvements up que down)\n", - "\n", - "**Avantages par rapport aux indicateurs classiques** :\n", - "- **Robustesse aux gaps** : Compte la direction, pas l'amplitude\n", - "- **Filtrage du bruit** : Un gap massif compte comme un mouvement up, comme une petite hausse\n", - "- **Interprétation intuitive** : +0.7 = 70% des jours sont haussiers\n", - "\n", - "**Utilisation pratique** :\n", - "- Valeur > 0.5 : Trend haussier établi\n", - "- Valeur < -0.5 : Trend baissier établi\n", - "- Proche de 0 : Range, éviter le trend-following" - ], - "metadata": {} - }, { "cell_type": "markdown", "id": "c5c50ef5", @@ -1665,6 +1640,31 @@ "print(\" -1.0 : Downtrend tres fort (100% des jours sont down)\")" ] }, + { + "cell_type": "markdown", + "id": "trk39n5xq9", + "source": [ + "### Interpretation - TrendStrengthIndicator\n", + "\n", + "Le `TrendStrengthIndicator` est un exemple d'indicateur de tendance basé sur la **directionnalité des mouvements** plutôt que sur la magnitude des prix.\n", + "\n", + "**Principe** :\n", + "- Compte les mouvements \"up\" vs \"down\" sur la période\n", + "- Score normalisé entre -1 (100% bearish) et +1 (100% bullish)\n", + "- Zéro = consolidation (autant de mouvements up que down)\n", + "\n", + "**Avantages par rapport aux indicateurs classiques** :\n", + "- **Robustesse aux gaps** : Compte la direction, pas l'amplitude\n", + "- **Filtrage du bruit** : Un gap massif compte comme un mouvement up, comme une petite hausse\n", + "- **Interprétation intuitive** : +0.7 = 70% des jours sont haussiers\n", + "\n", + "**Utilisation pratique** :\n", + "- Valeur > 0.5 : Trend haussier établi\n", + "- Valeur < -0.5 : Trend baissier établi\n", + "- Proche de 0 : Range, éviter le trend-following" + ], + "metadata": {} + }, { "cell_type": "markdown", "id": "cell-20", From e0b55e72f349abc47fbd3b9569d63e1b5d41d1ab Mon Sep 17 00:00:00 2001 From: jsboige Date: Thu, 8 Oct 2026 11:05:19 +0200 Subject: [PATCH 2/3] fix(density,#17040): QC-Py-22 -- la lecture qc_code rejoint le code qui le genere La lecture de la generation de qc_code (cellule 67) precedait de 4 cellules le code qu'elle decrit (cellule 71). Deplacee juste apres. Reordonnancement pur : ensemble des textes markdown identique, cellules code intactes. Co-Authored-By: Claude Sonnet 5.5 --- .../Python/QC-Py-22-Deep-Learning-LSTM.ipynb | 92 +++++++++---------- 1 file changed, 46 insertions(+), 46 deletions(-) diff --git a/MyIA.AI.Notebooks/QuantConnect/Python/QC-Py-22-Deep-Learning-LSTM.ipynb b/MyIA.AI.Notebooks/QuantConnect/Python/QC-Py-22-Deep-Learning-LSTM.ipynb index db1cbbedbf..1e5bb5b6a3 100644 --- a/MyIA.AI.Notebooks/QuantConnect/Python/QC-Py-22-Deep-Learning-LSTM.ipynb +++ b/MyIA.AI.Notebooks/QuantConnect/Python/QC-Py-22-Deep-Learning-LSTM.ipynb @@ -3605,52 +3605,6 @@ "TimeMixer (si multi-échelle), iTransformer (si N > 20).\n" ] }, - { - "cell_type": "markdown", - "id": "27ebca90", - "metadata": { - "papermill": { - "duration": 0.019394, - "end_time": "2026-09-19T02:52:10.036280", - "exception": false, - "start_time": "2026-09-19T02:52:10.016886", - "status": "completed" - }, - "tags": [] - }, - "source": [ - "***\n", - "\n", - "### Interprétation\n", - "\n", - "Ce code génère une chaîne de caractères Python (`qc_code`) contenant le code complet de l'implémentation QuantConnect. Bien que ce code ne soit pas exécutable dans ce notebook Jupyter (les classes `QCAlgorithm` nécessitent l'environnement QuantConnect), il sert de **référence directe** à copier dans le fichier `main.py` d'un projet QC Lab.\n", - "\n", - "Les composants principaux sont :\n", - "- **DLinear model** : Implémentation PyTorch adaptée pour QuantConnect (CPU)\n", - "- **DLinearAlphaModel** : Alpha Model Framework qui charge le modèle depuis ObjectStore\n", - "- **DLinearSymbolData** : Gestion des features par symbole (SMA, RSI, volatilité)\n", - "- **DLinearTradingStrategy** : Stratégie complète avec univers multi-actifs\n", - "\n", - "***\n", - "\n", - "**Génération de code QC Algorithm Framework** : la cellule construit\n", - "un string Python qui contient 4 classes QC :\n", - "\n", - "1. **DLinear model definition** : la classe PyTorch du modèle,\n", - " exportée pour exécution dans QC Cloud (state_dict via ObjectStore).\n", - "2. **DLinearAlphaModel** : l'alpha qui prédit le signal directionnel\n", - " à partir des features QC.\n", - "3. **DLinearSymbolData** : le data class qui gère les features\n", - " (indicateurs techniques via history).\n", - "4. **DLinearTradingStrategy** : la stratégie complète qui\n", - " consume l'alpha et place les ordres.\n", - "\n", - "**Pourquoi générer le code plutôt que de l'écrire directement** :\n", - "le notebook fait le lien automatique entre PyTorch local et QC\n", - "Cloud — l'étudiant peut tester le modèle en local (Papermill),\n", - "puis déployer en 1 copier-coller.\n" - ] - }, { "cell_type": "markdown", "id": "5c4267be", @@ -4162,6 +4116,52 @@ "print(\"\\nTaille du code: ~200 lignes\")" ] }, + { + "cell_type": "markdown", + "id": "27ebca90", + "metadata": { + "papermill": { + "duration": 0.019394, + "end_time": "2026-09-19T02:52:10.036280", + "exception": false, + "start_time": "2026-09-19T02:52:10.016886", + "status": "completed" + }, + "tags": [] + }, + "source": [ + "***\n", + "\n", + "### Interprétation\n", + "\n", + "Ce code génère une chaîne de caractères Python (`qc_code`) contenant le code complet de l'implémentation QuantConnect. Bien que ce code ne soit pas exécutable dans ce notebook Jupyter (les classes `QCAlgorithm` nécessitent l'environnement QuantConnect), il sert de **référence directe** à copier dans le fichier `main.py` d'un projet QC Lab.\n", + "\n", + "Les composants principaux sont :\n", + "- **DLinear model** : Implémentation PyTorch adaptée pour QuantConnect (CPU)\n", + "- **DLinearAlphaModel** : Alpha Model Framework qui charge le modèle depuis ObjectStore\n", + "- **DLinearSymbolData** : Gestion des features par symbole (SMA, RSI, volatilité)\n", + "- **DLinearTradingStrategy** : Stratégie complète avec univers multi-actifs\n", + "\n", + "***\n", + "\n", + "**Génération de code QC Algorithm Framework** : la cellule construit\n", + "un string Python qui contient 4 classes QC :\n", + "\n", + "1. **DLinear model definition** : la classe PyTorch du modèle,\n", + " exportée pour exécution dans QC Cloud (state_dict via ObjectStore).\n", + "2. **DLinearAlphaModel** : l'alpha qui prédit le signal directionnel\n", + " à partir des features QC.\n", + "3. **DLinearSymbolData** : le data class qui gère les features\n", + " (indicateurs techniques via history).\n", + "4. **DLinearTradingStrategy** : la stratégie complète qui\n", + " consume l'alpha et place les ordres.\n", + "\n", + "**Pourquoi générer le code plutôt que de l'écrire directement** :\n", + "le notebook fait le lien automatique entre PyTorch local et QC\n", + "Cloud — l'étudiant peut tester le modèle en local (Papermill),\n", + "puis déployer en 1 copier-coller.\n" + ] + }, { "cell_type": "markdown", "id": "6141418c", From 4d3eb7f67a3f69f7a35bbd3d16df06d6c88e6f2a Mon Sep 17 00:00:00 2001 From: jsboige Date: Thu, 8 Oct 2026 11:05:24 +0200 Subject: [PATCH 3/3] fix(density,#17040): QC-Py-34 -- duree epinglee fausse retiree + lectures fusionnees (a) La cellule 34 affirmait << 6 minutes d'A2C contre les 2,4 minutes de SAC >> alors que les sorties committeess disent 4.5 et 2.1 min, et que la cellule 36 declare ces valeurs << anciennement epinglees... machine-dependantes >>. Phrase introduite le 2026-08-30, soit APRES cette note de drainage du 16/08 : regression datable. Remplacee par le rapport ~2x renvoye aux sorties. (b) Les cellules 36 et 37 lisaient toutes deux la meme sortie d'entrainement A2C. Texte de 37 conserve verbatim en fin de 36, avec une note signalant que la mesure contredit son hypothese sur alpha (qui decroit 0,887 -> 0,691 au lieu de se stabiliser). Co-Authored-By: Claude Sonnet 5.5 --- .../Python/QC-Py-34-RL-SAC-A2C-Trading.ipynb | 25 +++++-------------- 1 file changed, 6 insertions(+), 19 deletions(-) diff --git a/MyIA.AI.Notebooks/QuantConnect/Python/QC-Py-34-RL-SAC-A2C-Trading.ipynb b/MyIA.AI.Notebooks/QuantConnect/Python/QC-Py-34-RL-SAC-A2C-Trading.ipynb index 8e311a3892..804aea4617 100644 --- a/MyIA.AI.Notebooks/QuantConnect/Python/QC-Py-34-RL-SAC-A2C-Trading.ipynb +++ b/MyIA.AI.Notebooks/QuantConnect/Python/QC-Py-34-RL-SAC-A2C-Trading.ipynb @@ -1661,7 +1661,7 @@ "- **SAC** est **off-policy** : il rejoue des transitions passées depuis son replay buffer, plus rapide en échantillons mais plus coûteux en mémoire.\n", "- **A2C** est **on-policy** : il apprend sur les trajectoires fraîches, plus simple mais qui demande *plus de steps* pour la même maturation.\n", "\n", - "Les 6 minutes d'A2C contre les 2,4 minutes de SAC ne sont donc pas un hasard : c'est le coût structurel de l'on-policy. Gardez ce ratio en tête quand vous lirez les courbes ; il est plus informatif que le Sharpe absolu, qui dépend de la fenêtre 2022-2024.\n" + "Le **rapport d'environ 2×** entre les durées d'A2C et de SAC (voir les sorties d'entraînement ci-dessus) n'est donc pas un hasard : c'est le coût structurel de l'on-policy. Gardez ce ratio en tête quand vous lirez les courbes ; il est plus informatif que le Sharpe absolu, qui dépend de la fenêtre 2022-2024.\n" ] }, { @@ -1835,23 +1835,8 @@ "\n", "**Leçon immédiate** : ce run inverse les rôles attendus — c'est SAC dont l'évaluation s'érode (pic +0.816, évaluations suivantes nulles) tandis qu'A2C convertit un plateau stable (+0.942) en politique finale déployable. La distinction entre *stabilité* et *performance de pointe* reste le fil rouge de la synthèse — mais lequel des deux la joue dépend du run : voir la lecture finale.\n", "\n", - "> **Note (mandat #9377/#9434)** : les **durées d'entraînement wall-clock** (anciennement épinglées : 28/75/114 s, 97/214/298 s, 2.4 et 6.0 minutes) sont **machine-dépendantes** par construction (CPU du runner, charge, threading BLAS) et ont été **drainées** au profit de renvois vers les **sorties d'entraînement committées** (cellules ci-dessus), qui restent la source de vérité. Les **résultats algorithmiques** (val_sharpe, alpha, entropie — transcriptions des sorties) et le **rapport de durées** (A2C ≈ 2× SAC à budget de steps égal) sont conservés. La table de synthèse finale ci-dessous suit la même politique." - ] - }, - { - "cell_type": "markdown", - "id": "cell-9e29fee0", - "metadata": { - "papermill": { - "duration": 0.005003, - "end_time": "2026-09-19T04:05:44.339297", - "exception": false, - "start_time": "2026-09-19T04:05:44.334294", - "status": "completed" - }, - "tags": [] - }, - "source": [ + "> **Note (mandat #9377/#9434)** : les **durées d'entraînement wall-clock** (anciennement épinglées : 28/75/114 s, 97/214/298 s, 2.4 et 6.0 minutes) sont **machine-dépendantes** par construction (CPU du runner, charge, threading BLAS) et ont été **drainées** au profit de renvois vers les **sorties d'entraînement committées** (cellules ci-dessus), qui restent la source de vérité. Les **résultats algorithmiques** (val_sharpe, alpha, entropie — transcriptions des sorties) et le **rapport de durées** (A2C ≈ 2× SAC à budget de steps égal) sont conservés. La table de synthèse finale ci-dessous suit la même politique.\n", + "\n", "### Interpretation de l'entrainement\n", "\n", "SAC est off-policy : il reutilise les expériences passees via le replay buffer,\n", @@ -1860,7 +1845,9 @@ "\n", "La temperature alpha de SAC devrait converger vers une valeur stable si l'entropie\n", "de la politique est suffisante. L'entropie A2C peut diminuer plus rapidement\n", - "car il n'y a pas de regularisation explicite." + "car il n'y a pas de regularisation explicite.\n", + "\n", + "> **Note de redressement (campagne densité #17040).** La phrase ci-dessus sur l'alpha est une hypothèse générale que **la mesure de ce carnet contredit** : sur ce run, alpha **décroît** (0,887 → 0,783 → 0,691) au lieu de se stabiliser, comme le tableau de la présente cellule l'établit. Le texte est conservé verbatim ; la contradiction est signalée plutôt que silencieuse.\n" ] }, {