Partie 4 · Variantes
Deux moyennes, standardisation, comparaison
Croisement de deux moyennes
Une stratégie plus réaliste utilise deux échelles de temps : une moyenne courte et une moyenne longue. Signal : 1 si ma_courte(t) > ma_longue(t), −1 sinon. Dans le pipeline du cours, la moyenne courte utilise ROWS BETWEEN 4 PRECEDING AND CURRENT ROW (5 lignes) et la longue ROWS BETWEEN 19 PRECEDING AND CURRENT ROW (20 lignes), puis CASE WHEN ma_short > ma_long THEN 1 ELSE -1 END.
Cette variante compare une dynamique locale rapide à une dynamique plus lente et plus stable : deux opérateurs de lissage sur des fenêtres différentes. SQL permet de lire le passé et aussi de comparer plusieurs niveaux de mémoire.
À toi de coder
Standardisation locale : le z-score
On peut standardiser la valeur courante par rapport à son historique local :
(close - AVG(close) OVER (PARTITION BY ticker ORDER BY date ROWS BETWEEN 19 PRECEDING AND CURRENT ROW)) / NULLIF(STDDEV(close) OVER (PARTITION BY ticker ORDER BY date ROWS BETWEEN 19 PRECEDING AND CURRENT ROW), 0)
On mesure non plus le niveau du prix, mais son écart relatif normalisé. NULLIF(..., 0) évite la division par zéro quand la variance locale est nulle (le résultat est alors NULL). Deux actifs peuvent avoir des niveaux de prix, des volatilités et des amplitudes très différents : la standardisation rend les signaux comparables, permet de faire du classement plus pertinent, et évite d'interpréter naïvement le niveau absolu des prix.
(Hors cours : STDDEV n'existe pas dans SQLite, d'où l'exercice ci-dessous qui normalise par l'amplitude de la fenêtre.)
À toi de coder
Vérifie que tu as compris
NULLIF(STDDEV(...), 0) au dénominateur du z-score ?Intra-actif contre inter-actifs
| Intra-actif | Inter-actifs |
|---|---|
| on étudie un actif dans le temps | on compare plusieurs actifs à une date donnée |
| rendements, moyennes glissantes, cumul | classement, top-k, sélection relative |
Un cours avancé de SQL analytique doit couvrir ces deux directions. Elles se combinent : on peut standardiser un signal dans le temps (intra), puis classer les actifs selon ce signal à chaque date (inter).