Optimisez vos stratégies de trading : analysez le PnL et les métriques de performance avec Python

Crypto Robot13 décembre 202412 min

Analysez vos performances crypto gratuitement avec un Jupyter Notebook Python et un Tax Endpoint. Suivez votre portefeuille, visualisez votre PnL et optimisez vos stratégies avec cet outil open source.

Preview_image

Que vous fassiez du trading manuel ou que vous utilisiez des bots de trading, un défi se pose rapidement : comment suivre précisément vos performances et obtenir facilement des insights de vos activités. Des questions telles que :

  • Quelle stratégie génère un PnL positif ?
  • Quelles cryptomonnaies ont conduit à des gains ?
  • Lesquelles devrais-je abandonner ?
  • Les positions longs et shorts ajoutent-elles réellement de la valeur à mon portefeuille ?

Doivent avoir des réponses précises. Bien sûr, il existe des outils payants, mais aujourd'hui, nous allons vous montrer comment utiliser votre propre outil gratuit et efficace que nous avons mis en open source, que vous pouvez utiliser et améliorer à votre guise. Par exemple, en seulement trois clics, vous pouvez obtenir un graphique de votre PnL comme celui ci-dessous, et bien plus encore.

Remarque : Ce que nous allons faire aujourd'hui est également un modèle que vous pourriez utiliser pour créer votre propre outil de déclaration fiscale, car nous allons utiliser les mêmes routes que les services de déclaration fiscale en ligne payants utilisent pour effectuer les calculs pour vous !

Analysez la performance de votre trading crypto gratuitement avec Python

Utilisez les Tax Endpoints pour analyser votre portefeuille de trading en Python

Cette solution se résume à un “petit” Jupyter Notebook Python que nous avons développé pour Bitget et le marché des futures pour le moment. C'est une base que vous pouvez utiliser pour le rendre compatible avec d'autres marchés ou plateformes d'échange de cryptomonnaies. Vous le trouverez en open source ici.

Aujourd'hui, nous n'entrerons pas dans les détails du code et de ses calculs, mais nous illustrerons principalement ce qu'il peut produire. Mieux encore, nous utiliserons un compte où nous avons testé un bot de trading comme exemple pour mener une analyse de performance avec ce code. Nous garderons sa configuration pour la dernière partie de cet article. Cette configuration est très simple, et une fois cela fait, exécuter le code revient simplement à un clic !

Comprenez et exploitez les données du Tax Endpoint pour votre analyse crypto

La première étape pour comprendre ce que ce code peut faire—et éventuellement pour l'utiliser pour vos propres analyses ou même l'améliorer—est de comprendre les données qu'il traite.

Le code accède automatiquement à ce qu'on appelle le Tax Endpoint, une URL où les données du compte que vous avez choisi d'analyser sont stockées. Cette sélection se fait en créant des clés API pour le compte (nous couvrons ces étapes dans la dernière partie). Ainsi, les données sont très spécifiques aux informations nécessaires pour la déclaration fiscale.

Notez que les informations que nous récupérons du Tax Endpoint ne sont pas limitées dans le temps : vous pouvez remonter jusqu'à la création de votre compte. Cependant, le type d'informations est limité. Si vous voulez plus de détails pratiques sur ce endpoint, consultez la documentation de Bitget : Get Future Account Record.

En résumé, nous n'obtenons pas d'informations sur l'état des positions à intervalles réguliers ni les détails des ordres—donc pas d'informations sur les stop loss, take profit, etc. Ces données sont simplement l'enregistrement de tous les mouvements/événements sur le compte. Cela se résume à un tableau de données comme celui-ci :

image 1.png

Chaque ligne correspond à un événement caractérisé par :

  • id : l'identifiant de l'événement
  • symbol : présent uniquement lorsque c'est pertinent pour le type d'événement
  • marginCoin : la devise dans laquelle la colonne “amount” est exprimée
  • futureTaxType : indique le type d'événement (ouverture/fermeture de position, transfert, frais de financement…)
  • amount : le montant impliqué dans l'événement, exprimé en unités de “marginCoin”
  • fee : les frais de trading
  • ts : la date de l'événement au format timestamp

Le défi du code utilisant ces données est donc de reconstruire toutes les métriques importantes à partir de celles-ci.

Une des premières choses que le code vous permet de faire est de séparer clairement toutes les informations de trading via l'appel records_manager.trades, qui afficherait quelque chose comme ceci :

image 2.png

Tandis que le reste des informations, de type gestion de compte, est extrait grâce à records_manager.extra_records. Vous obtiendrez quelque chose comme ceci :

image 3.png

Analysez la performance globale de votre compte de trading crypto avec Python

Prenons un exemple pour illustrer une analyse approfondie que ce code vous permet de réaliser. Nous avons utilisé le compte où nous avons testé différentes configurations de notre bot sur la stratégie Envelope. Les résultats ne sont donc pas nécessairement cohérents dans le temps, mais c'est un bon support pour vous montrer les possibilités du code.

