Python quantitatif

Le trading quantitatif en Python désigne le processus d'utilisation du langage de programmation Python ainsi que des bibliothèques et outils associés pour analyser les données des marchés financiers, développer des stratégies et exécuter des transactions.

Python est devenu l'un des langages de programmation privilégiés pour le trading quantitatif en raison de sa simplicité, de sa facilité d'apprentissage, de son écosystème puissant et de ses riches bibliothèques financières.

Le trading quantitatif est largement utilisé dans le domaine financier. Il permet aux traders de développer et d'exécuter des stratégies de trading par des méthodes systématiques, améliorant l'efficacité du trading et le caractère scientifique de la prise de décision.

L'analyse quantitative utilise principalement des méthodes mathématiques et statistiques, combinées à la technologie informatique, pour effectuer une analyse quantitative des marchés financiers, afin de développer et d'exécuter des stratégies de trading.

Pour plus de contenu sur le trading quantitatif avec Python, vous pouvez consulter :Trading quantitatif avec Python。


Exemples d'applications

Ensuite, examinons un exemple d'application simple de trading quantitatif avec Python. Nous pouvons utiliser une stratégie de moyenne mobile avec les données de Yahoo Finance.

L'idée de base de cette stratégie est de générer des signaux d'achat et de vente en comparant les moyennes mobiles à court terme et à long terme.

Avant de poursuivre avec cet exemple simple, vous devez installer trois paquets :

pip install pandas yfinance matplotlib

Descriptions des paquets :

  • Pandas est une puissante bibliothèque open source de traitement et d'analyse de données, spécialement conçue pour l'analyse et la manipulation efficaces des données.
  • yfinance est une bibliothèque permettant de récupérer des données financières, prenant en charge la récupération d'actions, d'indices et d'autres données de marché financier depuis Yahoo Finance.
  • Matplotlib est une bibliothèque de traçage 2D utilisée pour créer des visualisations de données statiques, animées et interactives.

Obtenir des données historiques sur les actions

Utilisez yfinance pour obtenir des données historiques sur les actions. Voici un exemple simple :

Exemple

import yfinance as yf

# Récupérer les données boursières
symbol = "600519.SS"
start_date = "2022-01-01"
end_date = "2023-01-01"

data = yf.download(symbol, start=start_date, end=end_date)
print(data.head())

Le résultat de sortie est le suivant :

                  Open         High          Low        Close    Adj Close   Volume
Date                                                                               
2022-01-04  2055.00000  2068.949951  2014.000000  2051.229980  1973.508057  3384262
2022-01-05  2045.00000  2065.000000  2018.000000  2024.000000  1947.309937  2839551
2022-01-06  2022.01001  2036.000000  1938.510010  1982.219971  1907.112915  5179475
2022-01-07  1975.00000  1988.880005  1939.319946  1942.000000  1868.416870  2981669
2022-01-10  1928.01001  1977.000000  1917.550049  1966.000000  1891.507446  2962670

Analyse et visualisation simples de données

Utilisez pandas pour l'analyse de données et matplotlib pour la visualisation :

Exemple

import yfinance as yf
import pandas as pd
import matplotlib.pyplot as plt

# Récupérer les données boursières
symbol = "600519.SS"
start_date = "2022-01-01"
end_date = "2023-01-01"

data = yf.download(symbol, start=start_date, end=end_date)
# Analyse simple des données
print(data.describe())

# Tracer le graphique de tendance du cours de l'action
data['Close'].plot(figsize=(10, 6), label=symbole)
plt.title(f"Cours de l'action {symbol}")
plt.xlabel("Date")
plt.ylabel("Prix")
plt.legend()
plt.show()

Le graphique de tendance est affiché comme suit :

Backtesting d'une stratégie de croisement de moyennes mobiles

Le backtesting est le processus de simulation et d'évaluation d'une stratégie de trading sur des données de marché historiques.

Voici un exemple de code pour un backtest d'une stratégie de croisement de moyennes mobiles simples. La stratégie achète lorsque la moyenne mobile sur 50 jours croise au-dessus de la moyenne mobile sur 200 jours, et vend lorsqu'elle croise en dessous. Les performances de la stratégie affichent des métriques telles que le rendement total, le rendement annualisé et le drawdown maximal.

Exemple

import yfinance as yf
import pandas as pd
import matplotlib.pyplot as plt

# Récupérer les données boursières
symbol = "600519.SS"
start_date = "2021-01-01"
end_date = "2023-01-01"

data = yf.download(symbol, start=start_date, end=end_date)

# Calculer les moyennes mobiles
data['SMA_50'] = data['Close'].rolling(window=50).mean()
data['SMA_200'] = data['Close'].rolling(window=200).mean()

# Initialiser la colonne de signal de croisement
data['Signal'] = 0

# Calculer les signaux de croisement
data.loc[data['SMA_50'] > data['SMA_200'], 'Signal'] = 1
data.loc[data['SMA_50'] < data['SMA_200'], 'Signal'] = -1

# Calculer les rendements quotidiens
data['Daily_Return'] = data['Close'].pct_change()

# Calculer le taux de rendement à partir des signaux de stratégie (shift(1) est utilisé pour éviter le biais d'anticipation)
data['Strategy_Return'] = data['Signal'].shift(1) * data['Daily_Return']

# Calculer les rendements cumulés
data['Cumulative_Return'] = (1 + data['Strategy_Return']).cumprod()

# Afficher les performances de la stratégie
strategy_performance = {
    'Rendement total': data['Cumulative_Return'].iloc[-1] - 1,
    'Rendement annualisé': (data['Cumulative_Return'].iloc[-1] ** (252 / len(data))) - 1,
    'Drawdown maximal': (data['Cumulative_Return'] / data['Cumulative_Return'].cummax() - 1).min(),
}

print("Performances de la stratégie :")
for key, value in strategy_performance.items():
    print(f"{key}: {value:.4f}")

# Tracer la courbe de rendement cumulé
plt.figure(figsize=(10, 6))
plt.plot(data['Cumulative_Return'], label='Rendement cumulé de la stratégie', color='b')
plt.plot(data['Close'] / data['Close'].iloc[0], label='Rendement cumulé du titre', color='g')
plt.title("Rendement cumulé de la stratégie par rapport à l'action")
plt.xlabel("Date")
plt.ylabel("Rendement cumulé")
plt.legend()
plt.show()

Le graphique d'affichage est le suivant :

Veuillez noter qu'il s'agit simplement d'un exemple simple. Les applications réelles nécessitent des stratégies plus complexes et des considérations supplémentaires.

Autres extensions