Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -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",
Expand Down Expand Up @@ -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",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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",
Expand Down Expand Up @@ -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",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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"
]
},
{
Expand Down Expand Up @@ -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",
Expand All @@ -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"
]
},
{
Expand Down
Loading