Projet 02 🌟 : Analyse Financière avec Python

 Â· 8 min read
 Â· notafk
Last updated: janvier 23, 2025
Table of contents

📊 Analyse Financière : Python pour la finance ?

0. Introduction

Dans cet article, nous allons explorer comment analyser des données, qui peuvent représenter un marché financier ou d'autres types de données similaires. L'objectif principal est d'appliquer des techniques de data science pour visualiser et interpréter ces données à l'aide d'indicateurs statistiques, tels que la moyenne mobile et les bandes de Bollinger.

Ce projet a été conçu pour être modulable et extensible, permettant d'analyser différentes sources de données et de s'adapter à divers cas d'étude.

Pour les visualisations, nous utiliserons Plotly, une bibliothèque interactive adaptée à la création de graphiques dynamiques.

1. Les Prérequis : préparation de l'environnement

L'analyse de données sera réalisée en utilisant les bibliothèques suivantes :
- numpy : pour les calculs
- Plotly : pour tracer les graphiques interactifs

pip install numpy plotly

Pour suivre cet article, vous aurez besoin de l'environnement suivant :
- Python 3.11 ou une version plus récente.
- Visual Studio Code pour l'édition de code.
- Un environnement Windows 11.

Tu peux accéder aux tutoriels #01 et #02 sur la préparation de ton environnement Data Science en te rendant sur les articles ici et !

2. Le Calcul des indicateurs boursiers

Nous implémenterons deux indicateurs que sont:

La Moyenne mobile simple (MMS) : permet de lisser les variations
La MMS (Moyenne Mobile Simple) calcule la moyenne arithmétique des n dernières valeurs d'une série de données, où n est défini par ce que l'on appelle la période ou la fenêtre glissante.

Les Bandes de Bollinger : servent à évaluer la volatilité du marché
Les bandes de Bollinger indiquent l'ampleur de la dispersion des prix autour de la moyenne mobile. Les bandes supérieur et inférieur sont données par : MMS ± 2σ où σ est l'écart type.

3. Calcul de la moyenne mobile simple et des bandes de Bollinger avec le produit de convolution

🚀🌟 Retrouve ce code complet dans le notebook python ici : 👉 Notebook en data sciences

# Importation des bibliothèques nécessaires
# - numpy (np) : pour manipuler des données sous forme de matrices et effectuer des calculs mathématiques.
# - plotly.graph_objects (go) : pour créer des graphiques interactifs.
import numpy as np
import plotly.graph_objects as go

# Génération de données simulées
# On utilise une fonction aléatoire de numpy pour créer 50 valeurs réparties autour de 100 avec une dispersion (écart type) de 10.
np.random.seed(0)  # On fixe la "graine" pour que les résultats soient reproductibles (les mêmes valeurs chaque fois qu'on exécute le script).
data = np.random.normal(100, 10, 50)  # Génère 50 valeurs aléatoires.
print(data)  # Affiche les valeurs générées.
# [117.64052346 104.00157208 109.78737984 122.40893199 118.6755799
# ......
#   95.61925698  87.4720464  107.77490356  83.86102152  97.8725972 ]
print(data.shape)  # Affiche la taille des données (50 éléments).
# (50,) > Matrice 1D avec 50 élements

# Création d'un "noyau" pour le calcul de la moyenne
# Ce noyau est un tableau de 3 éléments où chaque valeur est égale à 1/3.
# Il servira à effectuer une moyenne en "lissant" les données sur des fenêtres de 3 valeurs.
kernel = np.ones(3) / 3
print(kernel)  # Affiche le noyau : [0.33333333 0.33333333 0.33333333]
# [0.33333333 0.33333333 0.33333333]

# Application d'un produit de convolution
# La convolution est utilisée ici pour lisser les données en calculant une moyenne mobile sur 3 valeurs successives.
produit_convolv = np.convolve(data, kernel, mode='valid')  # Calcule la moyenne mobile.
print(produit_convolv)  # Affiche les valeurs lissées.
# [110.47649179 112.06596131 116.95729724 110.43724436 106.13456176
# ......
#   96.95540231  93.03599049  96.50284076]