Il s'agit d'un bot de trading entièrement automatisé que nous avons développé. La stratégie sous-jacente est une stratégie de retour à la moyenne visant à capturer les anomalies de volatilité en définissant des niveaux d'entrée et de sortie en utilisant des enveloppes autour d'une moyenne de prix à court terme. Tout cela est open source et gratuit. Si vous êtes intéressé pour en savoir plus, voici l'article où vous trouverez toutes les ressources sur ce bot (vidéos, code, etc.).

Probablement la première chose que nous voulons savoir en un clic est la performance globale du compte en quelques chiffres. La méthode records_manager.print_global_analysis() s'en charge et nous donne :

image 4.png

Cette méthode calcule quelques métriques générales importantes :

  • Le plus important : le PnL total (somme des gains et pertes)
  • Le nombre de trades total
  • Le win rate (ratio de trade gagnant/perdant)
  • Mais aussi d’autres métriques souvent sous estimé comme les frais (Fees et Funding Fees)

Il est toujours judicieux de savoir sur combien de trades l'analyse est basée ; trop peu implique généralement que toute statistique sur la performance d'une stratégie n'est pas représentative de son comportement général. Aucune analyse ne peut omettre un calcul du taux de réussite. Vous ne devriez pas être surpris dans notre exemple de trouver le taux de réussite très élevé caractéristique de la stratégie Envelope. En effet, avec ce type de stratégie—chasser les corrections rapides de volatilité—il est nécessaire d'avoir un taux de réussite très élevé pour que la stratégie soit réussie. Nous visons généralement toujours plus de 70 %.

Un avantage précieux de cette analyse est qu'elle fournit également une évaluation de la performance des deux types de positions indépendamment pour des insights supplémentaires. Dans notre exemple, nous pouvons voir qu'en moyenne, avec les configurations testées pour ce bot, les shorts sont principalement perdants : PnL négatif et taux de réussite trop bas. On pourrait alors conclure qu'il est préférable d'empêcher le bot de prendre des shorts ou peut-être revoir la configuration des paramètres pour ces positions.

La performance globale reste attractive et pourrait probablement être optimisée grâce à cette amélioration.

Visualisez vos performances de trading avec des graphiques PnL en Python

Après un bref aperçu des statistiques, les graphiques parlent toujours plus fort. Voir l'évolution de notre capital et le PnL généré par les trades est essentiel pour une analyse rapide. Pour cela, la méthode records_manager.plot_over_time(metric="PnL", show_transfers=True) est idéale. Le paramètre metric peut être changé en Pnl Pct et Capital pour sélectionner chaque graphique. Pour notre compte, nous avons obtenu :

image 5.png

image 6.png

image 7.png

Nous avons ajouté une option pour visualiser où les transferts de fonds ont eu lieu, afin d'éviter de confondre les variations dues aux retraits ou dépôts avec les gains/pertes générés par les trades.

Ces courbes sont assez typiques de la stratégie Envelope, où malgré la diversification du bot sur une vingtaine de cryptos, les gains ne sont pas réguliers mais présentent plutôt des augmentations soudaines. C'est une conséquence des corrélations entre cryptos, qui affectent même les anomalies de volatilité. Notez que la période analysée était assez calme sur le marché des cryptos—évoluant sans beaucoup d'activité—ce qui explique les longues périodes horizontales où aucun trade n'a eu lieu.

Analysez la performance de chaque paire de cryptomonnaies pour optimiser vos stratégies

Ce type de graphique et de statistiques informe sur le comportement du portefeuille global, mais il peut être pertinent d'avoir une analyse plus détaillée de la performance de chaque coin tradé.

Pour évaluer si les métriques sont fiables, il est important de savoir sur combien de trades elles sont calculées. Un simple records_manager.plot_per_pair(metric="Trades") permet cela :

image 8.png

Nous constatons que de nombreuses cryptomonnaies ont eu trop peu de trades pour porter un jugement précis sur leur performance. Cependant, parmi celles qui ont beaucoup de trades, nous pouvons voir dans le PnL ci-dessous, obtenu avec records_manager.plot_per_pair(metric="Pnl"), que FETUSDT a très bien performé. Il serait probablement judicieux de conserver ses paramètres ou même d'augmenter le capital qui lui est alloué. À l'inverse, PENDLEUSDT, compte tenu de son nombre de trades, a vraiment sous-performé. Cela pourrait indiquer que nous devrions modifier ses paramètres ou l'exclure de la stratégie. Nous pouvons également noter SOLUSDT, qui semble prometteur.

image 9.png

