Guide technique complet de la bibliothèque d'indicateurs Pandas TA

Introduction et installation

Pandas TA est une bibliothèque d'analyse technique dédiée aux séries temporelles financières, qui enrichit les DataFrame de Pandas avec plus de 130 indicateurs techniques et plus de 60 détections de motifs en chandelier. Elle s'intègre profondément à Pandas, offrant une courbe d'apprentissage minimale pour le calcul des indicateurs.

Installation

# Version stable (recommandée)
pip install pandas_ta

# Version communautaire avec indicateurs supplémentaires (accélération Numba optionnelle)
pip install pandas-ta-classic

Options d'accélération facultatives :

  • Intégration TA-Lib : après installation via pip install TA-Lib, 34 indicateurs clés comme EMA, SMA, RSI, MACD sont automatiquement accélérés en C.
  • Accélération Numba : l'installation de pandas-ta-classic[performance] offre des gains de performance de 6 à 230 fois.

Concepts fondamentaux : trois modes d'appel

Mode Syntaxe Scénario d'utilisation
Appel de fonction standard ta.sma(df["clôture"], période=20) Pour spécifier précisément les colonnes de données
Extension DataFrame df.ta.sma(période=20, ajouter=True) Le plus courant, identifie automatiquement les colonnes OHLCV
Traitement par stratégie df.ta.stratégie("momentum") Calcul par lot d'indicateurs, supporte le multiprocessing

Utilisation de base

Préparation des données et conventions de nommage

Pandas TA exige que les colonnes du DataFrame soient nommées en minuscules : ouverture, haut, bas, clôture, volume. Renommez-les si nécessaire :

import pandas as pd
import pandas_ta as ta

# Exemple avec yfinance (nommage conforme automatiquement)
df = pd.DataFrame()
df = df.ta.ticker("AAPL")  # Nécessite yfinance

# Renommage manuel pour des données non conformes
df.rename(columns={
    'Open': 'ouverture',
    'High': 'haut',
    'Low': 'bas',
    'Close': 'clôture',
    'Volume': 'volume'
}, inplace=True)

Deux méthodes d'appel principales

Méthode 1 : Extension DataFrame (recommandée)

# Calcul du SMA20, ajout direct au DataFrame
df.ta.sma(période=20, ajouter=True)
# La colonne résultante est nommée 'SMA_20'

# Calcul de plusieurs indicateurs simultanément
df.ta.sma(période=50, ajouter=True)
df.ta.rsi(période=14, ajouter=True)
df.ta.macd(rapide=12, lent=26, signal=9, ajouter=True)

Méthode 2 : Appel de fonction standard (nécessite la spécification explicite des colonnes)

# Approche correcte : passer une Series
df['RSI_14'] = ta.rsi(df['clôture'], période=14)

# MACD retourne un DataFrame multi-colonnes, nécessite concaténation
macd_df = ta.macd(df['clôture'], rapide=12, lent=26, signal=9)
df = pd.concat([df, macd_df], axis=1)

# Erreur courante : ne pas utiliser .ta sur une Series
# df['clôture'].ta.rsi()  # Cela génère une erreur !

Traitement des résultats

# 1. ajouter=True : ajout direct au DataFrame original
df.ta.sma(période=20, ajouter=True)  # Ajoute 'SMA_20'

# 2. ajouter=False (par défaut) : retourne les résultats sans modifier les données
valeur_sma = df.ta.sma(période=20)  # Retourne une Series ou un DataFrame

# 3. Utilisation d'une stratégie pour ajouter plusieurs indicateurs
df.ta.stratégie("CommonStrategy")  # Calcule SMA10/20/50/200 + SMA du volume

Gestion des valeurs NaN initiales

Les indicateurs nécessitent un certain historique (ex. : SMA20 requiert 20 barres), d'où des NaN en début de série :

# Calcul de l'indicateur
df.ta.sma(période=50, ajouter=True)

# Solution 1 : suppression des lignes avec NaN (recommandé pour le backtesting)
df_nettoyer = df.dropna()

# Solution 2 : ignorer les NaN
df_valide = df[df['SMA_50'].notna()]

# Solution 3 : remplissage avant (non recommandé, introduit un biais)
df.fillna(method='ffill', inplace=True)

Utilisation avancée : système de stratégies et génération de signaux

Calcul par lot avec des stratégies

Pour calculer un ensemble d'indicateurs, les stratégies offrent une solution élégante.

Stratégie simple (format liste) :

