Filtrage appliqué au NASDAQ
Introduction
Les filtres linéaires jouent un rôle fondamental dans le traitement du signal. Avec un filtre linéaire, on peut extraire des informations significatives d'un signal numérique.
Dans cet exercice, nous allons montrer plusieurs exemples utilisant des données boursières (la bourse NASDAQ). Tout d'abord, nous appliquerons un filtre passe-haut à la série temporelle d'origine pour extraire les variations rapides. Par la suite, nous allons lisser un signal très bruyant avec un filtre passe-bas pour extraire ses variations lentes. Pour finir nous regarderons la méthode de la moyenne mobile pour voir les période de changement de variation.
Voici quelques liens qui pouront être utiles:
Importation
Pour avoir le template du TP faites Copier sur Drive depuis ce lien : Google Colab
Importation des librairies:
import numpy as np
import scipy as sp
import scipy.signal as sg
import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline
Importation du fichier CSV
Vous trouverez le fichier sur github, vous devez juste faire clique droit enregistrer sous une sur le fichier.
from google.colab import files
files.upload()
Parser les données de date
nasdaq_df = pd.read_csv('nasdaq.csv',index_col='Date',parse_dates=['Date'])
date = nasdaq_df.index
nasdaq = nasdaq_df['Close']
Exercice 1: Afficher les données du fichier
Le but est de voir si les données ce sont bien importées et de découvir le contenu du fichier.
A faire : afficher les données du csv
Résultat attendu :
Date | Open | High | Low | Close | Adj Close | Volume |
---|---|---|---|---|---|---|
1990-01-02 | 452.899994 | 459.299988 | 452.700012 | 459.299988 | 459.299988 | 110720000 |
1990-01-03 | 461.100006 | 461.600006 | 460.000000 | 460.899994 | 460.899994 | 152660000 |
1990-01-04 | 460.399994 | 460.799988 | 456.899994 | 459.399994 | 459.399994 | 147950000 |
1990-01-05 | 457.899994 | 459.399994 | 457.799988 | 458.200012 | 458.200012 | 137230000 |
1990-01-08 | 457.100006 | 458.700012 | 456.500000 | 458.700012 | 458.700012 | 115500000 |
Exercice 2: Afficher le graphique
Le but est d'avoir un premier aperçu de l'évolution de la valeur de cloture du NASDAQ.
A faire : afficher la courbe de la valeur de cloture
Résultat attendu :
Exercice 3: Filtre passe haut
Partie 1
Le but est d'appliquer un filtre passe-haut, en utilisant 1 cycle/an comme fréquence de coupure. Grâce à cela, nous pouvons éliminer les variations lentes du prix du graphique. Cela signifie que seules les variations de prix survenues plus rapidement qu'un cycle par an seront affichées. Nous pouvons identifier les périodes de moindre volatilité lorsque le prix filtré se rapproche de 0.
A faire : faire le filtre passe haut et afficher les courbes
Aide: Scipy function
Résultat attendu :
Partie 2
Nous pouvons aussi utiliser une fréquence de coupure plus élevée. Dans ce cas, les informations peuvent être utilisées pour du trading à haute fréquence ou des investissements à court terme.
A faire : faire le nouveau filtre passe haut et afficher les courbes
Aide: Scipy function
Résultat attendu :
Exercice 4: Filtre passe bas
Le but est d'essayer la stratégie inverse: au lieu d'isoler les variations à grande vitesse du prix actuel, nous pouvons utiliser un filtre passe-bas pour éliminer les changements à grande vitesse. Le résultat est une courbe lissée, dans laquelle nous pouvons facilement identifier la tendance des valeurs locales. Plus la fréquence de coupure est basse, plus la présence de variations de courte durée sera faible.
A faire : faire le filtre passe bas et afficher les courbes
Aide: Scipy function
Résultat attendu :
Exercice 5 : Moyenne mobile
Le but est d'utiliser la "moyenne mobile". Elle est l'un des indicateurs les plus courants des prix historiques. Il consiste à calculer la valeur moyenne d’un nombre limité d’échantillons de temps autour d’un point et à «déplacer» la fenêtre temporelle le long de l’ensemble des données. Les points de croisement entre des courbes de différentes tailles de fenêtre indiquent des changements de tendance. Cependant, il s'agit clairement d'un indicateur retardé qui fournit lui-même des informations tardives.
A faire : faire deux moyenne mobile avec un pas de 20 et 50 puis afficher les courbes
Aide: Pandas function
Résultat attendu :