Projet 4: Arbritrage Statistique
![](https://antonio2505.github.io/antoine_kassi/images/pairs_trading/pair_trade.png)
PAIRS TRADING STRATEGY
PAIRS TRADING est une stratégie de market-neutral trading permettant aux traders de profiter pratiquement de toutes les conditions du marché : tendance haussière, tendance baissière ou mouvement latéral. Cette stratégie est classée comme une stratégie d’arbitrage statistique et de négociation de convergence(Hedging) wikipedia
- Qu’est ce que market-neutral trading strategy ?
market-neutral trading strategy est un type de stratégie d’investissement par un investisseur ou un gestionnaire d’investissement qui cherche à profiter à la fois de la hausse et de la baisse des prix sur un ou plusieurs marchés tout en essayant d'éviter complètement la prise de risque de marché.
Le Trading de Paires est classée comme une stratégie d’arbitrage statistique.
- Qu’est ce que la stratégie d’arbitrage statistique ?
L’arbitrage est une stratégie d’investissement dans laquelle un investisseur achète et vend simultanément un actif sur différents marchés pour profiter d’une différence de prix et générer un profit.
1- PARTIE I: IMPLEMENTATION DE LA STRATEGY
Installation des libraries
![](https://antonio2505.github.io/antoine_kassi/images/pairs_trading/library.png)
- Selection des Stocks et Identification de Pairs de stocks cointegré.
- Effectuer le test de stationariter pour la selection des pairs.
- Generer le Signal de Trading avec Z-Score test.
- Calcule de Gain et perte de notre portefeuil
1. Selection des Stocks et Identification de Pairs de stocks cointegrer.
Person Correlation
![](https://antonio2505.github.io/antoine_kassi/images/pairs_trading/corr.png)
Person Correlation
Le coefficient de corrélation de Pearson varie entre +1 et -1 et est une mesure de la relation entre deux variables. La valeur +1 indique une forte corrélation positive, zéro indique l’absence de relation et -1 indique une forte relation négative. Nous pouvons voir dans la carte thermique ci-dessous qu’il existe plusieurs paires avec une forte corrélation positive.
Cointegration des paires
Qu’est ce que la cointegration ?
La Cointegration est une methode statistique utilisee pour tester la Correlation entre deux ou plusieurs series temporaires dans une longue durée ou pour un temps specifique. deux series peuvent d’etre correlées mais pas cointegrées, vise versa. Pour approuver la cointegration nous allons determiner la p-value de chaque paire et ensuite effectuer un test stationnaire.
Recherche des paires cointegrees
![](https://antonio2505.github.io/antoine_kassi/images/pairs_trading/4.png)
Calcule de la P-value des Paires
![](https://antonio2505.github.io/antoine_kassi/images/pairs_trading/5.png)
resultat:
Analysons également le résultat du test de cointégration. Nous pouvons voir ci-dessus qu’il existe de nombreuses paires avec une pvalue inférieure à 0,05. Cela signifie que pour ces paires, nous pouvons rejeter l’hypothèse nulle et qu’elles peuvent être cointégrées
Effectuer un test stationnaire pour la paire sélectionnée
Maintenant, nous avons de nombreuses paires pour la stratégie où la pvalue est inférieure à 0,05. La sélection de la bonne paire est de la plus haute importance car la stratégie ne fonctionnera pas bien si les prix évoluent exactement ensemble. Ils doivent être divergents et mean-reverting pour que notre stratégie soit rentable.
Allons-y avec la paire (‘CTXS’, ‘HPQ’), CTXS: Citrix Systems, Inc et HPQ: HP Inc,et testons davantage la stationnarité de la propagation à l’aide du test Augmented Dickey-Fuller. Il est important que la propagation soit stationnaire. Une série chronologique est considérée comme stationnaire si des paramètres tels que la moyenne et la variance ne changent pas dans le temps. Nous allons d’abord calculer le ratio de couverture(hedge ratio) entre ces deux stockers en utilisant la régression OLS(ordinary least square). Ensuite, en utilisant le ratio de couverture(hedge ratio), nous calculerons le spread(la difference de price entre 2 stock) et exécuterons le test Augmented Dickey-Fuller.
![](https://antonio2505.github.io/antoine_kassi/images/pairs_trading/6.png)
![](https://antonio2505.github.io/antoine_kassi/images/pairs_trading/7.png)
effections notre OLS regression
model=sm.OLS(train.asset1, train.asset2).fit()
resultat
print(‘Hedge Ratio = ‘, model.params[0]) Hedge Ratio = 4.497688958649726
calculate la dispersion
spread = train.asset1 - model.params[0] * train.asset2
![](https://antonio2505.github.io/antoine_kassi/images/pairs_trading/spread.png)
Augmented Dickey-Fuller test
adf = adfuller(spread, maxlag = 1) print(‘Critical Value = ‘, adf[0]) Critical Value = -2.3204852154340516
Valeurs Critiques
print(adf[4]) {‘1%': -3.434617276362776, ‘5%': -2.863424739608777, ‘10%': -2.5677734071449034}
Interpretation de la propagation(spread)
Une valeur R-square et une pvalue proche de zéro de la régression OLS suggèrent une très forte corrélation entre ces deux actions. La propagation(spread) semble stationnaire et la valeur Dickey-Fuller est de 0.005, ce qui est inférieur à la valeur au niveau de signification de 5 %. Par conséquent, nous sommes en mesure de rejeter l’hypothèse nulle selon laquelle la propagation a une racine unitaire et pouvons conclure qu’il s’agit de stationnarité.
Générer des signaux de trading à l’aide du z-score
Nous avons utilisé l’ensemble de données d’entraînement(train set) jusqu'à présent pour finaliser la paire d’actions pour notre stratégie. À partir de maintenant, nous utiliserons l’ensemble de données de test pour nous assurer que la génération de signaux de trading et le backtesting utilisent un ensemble de données d'échantillon. Nous utiliserons le score z du rapport entre les deux cours boursiers pour générer des signaux de trading et définir les seuils supérieur et inférieur. Cela nous indiquera à quel point un prix est éloigné de la valeur moyenne de la population. S’il est positif et que la valeur est supérieure aux seuils supérieurs, le cours de l’action est supérieur à la valeur moyenne du cours. Par conséquent, son prix devrait baisser, nous voulons donc vendre cette action et acheter l’autre.
[voir code](code link:)
1. Definir la fonction zscore
def zscore(series): return (series - series.mean()) / np.std(series)
-
Creer une dataframe pour les Signaux des 2 stocks avec leur prix en utilisant les donnee du test dataset
-
Calculez le score z pour le rapport et définissez les seuils supérieur et inférieur avec plus et moins un écart type.
-
Créez une colonne de signal avec la logique suivante
- Si le score z est supérieur au seuil supérieur, nous aurons -1 ( vendre),
- si le score z est inférieur au seuil inférieur, +1 (Acheter) et la valeur par défaut est nul pour aucun signal.
Prenez la différence de premier ordre de la colonne de signal pour obtenir la position du stock. Si c’est +1 alors nous sommes en Achat, -1 alors vente et 0 si pas de position.
Le deuxième signal sera juste à l’opposé du premier, ce qui signifie que nous sommes Achat sur une action et simultanément courts sur l’autre. De même, prenez la différence de premier ordre pour le deuxième signal et calculez la deuxième colonne de position.
resultat:
2- PARTIE II: BACTESTING
-
Le backtesting
est une méthode pour voir dans quelle mesure une stratégie ou un modèle aurait fonctionné dans le passe. Le backtesting évalue laviabilité d'une stratégie
de trading en découvrant comment elle se déroulerait à l’aide dedonnées historiques
. Si le backtesting fonctionne, les traders et les analystes peuvent avoir la confiance nécessaire pour l’utiliserà l'avenir
. -
Le
backtesting
permet à un trader desimuler une stratégie
de trading en utilisant des données historiques pour générer des résultats et analyser lerisque
et larentabilité
avant de risquer uncapital réel
.
Calcul des profits
et pertes
du portefeuille
Nous commencerons avec un capital initial de $100 000
et calculerons le nombre maximum d’actions en position pour chaque action en utilisant le capital initial. À un jour donné, le total des profits et pertes du premier stock sera le total de la détention de ce stock et de la position de trésorerie pour ce stock. De même, le profit et la perte pour le deuxième stock seront la détention totale du stock et les liquidités pour ce stock. Vous devez garder à l’esprit que nous avons une position neutre sur le marché(market-neutral), ce qui signifie que nous sommes acheter et vendeur avec le même capital. Enfin, pour obtenir le total des profits et pertes, nous devons agréger ces deux éléments. Sur la base de la position des actions 1 et 2, nous calculons leurs rendements quotidiens respectifs.
- Nous commencerons avec un capital initial de $100 000 et calculerons le nombre maximum d’actions en position pour chaque action en utilisant le capital initial. [voir code](code link:)
Voir la performance du portefeuil:
- calcule de notre CAGR(Compound Annual Growth Rate)
Le taux CAGR est le taux de rendement qui serait nécessaire pour qu’un investissement passe de son solde initial à son solde final, en supposant que les bénéfices ont été réinvestis à la fin de chaque période de la durée de vie de l’investissement.
- Les investisseurs peuvent comparer le CAGR de deux alternatives pour évaluer la performance d’une action par rapport à d’autres actions d’un groupe de pairs ou d’un indice de marché
ou,
![](https://antonio2505.github.io/antoine_kassi/images/pairs_trading/gar.png)
avec: m = 1/n
n = Numbre d’annee
VF = Valuer Finale
VI = Valeur iniatl
investopedia, l’une de mes meilleurs plateforme pour apprendre le monde de la finance. Tres recommander.
![](https://antonio2505.github.io/antoine_kassi/images/pairs_trading/8.png)
le CAGR
de la stratégie est de 12,206%
ce qui semble prometteur, mais il y a beaucoup de choses à considérer avant de tirer un quelconque conclusion:
Conlusion
Il y a toujours une limite à l’utilisation de données historiques pour prévoir l’avenir. La bonne performance de la strategies avec les donnee historiques ne provent pas que notre stategies aura une belle performance dans le future.
Nous n’avons pas pris en compte les coûts liés aux transactions, aux dérapages du marché etc. Normalement, une stratégie neutre au marché(market-neutral) se traduit par un nombre élevé de transactions impliquant plus de coûts liés aux transactions. La stratégie ne function ne pas correctement dans un marché illiquide.
Cette strategies peut etre utilisée en combinaison d’une autre strategie pour reduire ou limiter les risks, par example les options(vertical spread), aussi peut etre ulitisé un systeme de trading automatisé.
Lien vers le référentiel GitHub