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.
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.