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 BY | OVER |
|---|---|
| agrège par groupe | calcule par ligne |
| réduit la table | conserve la table |
| une ligne par groupe | enrichit chaque ligne d'informations contextuelles |
Le SQL analytique est souvent un SQL d'enrichissement ligne par ligne.
À toi de coder
Vérifie que tu as compris
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
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.
| Fonction | Rôle principal |
|---|---|
LAG/LEAD | lire une valeur décalée dans l'ordre |
AVG OVER | calculer une tendance locale |
SUM OVER | cumuler une quantité dans le temps |
CASE WHEN | transformer 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