Filtre Strong Growth : comment détecter une hausse soutenue par les volumes avec Python ?

Comment détecter des actions à trader ? C'est une tâche essentielle du trader. Parmi les milliers d'actions cotées sur les marchés comment déterminer celles qui méritent réellement notre attention.

Certains traders parcourent les articles et les publications financières pour étudier les données fondamentales des entreprises : résultats, croissance du CA, valorisation pour la méthode du PER par exemple, perspectives du secteur, etc.

Dans tous les cas le problème est le même : comment réduire l'univers des actions possibles à une première sélection d'opportunités potentielles ?

Grâce à l'algorithme présenté dans cet article, vous allez pouvoir parcourir des listes d'actions et laisser Python effectuer une sélection selon des critères que vous aurez définis.

L'idée du Filtre Strong Growth

Ici, pour le Filtre Strong Growth l'idée est la suivante : rechercher les actions dont la progression récente, hausse du cours s'accompagne d'une activité volumique supérieure à son niveau habituel.

Une progression du cours accompagnée par une activité volumique plus importante que d'habitude raconte une histoire différente qu'une hausse réalisée dans des volumes ordinaires.

Pourquoi le volume est-il intéressant pour analyser une hausse ?

Lorsque le cours d'une action franchit une résistance, ce mouvement est qualifié de breakout, l'évolution du volume apporte alors une information supplémentaires. 

Une augmentation significative des volumes traduit une activité plus importante autour de l'action au moment du franchissement et peut valider le breaktout.

Sans volume, cela deviendra peut-être un faux kreakout (une fausse cassure).

Le Filtre Strong Growth recherche une progression récente du cours accompagnées d'une activité volumique supérieure à son niveau habituel.

Pourquoi le volume est-il intéressant pour confirmer le breakout de la résistance :

Filtre Strong Growth
Filtre Strong Growth

Comment le Filtre Strong Growth mesure-t-il la progression du cours ?

Exemple de calcul de la progression du cours : Si une action valait 100 € il y a 10 séances et vaut aujourd'hui 108 €, sa progression sur la période est de 8 %.

Hausse du prix sur les 10 jours supérieure à un seuil

D'où les deux premiers paramètres :

NB_DAYS = 10

PRICE_THRESHOLD = 0.05 # +5%

Comment mesurer une activité volumique inhabituelle ?

Le Filtre calcul le volume moyen sur une période récente et le volume moyen sur une période beaucoup plus longue (volume habituel) et on recherche :

Volume moyen récent > 1,2 × Volume moyen de référence

D'où un troisième paramètre :

VOLUME_MULTIPLIER = 1,2

Par exemple : si le volume moyen de référence est de 1 million de titres et que le volume moyen des 10 dernières séances atteint 1,5 million, le ratio de volume est de 1,5. 

L'action présente alors une activité volumique 50 % supérieure à sa moyenne de référence.

Le résultat du Filtre Strong Growth est la liste des actions qui répondent aux deux critères.

De l'idée à l'algorithme en Python

Pour écrire l'algorithme on décompose la réalisation du filtre en étapes :

1. récupération de la listes des actions à filtrer :

récupérer les tickers depuis l'api :

tickers = api.tickers

2. définir les dates sur lesquelles on va calculer les critères :

end_date   = datetime.today()
start_date = end_date - timedelta(days=nb_days)
# Historique long terme pour calculer le volume de référence (1 an)
lt_start   = end_date - timedelta(days=365)

3. parcourir la liste des actions, récupérer les données :

    for ticker in tickers:
        try:
            _ticker = yfinance.Ticker( ticker )
            _stock_info = _ticker.get_info()
            _short_name = _stock_info.get( 'shortName' ) or ticker

            # Données long terme (volume de référence)
            df_lt = _ticker.history( start=lt_start, end=end_date )

4. calculer la fenêtre récente en utilisant Pandas :

            # Fenêtre récente
            df_recent = df_lt.iloc[ -nb_days: ]  # dernières n sessions ouvrées

