Votre première stratégie s’est exécutée. Vous allez vérifier si les transactions simulées découlent bien de la règle définie et comprendre les résultats affichés.

Les données de démonstration du livre sont une série de cours artificielle. Le résultat permet de vérifier le fonctionnement du programme. Il ne détermine pas le rendement attendu sur un marché réel.

Commencer par une transaction

Exécutez crossover_strategy.py avec les longueurs 5 et 20. Attendez la fin, puis choisissez Trades dans le panneau sous le graphique. S’il est fermé, ouvrez-le avec la flèche à sa droite.

Le tableau présente les données d’entrée et de sortie d’une transaction. Pour une position longue, l’entrée est un achat et la sortie une vente.

ColonneSignification
TradeNuméro de transaction et identifiant d’entrée
Entry timeInstant d’exécution de l’entrée
Entry pricePrix d’exécution de l’entrée
Exit timeInstant d’exécution de la sortie
Exit pricePrix d’exécution de la sortie
QtyQuantité de la transaction
ProfitRésultat monétaire de la transaction clôturée
Profit %Résultat en pourcentage de la transaction
Sous le graphique de stratégie de PyneIDE, Trades affiche les instants, les prix et les résultats des transactions.
Le tableau Trades permet de vérifier séparément les entrées et sorties exécutées.

Cliquez sur la ligne d’une transaction pour retrouver sa période sur le graphique. Examinez le croisement avant l’entrée et celui qui a déclenché la fermeture.

Le programme initial ne définissait ni commission_value ni slippage. L’exécution de base ne comprend donc pas les coûts que nous allons ajouter. Vérifiez d’abord le sens, les instants et la quantité sur ce cas simple.

Calculer le résultat d’une transaction simple

Si vous achetez une unité à 100 et la revendez à 103, l’écart de prix vaut 3. Avec une valeur de point de un et sans coûts, le résultat monétaire vaut aussi 3.

Plus généralement, le résultat lié au prix d’une position longue se calcule en multipliant la différence entre prix de sortie et d’entrée par la quantité et la valeur du point :

(prix de sortie − prix d’entrée) × quantité × valeur du point

La valeur du point fait partie des métadonnées du marché. Elle indique la valeur monétaire d’une variation d’une unité de prix pour une unité de position. Elle vaut 1 dans les données DEMO du livre.

Les commissions réduisent le résultat net. Le slippage modifie le prix d’exécution et est donc déjà présent dans l’écart de prix. Ne le retranchez pas une seconde fois des prix modifiés.

La vue Performance

L’onglet Performance montre l’évolution du capital sur l’ensemble de l’exécution. Il comporte :

  • Cumulative P&L : la variation du capital par rapport au capital initial ;
  • Max drawdown : le recul maximal de la courbe de capital par rapport à un sommet précédent ;
  • Final equity : le capital à la dernière bougie traitée ;
  • Max run-up : la hausse maximale du capital par rapport à un creux précédent.
La vue Performance de PyneIDE affiche Cumulative P&L, Max drawdown, Final equity et la courbe de capital.
Performance montre la courbe de capital et les valeurs récapitulatives de l’exécution complète.

L’equity peut inclure la valeur fluctuante des positions ouvertes. Le capital final n’est donc pas forcément égal au capital initial augmenté de la somme des profits des transactions clôturées. Vérifiez aussi les positions encore ouvertes à la fin.

Examinez les étapes intermédiaires de la courbe autant que son point final. Des reculs différents et de longues périodes de pertes peuvent aboutir au même résultat final.

La vue Stats

Stats affiche les statistiques détaillées à la fin de l’exécution. Total Trades permet de vérifier le nombre de transactions clôturées ; Net Profit, leur résultat net cumulé.

Le Profit Factor est le rapport entre gains et pertes cumulés : la somme des gains divisée par la valeur absolue de la somme des pertes. Sans transaction perdante, ce quotient n’est pas un nombre fini ordinaire permettant la comparaison.

Le taux de réussite décrit la part des transactions clôturées gagnantes. Il ne détermine pas à lui seul le profit total. Quelques grosses pertes peuvent effacer de nombreux petits gains.

Peu de transactions peuvent produire un résumé trompeur. Gardez toujours leur nombre à côté des autres indicateurs et examinez aussi des transactions perdantes individuelles.

Les coûts dans Properties

Ouvrez les réglages de la stratégie avec l’engrenage Strategy properties du panneau inférieur du graphique, puis choisissez Properties. Le capital initial, la quantité et les coûts y sont modifiables.

Les deux exécutions suivantes servent de comparaison. Leurs coûts appartiennent à l’exemple ; ceux d’un marché réel doivent être définis séparément.

  1. Vérifiez Initial capital à 10000 et Order size à 1 Contracts.
  2. Dans Commission, saisissez 0,1 et choisissez % of order value. Vous pouvez saisir cette valeur sous la forme 0.1.
  3. Réglez Slippage sur 2 ticks.
  4. Enregistrez avec Save, puis lancez Run Pyne code et attendez la fin.
Dans Settings de la stratégie, l’onglet Properties affiche les champs Commission et Slippage.
Properties exprime la commission en pourcentage et le slippage en ticks.

0,1 % ne signifie pas 10 % : le champ s’exprime en unités de pourcentage. Pour une exécution d’une valeur de 100, cela représente une commission de 0,1. L’entrée et la sortie sont toutes deux des exécutions et peuvent chacune entraîner des coûts.