ma_stratégie = [
    {"type": "sma", "période": 20},
    {"type": "sma", "période": 50},
    {"type": "rsi", "période": 14},
    {"type": "bbands", "période": 20, "écart_type": 2.0},
    "macd"  # Paramètres par défaut
]
df.ta.stratégie(ma_stratégie)  # Tous les indicateurs sont ajoutés à df

Stratégie structurée (classe ta.Strategy) :

StratégieTendanceMomentum = ta.Strategy(
    nom="Combinaison tendance et momentum",
    description="EMA20/50, RSI14, MACD(12/26/9)",
    indicateurs=[
        {"type": "ema", "période": 20},
        {"type": "ema", "période": 50},
        {"type": "rsi", "période": 14},
        {"type": "macd", "rapide": 12, "lent": 26, "signal": 9}
    ]
)
df.ta.stratégie(StratégieTendanceMomentum)

Stratégies intégrées :

# Calcul de tous les indicateurs courants
df.ta.stratégie("CommonStrategy")

# Calcul de tous les indicateurs de momentum
df.ta.stratégie("momentum")

# Calcul de tous les indicateurs (avec prudence, très gourmand)
df.ta.stratégie("AllStrategy")

Génération de signaux de trading : tsignals

La fonction tsignals transforme une condition de tendance en signaux d'achat/vente, exploitables directement avec vectorbt pour le backtesting.

# Définition de la condition de tendance : clôture > SMA50
condition_tendance = df['clôture'] > df.ta.sma(période=50)

# Génération des signaux (asbool=True pour la compatibilité avec vectorbt)
signaux = ta.tsignals(condition_tendance, asbool=True, décalage_métier=1)
# Retourne un DataFrame avec : Tendances, Métiers, Entrées, Sorties

# Ajout direct au DataFrame
df.ta.tsignals(condition_tendance, asbool=True, ajouter=True, décalage_métier=1)

Paramètres clés :

  • asbool=True : retourne des booléens, utilisables directement dans vectorbt.Portfolio.from_signal().
  • décalage_métier=1 : pour le backtesting (évite les fonctions futures), utiliser 0 pour le trading réel.
  • réinitialisation_tendance=0 : seuil pour identifier la fin d'une tendance.

Classification des indicateurs (130+ indicateurs résumés)

Pandas TA classe les indicateurs en 9 catégories principales. Voici leur utilisation via df.ta. ou ta.nom_fonction().

Tendance (Trend)

Indicateur Fonction pandas_ta Description et cas d'usage
SMA sma(clôture, période=20) Moyenne mobile simple. Tendance à moyen/long terme, périodes 20/50/200 courantes.
EMA ema(clôture, période=20) Moyenne mobile exponentielle. Plus réactive aux prix récents, adaptée au suivi de tendance court/moyen terme.
MACD macd(clôture, rapide=12, lent=26, signal=9) Indicateur de momentum de tendance classique. Croisement haussier/baissier.
ADX adx(haut, bas, clôture, période=14) Indice de direction moyenne. ADX > 25 indique une tendance forte, < 20 un marché en range.
SuperTrend supertrend(haut, bas, clôture, période=7, multiplicateur=3) Ligne Super Trend. Achat si prix > SuperTrend, vente inverse, simple et intuitif.

Momentum

Indicateur Fonction pandas_ta Description et cas d'usage
RSI rsi(clôture, période=14) Indice de force relative. > 70 survendu risque de correction, < 30 suracheté opportunité de rebond.
Stochastique stoch(haut, bas, clôture, k=14, d=3) Indicateur stochastique. Croisement %K/%D, > 80 zone de surachat, adapté aux marchés en range.
CCI cci(haut, bas, clôture, période=20) Indice du canal de marchandises. > +100 suracheté, < -100 survendu.

Volatilité (Volatility)

Indicateur Fonction pandas_ta Description et cas d'usage
Bollinger Bands bbands(clôture, période=20, écart_type=2) Bandes de Bollinger. Les prix touchent les bandes supérieure/inférieure comme support/résistance.
ATR atr(haut, bas, clôture, période=14) Amplitude vraie moyenne. Mesure la volatilité du marché, utilisée pour définir des stop-loss.
Donchian Channel donchian(haut, bas, période=20) Canal de Donchian. Rupture de la bande supérieure pour acheter, inférieure pour vendre (cœur de la stratégie des tortues).

Volume