5. calculer les critère sur chaque action :

            # --- Critère 1 : performance prix --- #
            price_start = df_recent["Close"].iloc[0]
            price_end   = df_recent["Close"].iloc[-1]
            perf        = (price_end - price_start) / price_start

            # --- Critère 2 : volume anormal --- #
            avg_vol_recent = df_recent["Volume"].mean()
            avg_vol_lt     = df_lt["Volume"].mean()  # référence long terme
            vol_ratio      = avg_vol_recent / avg_vol_lt if avg_vol_lt > 0 else 0

6. marquer les actions qui vérifient les critères :

            # --- Filtre combiné --- #
            qualifie = perf >= price_threshold and vol_ratio >= volume_multiplier

7. mettre les données sous forme de tableau :

            rows.append({
                "Ticker":        ticker,
                "Nom":           _short_name,
                "Prix départ":   round(price_start, 2),
                "Prix actuel":   round(price_end, 2),
                "Performance":   f"{perf:+.2%}",
                "Perf (float)":  perf,
                "Vol ratio":     round(vol_ratio, 2),
                "Vol moyen (n)": int(avg_vol_recent),
                "Vol moyen LT":  int(avg_vol_lt),
                "Statut":        "OK" if qualifie else "-",
            })

8. mettre en forme les résultats pour l'affichage grâce à MatplotLib :

on écrira un fonction show_scan_report:

def show_scan_report(
        df_all: pd.DataFrame,
        tickers: list[str],
        nb_days: int,
        price_threshold: float,
        volume_multiplier: float
    ) -> None:

L'algorithme affiche une liste des actions à analyser :

Filtre Strong Growth - Résultats des actions à analyser
Filtre Strong Growth - Résultats des actions à analyser

Ici malheureusement aucune action en passe les critères du Filtre Strong Growth. Mais vous pouvez modifier les paramètres du filtre.

Comment utiliser les résultats

Si une action passe les critère, vous avez un "OK" dans la colonne statut vous pouvez alors effectuer une analyse technique pour essayer de vous faire un sentiment à propos de cette opportunité de trading.

Le rôle du Filtre Strong Growth est de réduire le nombre d'actions à examiner et attirer l'attention du trader sur celles qui présentent des caractéristiques particulières.

Cette sélection peut être confrontée à d'autres éléments de l'analyse technique : tendance générale du marché, niveaux de support et de résistance, moyennes mobiles, volatilité, structure des prix ou encore configuration graphique.

Les critères du Filtre Strong Growth peuvent être modifiés directement dans le script Python. Ce filtre devient alors non pas une réponse définitive à la question "quelle action faut-il trader ?", mais un outil permettant de construire sa propre sélection d'actions à analyser.

C'est bien plus puissant qu'un screener classique.

Modifier les paramètres du Filtre

L'avantage avec le script en Python, c'est que les paramètres sont directement accessibles à l'utilisateur.

Le Filtre Strong Growth n'est pas une boîte noire. Les paramètres sont directement accessibles dans le script Python. Le trader peut donc adapter l'algorithme à sa propre méthode d'analyse.

C'est très différent d'un screener classique qui ne vous donnera accès qu'à certains paramètres à l'aide d'une interface graphique, avec TradingInPython vous pouvez adapter le script à vos besoins et à vos idées de trading.

Une fois la plateforme installée le script vous est livré dans le répertoire user_script ce fichier est également récupérable depuis le Gtihub :

Les paramètres :

NB_DAYS = 10
PRICE_THRESHOLD = 0.05 # +5%
VOLUME_MULTIPLIER = 1.2

Vous pouvez modifier la liste des actions à analyser :

Exécuter le script depuis la plateforme

C'est l'objet du Script Runner de TradingInPython :

Plateforme de Trading Technique

Vous avez découvert comment passer d'un idée de trading à la réalisation du Script en Python et à son exécution dans TradingInPython.

Vous avez tous un tas de scripts python que vous pouvez utiliser, copier, modifier pour vos besoin de trading :

Si vous ne l'avez pas déjà fait, installez TradingInPython.

N'hésitez pas à partager cet article, abonnez-vous.





Commentaires

Posts les plus consultés de ce blog

SOITEC - Analyse de la Smart Money

Guide des Indicateurs Techniques de Trading en Python

Ordres de bourse

Termes boursiers : Glossaire complet du trading et de la Bourse (de A à Z)

DASSAULT AVIATION

TOC