Aller au contenu
Apprendre.
  • M1 · toutes les matières15 matières : Préparation de données, API & sécurité, CI/CD, Docker, Merise, Dataviz, KNIME, ML appliqué : projet LoL, SQL & UML, SQL avancé, Machine Learning, Git, IA frugale & responsable, Qualité des données, MathématiquesAnnée
  • M2 · toutes les matières4 matières : Deep Learning, AI Act, Comex & Fundraising, Gouvernance & DataMeshAnnée
  • Deep LearningM2 · 4 modules · Réseaux de neurones, CNN, texte, modèles génératifs.Matière
  • Préparation de donnéesM1 · 3 modules · Nettoyer, transformer et fusionner des données avec Python.Matière
  • API & sécuritéM1 · 2 modules · Consommer, concevoir et sécuriser des API.Matière
  • CI/CDM1 · 1 module · Intégration et livraison continues.Matière
  • DockerM1 · 3 modules · Conteneurs, images, volumes, réseaux, Compose.Matière
  • MeriseM1 · 2 modules · Modéliser une base : MCD, MLD, MPD.Matière
  • DatavizM1 · 2 modules · Visualiser pour comprendre et décider.Matière
  • KNIMEM1 · 1 module · Explorer et nettoyer des données en workflow.Matière
  • ML appliqué : projet LoLM1 · 2 modules · Du besoin métier au POC de vision par ordinateur.Matière
  • SQL & UMLM1 · 3 modules · Modèles UML et requêtes SQL.Matière
  • SQL avancéM1 · 3 modules · Jointures, fenêtres, CTE, optimisation.Matière
  • Machine LearningM1 · 3 modules · Régression, classification, segmentation, projet.Matière

↑↓ naviguer↵ ouvre le résultat en surbrillanceesc fermer

Partie 1 · Agréger

Des agrégats qui ne réduisent pas la table

En SQL classique, une agrégation avec GROUP BY réduit généralement le nombre de lignes : SELECT ticker, AVG(close) FROM prices GROUP BY ticker donne une ligne par actif. Une agrégation analytique, AVG(close) OVER (...), conserve toutes les lignes.

GROUP BYOVER
agrège par groupecalcule par ligne
réduit la tableconserve la table
une ligne par groupeenrichit chaque ligne d'informations contextuelles

Le SQL analytique est souvent un SQL d'enrichissement ligne par ligne.

À toi de coder

GROUP BY réduit, OVER conserve

Même moyenne, deux effets opposés. Avec GROUP BY on obtient une ligne par actif ; avec AVG(...) OVER (PARTITION BY ...) on garde toutes les lignes en ajoutant la moyenne de l'actif à chacune.

La table prices contient maintenant trois actifs A, B, C sur 6 jours. Complète sql_group (ticker, AVG(close), trié par ticker) et sql_over (ticker, date, close, moy, trié par ticker, date).

Ctrl/⌘+Entrée

Vérifie que tu as compris

Une table de 18 lignes (3 actifs). SELECT ticker, AVG(close) FROM prices GROUP BY ticker renvoie 3 lignes. Et SELECT ticker, AVG(close) OVER (PARTITION BY ticker) FROM prices ?

De la tendance locale à la décision

La moyenne glissante sur 5 jours donne un indicateur local de tendance :

AVG(close) OVER (PARTITION BY ticker ORDER BY date
                 ROWS BETWEEN 4 PRECEDING AND CURRENT ROW)

On peut la transformer en décision avec CASE :

CASE WHEN close > AVG(close) OVER (PARTITION BY ticker ORDER BY date
                                  ROWS BETWEEN 4 PRECEDING AND CURRENT ROW)
     THEN 1 ELSE 0 END

Formellement : signal_t = 1 si close_t > ma5(t), sinon 0. Si le prix courant est au-dessus de sa moyenne locale, on considère qu'il y a une tendance favorable ; sinon, on s'abstient. Cette règle est volontairement simple : l'objectif n'est pas d'optimiser une stratégie mais de comprendre comment SQL enchaîne des calculs analytiques.

À toi de coder

Un signal binaire avec CASE

On transforme une mesure en décision : signal = 1 si le prix est au-dessus de sa moyenne glissante sur 5 lignes, sinon 0. Renvoie ticker, date, signal trié par ticker, date, en calculant la moyenne directement dans le CASE.

Ctrl/⌘+Entrée

Performance cumulée

Une fois strategy_ret calculé, on accumule les gains et pertes :

SUM(strategy_ret) OVER (PARTITION BY ticker ORDER BY date
                        ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)

On construit ainsi une courbe de performance discrète.

FonctionRôle principal
LAG/LEADlire une valeur décalée dans l'ordre
AVG OVERcalculer une tendance locale
SUM OVERcumuler une quantité dans le temps
CASE WHENtransformer une mesure en décision

Un pipeline analytique SQL est souvent une composition : lecture du contexte → résumé local → décision → agrégation.

Vérifie que tu as compris

Dans l'enchaînement « lecture du contexte → résumé local → décision → agrégation », quel outil réalise la « décision » ?