Crypto Quant : trading programmatique de BTC à l'aide de Binance et Backtrader — Partie 2 sur 3 PlatoBlockchain Data Intelligence. Recherche verticale. Aï.

Crypto Quant : trading programmatique de BTC à l'aide de Binance et Backtrader - Partie 2 sur 3


Crypto Quant : trading programmatique de BTC à l'aide de Binance et Backtrader — Partie 2 sur 3 PlatoBlockchain Data Intelligence. Recherche verticale. Aï.

Dans cette partie wje veux installer Backtrader et testez certains modèles de trading par rapport aux données Binance que nous avons recueillies dans la section précédente.

Il existe de nombreux articles et vidéos sur Backtrader et sa configuration. Cette bibliothèque Python populaire facilite le travail Quant de backtesting des stratégies de trading avec des données historiques, répondant ainsi à la question essentielle "Dans quelle mesure aurait-il été rentable de négocier en utilisant des stratégies d'achat/vente données". Au début, cela ressemble à de l’alchimie mathématique, mais il faut se rappeler que les données historiques sont, eh bien, historiques ! Il est peu probable qu'une stratégie de trading qui a fonctionné hier fonctionne aujourd'hui… mais nous y reviendrons sous peu.

Les instructions d'installation du Backtrader (« bt ») sont ici. Remarque : il existe des problèmes connus avec les versions de mapplotlib supérieures à 3.2.0, alors méfiez-vous de cela.

Le guide de démarrage rapide vaut la peine d'être lu, trouvez-le ici.

RSI

Ce que nous allons essayer ici avec Backtrader, c'est de backtester un RSI (Indicateur de force relative) stratégie de trading sur les données cryptographiques historiques (pour BTC) du début de l’année.

L'indicateur de momentum RSI est expliqué ici. Il mesure les conditions relatives de survente et de surachat pour un actif de trading donné et un paramètre de « période » qui est le nombre de ticks (intervalles de trading) à rebours.

Le paramètre de période est par défaut de 14, donc si l'intervalle est de minutes, la formule inclura 14 ticks d'intervalle de données. Comme nous le verrons ensuite, chaque indicateur technique a des paramètres qui sont notre façon de « nous adapter » aux conditions du marché ; ces paramètres ont un impact énorme sur la rentabilité de tout indicateur donné au sein d'une stratégie.

Backtest.py

Notre configuration de backtest : backtest.py est partagé ici. Cela fournira la structure de backtest pour notre exécution de backtest, à définir ensuite. Il s'agit d'une configuration 'bt' assez standard. Passons en revue une partie de ce code, notez qu'il existe de nombreux exemples et didacticiels vidéo en ligne sur le backtest Python pour en tirer des leçons.

Ici, dans la définition de classe, nous établissons les paramètres de notre stratégie RSI.

  • verbeux: si nous voulons afficher les données du journal pendant le backtest
  • mapériode: période moyenne mobile, le nombre de ticks à considérer
  • Quantité: le nombre d'actions à acheter/vendre
  • supérieur: le seuil supérieur de l'indicateur de surachat
  • baisser: le seuil inférieur de l'indicateur de survente
  • arrêter la perte: le paramètre stop loss pour la vente

La suivant() La fonction dans une classe de stratégie Backtrader est ce qui se passe après chaque « tick » d'intervalle de données. Voici buy() ou sell() selon les données, en l'occurrence l'indicateur RSI et nos seuils.

Nous définissons ici le test d'exécution() fonction qui sera appelée par notre code. La fonction de stratégie RSI susmentionnée est ajoutée au cerveau exemple.

Tous les trucs Backtrader assez standards. Voyons comment exécuter cela sur nos données.

Backtester nos données

Assurez-vous d'obtenir les données (en suivant les étapes de la dernière section) du 1er janvier au 2 janvier 2021, elles seront dans un fichier nommé : BTCUSDT-20210101–20210102–1m.csv avec 1440 lignes CSV, une pour chaque minute de la journée.

Ici est le code et le résultat de cette journée de négociation minute par minute pour Bitcoin (BTC) :

En regardant de plus près :

Les paramètres sont simples, nous voulons analyser une journée de trading, en utilisant l'indicateur RSI avec une période de 12 ticks, pas de stop-loss et des limites par défaut de 70,30 pour les déclencheurs de surachat et de survente.

Résultats bt du 1er janvier avec la stratégie d'indicateur RSI standard

La dernière ligne de sortie résume les résultats de ce backtest :

/BTCUSDT-20210101-20210102-1m.csv, RSI (Pd 12) (SL 0.0 %) (U70 L30) Net 777.78 $ (0.78 %) WL 18/7 SQN 1.76

Période RSI 12, 0 (Non) stop-loss, limite (U) supérieure de 70 (L) limite inférieure de 30, bénéfice net (en une journée) de 777.78 $ avec 18 transactions gagnantes et 7 transactions perdantes.

