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 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

Croisement de deux moyennes

Le cours compare une moyenne courte et une moyenne longue (5 et 20 jours). Nos séries ne durent que 6 jours : (exemple adapté) nous prenons 2 et 4 lignes. Signal : 1 si ma_short > ma_long, sinon -1. Renvoie date, signal pour l'actif A, trié par date.

Ctrl/⌘+Entrée

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

Normaliser dans la fenêtre et protéger la division

Comme le z-score du cours, on standardise le prix par rapport à son voisinage, mais avec une quantité disponible partout dans SQLite : la position dans l'amplitude de la fenêtre, (close - MIN) / NULLIF(MAX - MIN, 0). NULLIF(x, 0) renvoie NULL quand l'amplitude est nulle (fenêtre plate) au lieu de diviser par zéro. (Le cours utilise AVG et STDDEV ; SQLite n'a pas de STDDEV, d'où ce choix : exemple adapté.)

Pour l'actif C, fenêtre de 3 lignes (2 PRECEDING), renvoie date, pos trié par date.

Ctrl/⌘+Entrée

Vérifie que tu as compris

Pourquoi NULLIF(STDDEV(...), 0) au dénominateur du z-score ?

Intra-actif contre inter-actifs

Intra-actifInter-actifs
on étudie un actif dans le tempson compare plusieurs actifs à une date donnée
rendements, moyennes glissantes, cumulclassement, 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).