Indicateur Fonction pandas_ta Description et cas d'usage
OBV obv(clôture, volume) On-Balance Volume. Confirmation de tendance par le volume, divergence comme signal.
CMF cmf(haut, bas, clôture, volume, période=20) Flux monétaire de Chaikin. > 0 indique un afflux de capital, < 0 une sortie.
MFI mfi(haut, bas, clôture, volume, période=14) Indice de flux monétaire. Combine prix et volume, > 80 suracheté, < 20 survendu.

Autres catégories

Les catégories restantes incluent Superposition (Overlap) avec des indicateurs comme Ichimoku, Statistiques avec Z-Score ou Sharpe Ratio, et Formations de chandeliers avec 62 motifs intégrés.

# Détection d'un motif unique
doji = df.ta.cdl_doji()        # Doji
marteau = df.ta.cdl_hammer()   # Marteau

# Détection de motifs doubles
englobant = df.ta.cdl_engulfing()  # Englobant

# Fonction générale de détection
df.ta.cdl_pattern(nom="doji")  # Détection d'un motif spécifié

Exemple pratique complet

Voici une stratégie de suivi de tendance intégrant plusieurs indicateurs et signaux :

import pandas as pd
import pandas_ta as ta
import yfinance as yf

# 1. Obtention des données
df = yf.download("AAPL", start="2024-01-01", end="2024-12-31")
df.columns = df.columns.str.lower()  # Assurer les noms en minuscules

# 2. Calcul par lot avec une stratégie personnalisée
StratégieSuivi = ta.Strategy(
    nom="Système de suivi de tendance",
    description="Tendance EMA + volatilité Bollinger + momentum RSI + confirmation volume",
    indicateurs=[
        {"type": "ema", "période": 20},
        {"type": "ema", "période": 50},
        {"type": "bbands", "période": 20, "écart_type": 2.0},
        {"type": "rsi", "période": 14},
        {"type": "macd", "rapide": 12, "lent": 26, "signal": 9},
        {"type": "obv"},
        {"type": "atr", "période": 14}
    ]
)
df.ta.stratégie(StratégieSuivi)

# 3. Génération des signaux de trading
condition_tendance = (
    (df['EMA_20'] > df['EMA_50']) &
    (df['RSI_14'] > 50) &
    (df['clôture'] > df['BBM_20_2.0'])
)
df.ta.tsignals(condition_tendance, asbool=True, décalage_métier=1, ajouter=True)

# 4. Nettoyage des NaN et affichage des résultats
df_propre = df.dropna()
print(df_propre[['clôture', 'EMA_20', 'EMA_50', 'RSI_14', 
                 'MACD_12_26_9', 'TS_Entrées', 'TS_Sorties']].tail(10))

Optimisation des performances et intégration

Accélération des calculs

  • Installer TA-Lib : 34 indicateurs clés basculent automatiquement en C, augmentant la vitesse de plusieurs fois.
  • Installer Numba : pip install pandas-ta-classic[performance] pour une accélération de 6 à 230 fois.
  • Utiliser des stratégies au lieu d'appels individuels : df.ta.stratégie() intègre des mécanismes d'optimisation.

Intégration avec l'écosystème

Outil Usage Intégration
vectorbt Backtesting de portefeuilles tsignals(asbool=True) pour Portfolio.from_signal()
Backtrader Framework de backtesting complet Pandas TA pour le prétraitement, Backtrader pour l'exécution
mplfinance Visualisation financière Passer les résultats à make_addplot()

Conseils de choix

  • Besoin uniquement de calcul d'indicateurs → Pandas TA est le choix le plus léger.
  • Besoin d'un système de backtesting complet → Utiliser Pandas TA pour le prétraitement + Backtrader pour l'exécution.
  • Validation rapide d'idées → Pandas TA pour le calcul + simulation simple avec shift().

Dépannage courant

Q1 : Erreur 'Series' object has no attribute 'ta'

  • Cause : Utilisation de l'accesseur .ta sur une Series.
  • Solution : Utiliser ta.rsi(df['clôture']) ou df.ta.rsi().

Q2 : Noms de colonnes non conformes

  • Doivent être en minuscules : ouverture, haut, bas, clôture, volume.
  • Utiliser df.rename(columns={...}) pour convertir.

Q3 : Résultats d'indicateurs entièrement en NaN

  • Vérifier que la longueur des données satisfait la période minimale de calcul de l'indicateur.
  • Utiliser df.dropna() ou un découpage pour éliminer les valeurs vides initiales.

Étiquettes: pandas_ta Python technical-analysis financial-indicators trading-strategies

Publié le 23 juin à 00h21