Le dernier chiffre est SQN, un « numéro de qualité du système » (SQN) conçu pour aider les traders à déterminer les points forts, l'opportunité et la qualité d'un système commercial. Une stratégie de bonne qualité est considérée comme une stratégie à la fois négociable et efficace.*

Les valeurs SQN suivantes suggèrent les « qualités » suivantes :

  • 1.6–1.9 En dessous de la moyenne
  • 2.0–2.4 Moyenne
  • 2.5–2.9 Bon
  • 3.0–5.0 Excellente
  • 5.1–6.9 Superbe
  • 7.0 – Saint Graal

La formule SQN :

SquareRoot (NumberTrades) * Moyenne (TradesProfit) / StdDev (TradesProfit)

Normalement, nous insisterions sur au moins 30 transactions pour que cette mesure soit statistiquement significative, mais nous l'ignorerons pour l'instant car nous testons notre backtest sur une courte période.

Vous pouvez zoomer sur des sections du tracé, par exemple :

Ici, nous voyons un signal d'achat (flèche verte vers le haut) lorsque la valeur RSI descend en dessous de 30, puis un signal de vente rentable lorsque le marqueur de profit (cercle bleu) atteint lorsque le RSI dépasse 70. Voir les valeurs du RSI dans le coin inférieur droit. .

Un bénéfice (en une journée) de 777.78 $ avec 18 transactions gagnantes et 7 transactions perdantes est assez bon, en particulier pour une journée de négociation d'action relativement superficielle (+1.42 %). Imaginez ce que nous pourrions réaliser lors d’une journée haussière avec un volume élevé !

Paramètres du modèle

Vous exécutez get_data pour différents jours et les analysez séparément. Remarquez comment les différents paramètres RSI ont un impact sur la rentabilité d'un jour à l'autre.

Par exemple, le même jour de trading BTC mais avec une période RSI de 20 au lieu de 12, un gain-perte de 2/3 et un bénéfice net de -21.51$ (y compris les frais de négociation). C'est une grande différence par rapport au dernier backtest !

Vous pouvez également expérimenter différentes limites RSI (autres que la valeur par défaut 70/30) et paramètres stop-loss. Le stop-loss est un ordre de vente automatique une fois que le prix descend en dessous d'un certain niveau par rapport à l'ordre d'achat exécuté. Comme son nom l’indique, cela peut servir à « stopper une perte » après avoir pris une position volatile.

Stop-Loss

La façon dont nous avons configuré le stop-loss ici est la suivante :

  • 0 : pas de configuration de stop-loss, attendez que l'indicateur déclenche un ordre de vente
  • 0.00x : stop-loss à une valeur en % inférieure au prix d'achat, 0.001 est 0.1% en dessous
  • - 0.0x : le stop-loss suivra la transaction à mesure que le prix monte, 0.01 est un stop-loss suiveur 1% en dessous du prix d'achat

Ce stop-loss est un paramètre important pour chaque transaction et peut avoir une importance significative, sans surprise, sur la performance. Pour en savoir plus sur les stratégies stop-loss, voir ici.

C'est ici, dans notre backtest.py, que nous avons configuré cela à l'aide de backtrader :

Voici le même parcours que celui que nous venons d'analyser mais avec un stop-loss suiveur de 0.1 %

Bénéfice net de 383.67 $ avec 12 victoires et 12 défaites, bien meilleur que la perte que nous avions subie auparavant. Vous pouvez voir sur le graphique que le stop-loss suiveur a protégé de nombreuses transactions contre les pertes en tant qu'indicateur en attente d'un signal de vente (surachat).

Au sein d’un seul indicateur, dans cette configuration, nous avons donc de nombreuses permutations possibles :

  • une plage de périodes comprise entre 10 et 30 intervalles (20 variantes)
  • un réglage stop-loss (imaginons 5 variantes pratiques différentes)
  • un seuil de surachat/survente (imaginons 5 variantes pour l'instant)

Ce serait 20x5x5, ou 500 variantes différentes pour chaque jour. Les examiner un par un à la main serait ridicule et pourtant nous voulons savoir quels paramètres ont été les plus rentables et de la plus haute qualité commerciale et lesquels ne l'ont pas été.

Alchimie quantique !

Cela nous amène à notre prochaine étape dans cette exploration Crypto Quant. Nous pouvons déterminer par force brute les paramètres de stratégie de trading les plus rentables et de la plus haute qualité pour une période de trading donnée, puis voir comment ceux-ci se poursuivent.

Source: https://medium.com/@gk_/crypto-quant-programmatic-trading-of-btc-using-binance-and-backtrader-part-2-of-3-d8af44c93e2b?source=rss——-8—————–cryptocurrency

Horodatage:

Plus de Moyenne