Pour optimiser notre utilisation du capital, il est également utile de vérifier le taux de réussite spécifique à chaque crypto. Pour celles ayant suffisamment de trades pour être évaluées, un taux de réussite plus bas peut être suspect. S'il est bien en dessous de celui observé lors de la conception de la stratégie—par exemple, lors du backtesting et de l'optimisation—cela peut signaler un surapprentissage. Les paramètres de la stratégie pour cette cryptomonnaie ont bien fonctionné dans le passé, trop bien ; ils étaient trop ajustés aux données historiques et ne s'adaptent pas aux nouvelles conditions du marché.

image 10.png

Cette analyse peut être approfondie avec la méthode records_manager.plot_per_trade_type(metric="Win Rate", results="ADAUSDT"), qui génère des graphiques de la métrique choisie pour les résultats sélectionnés, soit un symbole de paire soit global. Par exemple, dans le graphique ci-dessous, nous voyons que le taux de réussite de TIAUSDT était excellent pour les longs mais terrible pour les shorts. Autrement dit, le faible taux de réussite initialement repéré sur le graphique par paire est probablement dû au fait que les shorts sabotaient la performance des longs. Cela suggère que la stratégie n'est peut-être pas très efficace pour les shorts, ou que les paramètres qui fonctionnent bien pour les longs ne conviennent pas aux shorts.

tiausdt.png

Comment configurez cet outil gratuit d'analyse de performance trading

Si vous êtes arrivé jusqu'ici, vous souhaitez probablement savoir comment configurer ce code pour vous-même. C'est assez simple. Il se présente sous la forme d'un Jupyter Notebook. Vous pouvez l'exécuter avec l'IDE gratuit VSCode. Si vous avez besoin d'aide pour l'installer et pour le langage Python, vous pouvez suivre notre tutoriel.

La première cellule du Jupyter Notebook contient tous les imports, fonctions et classes que nous avons développés pour le code. Vous n'avez rien à modifier ici ; il suffit de l'exécuter.

Configurez votre clé API Bitget et préparez votre compte pour l'analyse en Python

Passons ensuite à la cellule importante qui contient la configuration du compte que vous souhaitez analyser. Voici son contenu :

api_setup = {
    "apiKey": "",
    "secret": "",
    "password": "",
}
portefolio_start_date = "2024-03-01"
records_manager = RecordsManager(api_setup, portefolio_start_date)

Dans api_setup, insérez les informations de votre clé API (apiKey, secret, password) du compte sur lequel vous voulez effectuer l'analyse. Comme nous avons seulement besoin de lire les informations de notre compte, la clé ne nécessite que les permissions de lecture. Nous n'accéderons qu'au Tax Endpoint, qui est l'URL de notre compte contenant les informations importantes pour la fiscalité (PnL, etc.). Cochez simplement l'option search dans taxation, comme indiqué dans la capture d'écran ci-dessous :

image 11.png

Un autre paramètre important à définir est portefolio_start_date. Il doit s'agir de la date la plus ancienne à laquelle vous avez commencé à avoir de l'activité sur le compte. Il est crucial de ne pas la fixer à une date ultérieure, sinon le code ne téléchargera pas les enregistrements les plus anciens. Cela entraînerait des reconstructions incorrectes du capital dans le temps et du PnL. En effet, certains trades ou transferts manqueraient, et le capital final reconstruit différerait du capital réel sur votre compte.

Personnalisez la période d'analyse pour une évaluation précise de vos performances de trading

Une fois que vous avez configuré la clé API dans le Jupyter Notebook, un seul clic sur “Exécuter tout” vous permet d'exécuter tout le code, comme illustré ci-dessous.

image 12.png

Bien que portefolio_start_date doive être défini à la date la plus ancienne du portefeuille (sinon le code ne produira pas de résultats corrects), nous souhaitons pouvoir choisir une période d'analyse spécifique. En effet, vous pourriez vouloir utiliser les résultats pour des rapports mensuels, hebdomadaires ou annuels.

Pour cela, c'est dans l'appel à la fonction d'analyse que la date peut être spécifiée, comme ceci :

records_manager.analyse()  # analyser la période complète
# records_manager.analyse(start_date="2024-07-01")  # analyser à partir d'une date spécifique
# records_manager.analyse(start_date="2024-07-01", end_date="2024-11-10")  # analyser une période spécifique

Vous pouvez commenter ou décommenter la ligne que vous souhaitez exécuter.

À partir de là, tout se déroule automatiquement. Le reste des cellules contient toutes les méthodes que nous avons évoquées lors de notre analyse de performance précédente. Ainsi, un clic sur “Exécuter tout” les exécutera automatiquement. Bien sûr, n'hésitez pas à organiser les cellules et les graphiques selon vos besoins pour produire votre analyse.

Vous disposez désormais de cet outil puissant pour analyser efficacement vos activités et obtenir des insights approfondis afin d'optimiser davantage vos stratégies. Nous vous souhaitons le meilleur dans vos entreprises de trading !