Construire un algorithme de Day-Trading et l’exécuter dans le cloud en utilisant uniquement des services gratuits

Pour commencer, allez-y et récupérez le script sur GitHub avec cette commande:

git clone https://github.com/alpacahq/Momentum-Trading-Example.git

Maintenant, vous pouvez l’ouvrir dans votre éditeur de texte préféré et suivre le processus. Notez que vers le haut du fichier, il y a des espaces réservés pour vos informations API – votre ID de clé, votre clé secrète et l’URL à laquelle vous voulez vous connecter. Vous pouvez obtenir toutes ces informations à partir du tableau de bord Alpaca.

Votre clé secrète disparaît après avoir été montrée, alors conservez-la dans un endroit sûr. Si vous la perdez, cependant, vous pouvez toujours régénérer votre clé API pour obtenir un nouveau secret.

Remplacez les chaînes de remplacement par vos propres informations, et le script est prêt à être exécuté. Mais avant de le laisser toucher ne serait-ce que l’argent (entièrement fictif) de votre compte simulé, voyons ce qu’il fait. (Si vous êtes plus intéressé par la façon de le faire fonctionner sur GCP que par ce qu’il fait, passez directement à la section suivante.)

En gros, il s’agit d’un algorithme basé sur le momentum. Nous ne traderons pas pendant les quinze premières minutes après l’ouverture du marché, car celles-ci sont toujours assez agitées. Entre la quinzième minute et la première heure, cependant, nous rechercherons les actions qui ont augmenté d’au moins 4 % par rapport à leur clôture de la veille. Si elles ont fait cela et qu’elles répondent à certains autres critères, nous les achèterons, et nous les conserverons jusqu’à ce qu’elles montent suffisamment haut (en atteignant notre objectif de prix) ou qu’elles tombent trop bas (en atteignant notre niveau  » stop « .)

Vous remarquerez qu’en dessous des informations de connexion dans le code, il y a quelques variables supplémentaires qui peuvent être configurées. Celles-ci peuvent être modifiées facilement pour répondre au mieux à vos besoins pour l’algorithme. Il existe des milliers d’actions disponibles pour le trading, mais toutes ne conviennent pas à une stratégie comme celle-ci.

Nous filtrons la liste en recherchant quelques éléments – nous voulons un prix de l’action relativement bas, mais pas un prix si bas qu’il se comporte plutôt comme une penny stock. Nous voulons également nous assurer que l’action est suffisamment liquide pour que nous puissions exécuter nos ordres. Nous nous assurons que le volume en dollars de l’action était au moins min_last_dv le jour de négociation précédent.

Les paramètres default_stop et risk sont importants pour s’assurer que notre algorithme reste dans des limites acceptables. Le risque est le pourcentage de notre portefeuille que nous allons allouer à une position donnée. Puisque nous vendons lorsque nous atteignons le stop loss, le montant de liquidités de notre portefeuille à risque sur une transaction est default_stop * risk * account_balance .

Je ne reviendrai pas ici sur la façon dont nous obtenons nos données d’initialisation – si vous le souhaitez, vous pouvez jeter un œil au code et consulter la documentation de Polygon sur leurs données  » ticker « . Ce qui est un peu plus intéressant, c’est le fait que nous pouvons également diffuser des données en temps réel à partir de Polygon. (Cela est également fait dans un exemple « HFT-ish » récemment publié, un autre algorithme de day trading Alpaca qui négocie beaucoup plus fréquemment que celui-ci et tente de profiter de minuscules déséquilibres du carnet d’ordres.)

Le Polygone.io logo.

En utilisant le SDK Python d’Alpaca, nous nous connectons à trois types de canaux de streaming. Le premier est trade_updates, qui est simplement une connexion à Alpaca sur laquelle nous pouvons entendre les mises à jour de nos commandes au fur et à mesure qu’elles se produisent. Nous l’utiliserons pour nous assurer que nous ne soumettons pas plusieurs ordres ouverts en même temps pour une action et pour voir si nos ordres sont exécutés ou non.

Les deux autres canaux sont A.<symbol> et AM.<symbol> . Pour chaque action que nous allons surveiller, nous nous abonnons à ces canaux pour recevoir des mises à jour de Polygon sur le prix et le volume de l’action. Le canal A se met à jour toutes les secondes, tandis que le canal AM se met à jour toutes les minutes. Nous agrégeons nous-mêmes les informations de la chaîne A pour pouvoir faire des calculs à la seconde près, mais nous considérons AM comme la source de vérité, remplaçant tout ce que nous avons agrégé par ce qui provient de cette chaîne. Alors que nous pourrions nous en sortir en ne regardant que A et en nous fiant à notre propre agrégation, faire confiance à AM nous donne un peu plus de résilience aux hoquets de la connexion et autres.

Une fois que nous avons ajouté les données entrantes à notre agrégat, si nous n’avons pas déjà commandé des actions d’un titre, nous vérifions si cela ressemble à un bon achat. Nous définissons un « bon achat » comme quelque chose avec un MACD positif et croissant, qui s’est échangé à un volume décent et qui a augmenté de plus de 4% par rapport à la clôture d’hier jusqu’à aujourd’hui. Nous voulons également nous assurer qu’il a maintenu sa dynamique après l’ouverture, et nous vérifions donc que le prix est supérieur à son point le plus haut pendant les quinze premières minutes après l’ouverture du marché. Nous espérons que ces actions continueront à prendre de la valeur au fil de la journée.

Si nous avons une position sur une action, nous vérifions également à chaque barre qui arrive pour cette action s’il est temps de vendre. Nous vendons lorsque le titre a atteint soit notre prix cible, soit notre stop loss, ou si le MACD suggère que le titre perd son élan et qu’il est retombé à notre base de coûts. Idéalement, suffisamment d’actions atteignent le prix cible que nous avons fixé pour que nous puissions récupérer les pertes de celles qui atteignent le stop loss, avec quelques bénéfices supplémentaires en plus.

À la fin de la journée de négociation, nous liquidons toutes les positions restantes que nous avons ouvertes au prix du marché. L’utilisation d’ordres au marché n’est généralement pas idéale, mais on y a recours dans ce cas parce que le coût potentiel de la détention pendant la nuit est supérieur à ce que nous étions prêts à risquer sur la position. Idéalement, nous avons déjà liquidé nos actions sur la base de nos pertes stop et de nos prix cibles définis, mais cela nous permet d’attraper tout ce qui se faufile par ces derniers en négociant à plat.

Si vous faites défiler vers le bas après le bas de la méthode longue run(), vous verrez comment nous vérifions quand le marché va ouvrir et fermer en utilisant le point de terminaison de l’API Alpaca Calendar. Cela signifie que, si vous le souhaitez, vous pouvez configurer une tâche Cron pour exécuter le script à la même heure chaque jour, sans avoir à vous soucier des jours fériés ou des ouvertures tardives du marché. Beaucoup de gens préfèrent exécuter leurs scripts manuellement, mais il est agréable d’avoir la possibilité de le laisser s’exécuter tout seul.