Le tick est le plus petit pas de cotation du marché. Dans les métadonnées DEMO, il vaut 0,01 : deux ticks représentent donc une variation de prix de 0,02. Le slippage décale le prix d’exécution d’un ordre au marché dans un sens défavorable à la stratégie.

La taille du tick et la valeur du point peuvent différer sur un autre marché. Ne transposez pas automatiquement les coûts des données DEMO à un autre instrument.

Le mode d’exécution fait partie de l’expérience

Le réglage On bar close de Fill orders influence l’instant des ordres au marché. Pour la stratégie de base du livre, laissez-le désactivé afin que les ordres issus des signaux s’exécutent à l’ouverture suivante.

After order is filled peut demander un recalcul après une exécution. Using bar magnifier peut examiner les exécutions à l’intérieur des bougies avec des données d’une unité de temps inférieure. Ces options changent les conditions d’exécution ; gardez-les désactivées pour comparer avec le cas de base.

Changer un seul réglage produit déjà un nouveau résultat. Si vous modifiez simultanément longueur, quantité, coûts et mode d’exécution, vous ne pourrez pas déterminer l’origine de la différence.

Conserver la trace des comparaisons

Le bouton Open trades output CSV de la barre d’outils du graphique ouvre l’export des transactions. Open plot output CSV ouvre le tableau des valeurs tracées. Les résultats sont aussi accessibles dans le groupe Output du projet.

Avant de relancer le même programme, copiez les exports à conserver sous d’autres noms. Le nom du résultat d’exécution ne suffit pas à identifier tous les réglages.

Dans vos notes, conservez au minimum :

ExécutionDonnéesLongueurs rapide/lenteQuantitéCommissionSlippage
De baseDEMO5 / 201 unité0 %0 tick
Avec coûtsDEMO5 / 201 unité0,1 %2 ticks

Ajoutez les résultats obtenus. Remplissez ce tableau dans vos propres notes à partir des exécutions réelles.

À vous de jouer

Comparez la même transaction avec et sans coûts. Vérifiez prix d’entrée, prix de sortie et profit. Qu’est-ce qui a changé ? Qu’est-ce qui reste identique dans la règle du signal ?

Solution de l’exercice

Les moyennes et leurs croisements ne dépendent ni des commissions ni du slippage ; les signaux de base restent donc identiques. Le slippage peut dégrader les prix d’entrée et de fermeture au marché. La commission réduit encore le résultat net.

La comparaison directe nécessite des inputs, une quantité, des données et un mode d’exécution identiques, et la possibilité pour la stratégie d’exécuter les ordres dans les deux cas.

Choisir d’autres données

Après la démonstration, le téléchargeur de PyneIDE permet de préparer vos propres données de marché. Elles peuvent avoir d’autres cours, tailles de tick, limites de quantité et transactions. Examinez d’abord les données, puis comparez les résultats.

  1. Dans la vue Pyne à gauche, survolez l’en-tête Data. Cliquez sur l’icône Download Data…, représentée par une flèche descendant d’un nuage. Le Symbol Browser s’ouvre. La même action est disponible par clic droit sur l’en-tête Data.
  2. Choisissez un fournisseur dans Provider. L’image utilise ccxt ; le champ Broker permet alors de choisir la source précise.
  3. Saisissez le marché recherché dans le filtre. L’image choisit le marché au comptant BTC/USD de coinbase. Vérifiez le nom complet : des préfixes ressemblants peuvent désigner des marchés différents.
  4. Réglez Timeframe sur 1D et From sur 365 days back. To réglé sur now demande des données jusqu’au moment du téléchargement.
  5. Cliquez sur Download et attendez la fin.
Symbol Browser de PyneIDE sélectionne le marché au comptant BTC/USD de coinbase via ccxt avec une unité de temps journalière.
Dans Symbol Browser, la source, le marché, l’unité de temps et la période définissent ensemble les données à télécharger.

Dans les informations à droite, mintick est la taille du tick, pointvalue la valeur du point et mincontract la quantité minimale. Vérifiez-les aussi pour vos données. La disponibilité et les accès nécessaires dépendent du fournisseur ; demander les données choisies ici n’implique pas l’utilisation d’un compte de trading.

Les données téléchargées apparaissent dans Data. Cliquer sur le nom du marché dans la ligne supérieure du graphique de stratégie ouvre le sélecteur pour choisir les nouvelles données. Le graphique se recalcule ; vérifiez toujours les inputs et les propriétés de stratégie.

Une période de téléchargement ne garantit pas un nombre de bougies donné : la profondeur fournie, les jours de cotation et les périodes manquantes comptent aussi. Un nouveau téléchargement peut modifier la série étudiée. Pour comparer, conservez le fichier de données et son fichier de métadonnées.

Interpréter une exécution

Un backtest combine une règle, une série de données et un modèle d’exécution. Il aide à vérifier si le code fait ce que vous avez décrit et comment il se serait comporté dans ce modèle. Son résultat ne contient pas les données futures.

Modifier souvent les paramètres sur les mêmes données peut conduire à une règle adaptée à celles-ci. Examiner une autre période, non utilisée pour régler les paramètres, répond à une autre question. Dans le projet final, vous vérifierez donc séparément le bon fonctionnement du programme et la comparaison des réglages.