# Vérification du premier résultat de la convolution
# On calcule à la main la première valeur de la convolution pour comprendre comment ça fonctionne.
matrice_val_11 = (117.64052346 * 0.33333333) + (104.00157208 * 0.33333333) + (109.78737984 * 0.33333333)
print(matrice_val_11)  # Affiche la première valeur calculée manuellement (devrait être égale au premier élément de produit_convolv).
# 110.4764906885684

# Création d'une fonction pour calculer les bandes de Bollinger
# Les bandes de Bollinger sont des indicateurs financiers utilisés pour analyser la volatilité des données.
# Elles se composent de :
# - Une moyenne mobile simple (SMA : Simple Moving Average) pour lisser les données.
# - Une bande supérieure et une bande inférieure, calculées en ajoutant ou en soustrayant un multiple (k) de l'écart type à la moyenne mobile.
def calculer_bandes_bollinger_methode_convolution(valeurs, periode=20, k=2):
    """
    Fonction pour calculer les bandes de Bollinger.

    Paramètres :
    - valeurs : Données d'entrée (par exemple, des prix ou des mesures).
    - periode : Nombre de points considérés pour calculer la moyenne mobile (par défaut 20).
    - k : Facteur pour ajuster la largeur des bandes (par défaut 2).

    Retourne :
    - bande_superieure : Limite supérieure des bandes de Bollinger.
    - bande_inferieure : Limite inférieure des bandes de Bollinger.
    - moyenne_mobile : Moyenne mobile simple.
    """
    # Calcul de la moyenne mobile avec une convolution
    moyenne_mobile = np.convolve(valeurs, np.ones(periode) / periode, mode='valid')
    # Calcul de l'écart type (volatilité) pour la période spécifiée
    ecart_type = np.std(valeurs[:periode])
    # Calcul des bandes supérieure et inférieure
    bande_superieure = moyenne_mobile + k * ecart_type
    bande_inferieure = moyenne_mobile - k * ecart_type
    return bande_superieure, bande_inferieure, moyenne_mobile

# Calcul des bandes de Bollinger avec une période de 10 points
periode = 10  # Nombre de points pour la moyenne mobile.
bande_superieure, bande_inferieure, moyenne_mobile = calculer_bandes_bollinger_methode_convolution(data, periode)

# Définition des indices pour les graphiques
# Les indices commencent après le nombre de points utilisé pour la moyenne mobile (période - 1).
index = list(range(periode - 1, len(data)))

# Création d'un graphique pour visualiser les données et les bandes de Bollinger
fig = go.Figure([
    # Courbe principale (les données originales)
    go.Scatter(x=list(range(len(data))), y=data, mode='lines+markers', name='Données originales', line=dict(width=1), marker=dict(size=5)),
    # Moyenne mobile simple (SMA)
    go.Scatter(x=index, y=moyenne_mobile, mode='lines', name='MMS (moyenne mobile simple)', line=dict(color='orange', width=3)),
    # Bande supérieure des bandes de Bollinger
    go.Scatter(x=index, y=bande_superieure, mode='lines', name='Bande Bollinger Supérieure', line=dict(color='green', dash='dash')),
    # Bande inférieure des bandes de Bollinger
    go.Scatter(x=index, y=bande_inferieure, mode='lines', name='Bande Bollinger Inférieure', line=dict(color='red', dash='dash')),
    # Remplissage entre les bandes supérieure et inférieure
    go.Scatter(x=index, y=bande_superieure, fill=None, mode='lines', line=dict(width=0), showlegend=False),
    go.Scatter(x=index, y=bande_inferieure, fill='tonexty', mode='lines', line=dict(width=0), showlegend=False, fillcolor='rgba(255, 0, 0, 0.25)')
])

# Configuration du titre et des axes
fig.update_layout(
    title='<b>Moyenne mobile simple & Bandes de Bollinger</b>',
    xaxis_title='Indice des mesures',
    yaxis_title='Valeur des mesures',
    legend=dict(
        orientation="h",  # Légende horizontale
        y=-0.2,  # Position verticale
        x=0.5,  # Centré horizontalement
        xanchor="center",
        yanchor="top"
    )
)

# Affichage de la figure
fig.show()

Bandes de Bollinger, Python pour la Finance