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
2 changes: 1 addition & 1 deletion MyIA.AI.Notebooks/QuantConnect/BOOK_MAPPING.md
Original file line number Diff line number Diff line change
Expand Up @@ -134,7 +134,7 @@ Les projets [RL-DQN-Trading](projects/RL-DQN-Trading/) et [Reinforcement-Learnin
| # | Exemple du livre | Projet(s) du dépôt | Statut | Statut QC | Remarque |
|---|------------------|--------------------|--------|-----------|----------|
| 01 | Conditional Portfolio Optimization Applied | [Portfolio-Optimization-ML](projects/Portfolio-Optimization-ML/), [QC-Py-21-Portfolio-Optimization-ML](Python/QC-Py-21-Portfolio-Optimization-ML.ipynb) | PARTIAL | Recherche-phase | optimisation de portefeuille sans le service PredictNow.ai du livre (API payante) |
| 02 | Application of Corrective Artificial Intelligence Applied | [Corrective-AI](projects/Corrective-AI/) | STUB | Stub | portage suivi par [#18901](https://github.com/jsboige/CoursIA/issues/18901) |
| 02 | Application of Corrective Artificial Intelligence Applied | [Corrective-AI](projects/Corrective-AI/) | COVERED | Backteste | portage [#18901](https://github.com/jsboige/CoursIA/issues/18901) : primaire Breedon-Ranaldo + méta-étiquetage sans predictnow.ai (payant) |

---

Expand Down
85 changes: 31 additions & 54 deletions MyIA.AI.Notebooks/QuantConnect/projects/Corrective-AI/README.en.md
Original file line number Diff line number Diff line change
@@ -1,69 +1,46 @@
# Corrective AI / Meta-Labeling (Ch08-02)
# Corrective AI — EUR/USD intraday seasonality + meta-labeling (Ch. 08-02)

**Type:** Stub (planned exercise, code files not yet created)
**Hands-On AI Trading**, chapter 08-02 — faithful port of the "Application of Corrective Artificial Intelligence Applied" episode. Tracked by [#18901](https://github.com/jsboige/CoursIA/issues/18901). French README is the primary documentation.

**Hands-On AI Trading**, Chapter 8-02 — Meta-Labeling with Corrective AI
## Mechanism (the book)

## Objective
1. **Primary strategy** — EUR/USD intraday seasonality of Breedon and Ranaldo (2012): **sell during European business hours** (03:00–09:00 ET), **buy during US business hours** (11:00–15:00 ET), flat otherwise. Out of sample (Oct. 2021 – Jan. 2023, 1-minute EBS bars) the book measures a **0.88 Sharpe** for the primary alone.
2. **Corrective AI** — the book corrects the primary trade by trade with a gradient boosting model of more than one hundred predictors through the **paid** predictnow.ai API: announced Sharpe 1.29 (+0.41) over the same period.

Implement a meta-labeling approach where a primary model generates trading signals and a secondary corrective model filters out false positives, improving precision while maintaining recall.
## This port

## Approach
The predictnow.ai API is paid and proprietary: this port implements the corrective **principle** without a paid dependency, via **meta-labeling** (López de Prado, *Advances in Financial Machine Learning*, 2018):

### Primary Model: SMA Crossover
- Fast SMA (20-day) vs Slow SMA (60-day)
- Signal: bullish when fast > slow * 1.02, bearish when fast < slow * 0.98
- Universe: SPY, TLT, GLD (multi-asset diversification)
- the trade unit is one window (European or American) of the primary;
- at each entry, a walk-forward-trained classifier (gradient boosted trees, `sklearn`) predicts the probability that the window will be a winner;
- the window is taken only above the threshold (`sizing: filter`) — or sized by probability (`sizing: scale`);
- declared gap vs the book: **~16 ex-ante predictors** (minute returns/volatilities, window side, weekday, rolling primary win-rates, streak) against **>100** at predictnow.ai.

### Corrective Filter
The secondary model evaluates whether to trust the primary signal based on:
- **Trend strength**: Gap between fast and slow SMA (normalized)
- **Volatility regime**: Price relative to EMA (50-day volatility proxy)
- **Rules**:
- Strong trend (>3% gap) -> trust signal
- Moderate trend + low volatility -> trust signal
- Weak trend + high volatility -> reject signal (stay flat)
## Parameters (backtests without recompilation)

### Meta-Labeling Concept
- Primary model labels: +1 (long), -1 (short), 0 (flat)
- Secondary model labels: 1 (trust primary), 0 (reject primary)
- Net position = primary_direction * corrective_approval
- Expected: higher precision (fewer false signals), similar or lower recall
| Parameter | Default | Role |
|---|---|---|
| `start` / `end` | 2021-10-01 / 2023-01-31 | window (`YYYY-MM-DD`) |
| `use_meta` | `true` | `false` = primary-only leg |
| `threshold` | `0.5` | probability threshold (`filter`) |
| `seed` | `0` | classifier seed (multi-seed, rule §C) |
| `retrain_days` | `21` | walk-forward retraining cadence |
| `min_train` | `120` | minimum past windows before the first meta trade |
| `sizing` | `filter` | `filter` or `scale` |
| `swap_sides` | `false` | `true` = Breedon-Ranaldo paper convention (buy EU / sell US), the inverse convention tested empirically |

## QC Project
Declared choices: labels on gross entry→exit returns (minute mids; engine fees on actual fills only); no entry during the walk-forward warm-up (`min_train`) nor during the 5-day data warm-up; windows with no usable minute history (e.g. January 1st, market closed) are skipped.

| Field | Value |
|-------|-------|
| Project ID | 30800636 |
| Organization | Trading Firm QC-Course |
| Period | 2018-01-01 to 2024-12-31 |
| Starting Capital | $1,000,000 |
## Results

## Backtest Results (v1)
See `research.ipynb` (book window: primary vs meta, multi-seed ≥ 4, Diebold-Mariano test, reported bias — `BEATS` / `NO BEATS` / `INCONCLUSIVE` verdict per rule §C) and the 2018-2026 long-window robustness table. Metrics come from the QC backtests cited in the delivery PR body.

| Metric | Value |
|--------|-------|
| Sharpe Ratio | -0.151 |
| CAGR | 2.22% |
| Max Drawdown | 11.3% |
| Net Profit | +16.64% |
| Win Rate | 70% |
| Total Orders | 1242 |
| Total Fees | $2,673.78 |
## History

### Analysis
- 70% win rate confirms the corrective filter improves signal quality
- Negative Sharpe indicates risk-adjusted returns are suboptimal
- Average loss (-0.18%) exceeds average win (0.12%) — position sizing and exit timing need improvement
- The multi-asset approach (SPY/TLT/GLD) provides diversification but the SMA crossover lag hurts in sideways markets
The exploratory v1 of this folder (SMA crossover on SPY/TLT/GLD + rule-based corrective filter, backtest Sharpe −0.151 on the same QC project 30800636, April 2026) was a planned-exercise stub that did **not** match the actual chapter content; it is superseded by this port. QC Cloud project `30800636` (Corrective-AI-Ch08) is reused.

## Files
## References

- `main.py` — QC algorithm with primary signal + corrective filter
- `research.ipynb` — SMA crossover computation, corrective filter design, signal reduction analysis

## Reference

- Hands-On AI Trading, Chapter 8-02
- De Prado, M. (2018), "Advances in Financial Machine Learning" — Meta-labeling concept
- Corrective AI: secondary model trained on primary model's prediction errors
- Breedon, T. & Ranaldo, A. (2012), "Intraday Patterns in FX Returns and Order Flow" — EUR/USD intraday seasonality.
- López de Prado, M. (2018), *Advances in Financial Machine Learning* — meta-labeling, ch. 3.
- *Hands-On AI Trading* (Jared Broad), ch. 08-02.
90 changes: 31 additions & 59 deletions MyIA.AI.Notebooks/QuantConnect/projects/Corrective-AI/README.md
Original file line number Diff line number Diff line change
@@ -1,74 +1,46 @@
# Corrective AI / Meta-Labeling (Ch08-02)
# Corrective AI — saisonnalité intrajournalière EUR/USD + méta-étiquetage (Ch. 08-02)

**Type :** Stub (exercice planifié, fichiers de code non encore créés)
**Hands-On AI Trading**, chapitre 08-02 — port fidèle de l'épisode « Application of Corrective Artificial Intelligence Applied ». Suivi par [#18901](https://github.com/jsboige/CoursIA/issues/18901).

**Hands-On AI Trading**, Chapitre 8-02 — Meta-Labeling avec Corrective AI
## Mécanisme (le livre)

## Objectif
1. **Stratégie primaire** — saisonnalité intrajournalière EUR/USD de Breedon et Ranaldo (2012) : **vente pendant les heures ouvrées européennes** (03:00–09:00 ET), **achat pendant les heures ouvrées américaines** (11:00–15:00 ET), plat sinon. Le livre mesure, hors échantillon (oct. 2021 – janv. 2023, barres 1 minute EBS), un **Sharpe 0,88** pour la primaire seule.
2. **Corrective AI** — le livre corrige la primaire trade par trade avec un gradient boosting de plus de cent prédicteurs via l'API **payante** predictnow.ai : Sharpe annoncé 1,29 (+0,41) sur la même période.

Implémenter une approche de meta-labeling où un modèle primaire génère des signaux de trading et un modèle correctif secondaire filtre les faux positifs, améliorant la précision tout en préservant le rappel.
## Ce port

## Approche
L'API predictnow.ai est payante et propriétaire : ce port implémente le **principe** correctif sans dépendance payante, par **méta-étiquetage** (López de Prado, *Advances in Financial Machine Learning*, 2018) :

### Modèle primaire : croisement de SMA
- l'unité de trade = une fenêtre (européenne ou américaine) de la primaire ;
- à chaque entrée, un classifieur (gradient boosting d'arbres, `sklearn`) entraîné **walk-forward** sur les fenêtres passées prédit la probabilité que la fenêtre soit gagnante ;
- la fenêtre n'est prise qu'au-delà du seuil (`sizing: filter`) — ou dimensionnée par la probabilité (`sizing: scale`) ;
- écart déclaré au livre : **~16 prédicteurs ex-ante** (rendements/volatilités minute, côté de la fenêtre, jour de semaine, win-rates glissants de la primaire, série) contre **>100** chez predictnow.ai.

- SMA rapide (20 jours) vs SMA lente (60 jours)
- Signal : haussier quand rapide > lente * 1.02, baissier quand rapide < lente * 0.98
- Univers : SPY, TLT, GLD (diversification multi-actifs)
## Paramètres (backtests sans recompilation)

### Filtre correctif
| Paramètre | Défaut | Rôle |
|---|---|---|
| `start` / `end` | 2021-10-01 / 2023-01-31 | fenêtre (format `YYYY-MM-DD`) |
| `use_meta` | `true` | `false` = jambe primaire seule |
| `threshold` | `0.5` | seuil de probabilité (`filter`) |
| `seed` | `0` | graine du classifieur (multi-seed règle §C) |
| `retrain_days` | `21` | cadence de ré-entraînement walk-forward |
| `min_train` | `120` | fenêtres passées minimales avant le premier trade méta |
| `sizing` | `filter` | `filter` ou `scale` |
| `swap_sides` | `false` | `true` = convention du papier Breedon-Ranaldo (achat UE / vente US), convention inverse testée empiriquement |

Le modèle secondaire évalue s'il faut faire confiance au signal primaire sur la base de :
Choix déclarés : labels sur rendements bruts entrée→sortie (mid-minute, frais moteur à l'exécution réelle uniquement) ; pas d'entrée pendant le warm-up walk-forward (`min_train`) ni pendant les 5 jours de warm-up de données ; fenêtre sans historique minute exploitable (ex. 1er janvier, marché fermé) sautée.

- **Force de la tendance** : écart entre SMA rapide et lente (normalisé)
- **Régime de volatilité** : prix relatif à l'EMA (proxy de volatilité 50 jours)
- **Règles** :
- Tendance forte (écart >3 %) -> confiance dans le signal
- Tendance modérée + faible volatilité -> confiance dans le signal
- Tendance faible + forte volatilité -> rejet du signal (rester à plat)
## Résultats

### Concept de meta-labeling
Voir `research.ipynb` (fenêtre du livre : primaire vs méta, multi-seed ≥ 4, test de Diebold-Mariano, biais rapporté — verdict `BEATS` / `NO BEATS` / `INCONCLUSIVE` selon la règle §C) et le tableau de robustesse fenêtre longue 2018-2026. Les métriques sont celles des backtests QC cités dans le corps de la PR de livraison.

- Étiquettes du modèle primaire : +1 (long), -1 (short), 0 (plat)
- Étiquettes du modèle secondaire : 1 (faire confiance au primaire), 0 (rejeter le primaire)
- Position nette = direction_primaire * approbation_corrective
- Attendu : précision plus élevée (moins de faux signaux), rappel similaire ou inférieur
## Historique

## Projet QC
La v1 exploratoire de ce dossier (croisement SMA sur SPY/TLT/GLD + filtre correctif à règles, backtest Sharpe −0,151 sur le même projet QC 30800636, avril 2026) était un stub d'exercice planifié qui ne correspondait **pas** au contenu réel du chapitre ; elle est remplacée par ce port. Le projet QC Cloud `30800636` (Corrective-AI-Ch08) est réutilisé.

| Champ | Valeur |
|-------|--------|
| Project ID | 30800636 |
| Organisation | Trading Firm QC-Course |
| Période | 2018-01-01 à 2024-12-31 |
| Capital de départ | $1 000 000 |
## Références

## Résultats du backtest (v1)

| Métrique | Valeur |
|----------|--------|
| Sharpe Ratio | -0.151 |
| CAGR | 2.22 % |
| Max Drawdown | 11.3 % |
| Net Profit | +16.64 % |
| Win Rate | 70 % |
| Total Orders | 1242 |
| Total Fees | $2 673.78 |

### Analyse

- Un win rate de 70 % confirme que le filtre correctif améliore la qualité des signaux
- Un Sharpe négatif indique des rendements ajustés au risque sous-optimaux
- La perte moyenne (-0.18 %) dépasse le gain moyen (0.12 %) — le sizing de position et le timing de sortie doivent être améliorés
- L'approche multi-actifs (SPY/TLT/GLD) apporte de la diversification mais le retard du croisement SMA pénalise en marché latéral

## Fichiers

- `main.py` — algorithme QC avec signal primaire + filtre correctif
- `research.ipynb` — calcul du croisement SMA, conception du filtre correctif, analyse de la réduction des signaux

## Référence

- Hands-On AI Trading, Chapitre 8-02
- De Prado, M. (2018), « Advances in Financial Machine Learning » — concept de meta-labeling
- Corrective AI : modèle secondaire entraîné sur les erreurs de prédiction du modèle primaire
- Breedon, T. & Ranaldo, A. (2012), « Intraday Patterns in FX Returns and Order Flow » — saisonnalité intrajournalière EUR/USD.
- López de Prado, M. (2018), *Advances in Financial Machine Learning* — méta-étiquetage, ch. 3.
- *Hands-On AI Trading* (Jared Broad), ch. 08-02.
Loading
Loading