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
# 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 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 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