Erstellen Sie einen Day-Trading-Algorithmus und führen Sie ihn in der Cloud aus, indem Sie nur kostenlose Dienste nutzen
Zunächst holen Sie sich das Skript mit diesem Befehl von GitHub:
git clone https://github.com/alpacahq/Momentum-Trading-Example.git
Nun können Sie es in Ihrem bevorzugten Texteditor öffnen und den Anweisungen folgen. Beachten Sie, dass sich am oberen Rand der Datei Platzhalter für Ihre API-Informationen befinden – Ihre Schlüssel-ID, Ihr geheimer Schlüssel und die URL, mit der Sie sich verbinden möchten. Sie können all diese Informationen über das Alpaca-Dashboard abrufen.
Mit dem Python-SDK von Alpaca können wir uns mit drei Arten von Streaming-Kanälen verbinden. Der erste ist trade_updates
, bei dem es sich einfach um eine Verbindung zu Alpaca handelt, über die wir Updates zu unseren Aufträgen hören können, sobald sie geschehen. Wir werden dies nutzen, um sicherzustellen, dass wir nicht mehrere offene Aufträge für eine Aktie auf einmal einreichen und um zu sehen, ob unsere Aufträge ausgeführt werden.
Die anderen beiden Kanäle sind A.<symbol>
und AM.<symbol>
. Für jede Aktie, die wir beobachten wollen, abonnieren wir diese Kanäle, um von Polygon Updates über den Preis und das Volumen der Aktie zu erhalten. Der A
-Kanal wird jede Sekunde aktualisiert, während der AM
-Kanal jede Minute aktualisiert wird. Wir fassen die Informationen des A
-Kanals selbst zusammen, damit wir sekundengenaue Berechnungen durchführen können, aber wir betrachten AM
als die Quelle der Wahrheit und ersetzen alles, was wir zusammengefasst haben, durch das, was über diesen Kanal kommt. Während wir damit auskommen, nur A
zu beobachten und uns auf unsere eigene Aggregation zu verlassen, gibt uns das Vertrauen in AM
ein wenig zusätzliche Sicherheit gegen Schluckauf in der Verbindung und dergleichen.
Nachdem wir die eingehenden Daten zu unserem Aggregat hinzugefügt haben, prüfen wir, ob eine Aktie ein guter Kauf zu sein scheint, sofern wir sie nicht bereits bestellt haben. Wir definieren einen „guten Kauf“ als eine Aktie mit einem positiven, ansteigenden MACD, die mit einem angemessenen Volumen gehandelt wird und bis heute um über 4 % gegenüber dem gestrigen Schlusskurs gestiegen ist. Wir wollen auch sicherstellen, dass der Kurs seinen Schwung nach der Eröffnung beibehalten hat, d. h. wir achten darauf, dass der Kurs in den ersten fünfzehn Minuten nach der Markteröffnung über dem Höchststand liegt. Wir hoffen, dass diese Aktien im Laufe des Tages weiter an Wert gewinnen werden.
Wenn wir eine Position in einer Aktie haben, überprüfen wir mit jedem neuen Balken, der für diese Aktie eingeht, ob es Zeit ist, zu verkaufen. Wir verkaufen, wenn die Aktie entweder unser Kursziel oder unseren Stop-Loss erreicht hat oder wenn der MACD darauf hindeutet, dass das Wertpapier seinen Schwung verliert und auf unsere Kostenbasis zurückgefallen ist. Im Idealfall erreichen so viele Aktien das von uns festgelegte Kursziel, dass wir die Verluste aus den Aktien, die den Stop-Loss erreicht haben, wieder aufholen können, wobei wir noch einige zusätzliche Gewinne erzielen.
Am Ende des Handelstages liquidieren wir die verbleibenden Positionen, die wir zum Marktpreis eröffnet haben. Die Verwendung von Marktaufträgen ist im Allgemeinen nicht ideal, aber in diesem Fall werden sie verwendet, weil die potenziellen Kosten des Haltens über Nacht größer sind als das Risiko, das wir für die Position eingehen wollten. Im Idealfall haben wir unsere Aktien bereits auf der Grundlage unserer definierten Stop-Losses und Zielkurse liquidiert, aber dies ermöglicht uns, alles abzufangen, was sich durch den flachen Handel an ihnen vorbeischleicht.
Wenn Sie am Ende der langen run()
-Methode nach unten scrollen, werden Sie sehen, wie wir mithilfe des Alpaca Calendar API-Endpunkts prüfen, wann der Markt eröffnet und geschlossen wird. Auf diese Weise können Sie, wenn Sie möchten, einen Cron-Job einrichten, der das Skript jeden Tag zur gleichen Zeit ausführt, ohne dass Sie sich Sorgen machen müssen, dass Marktfeiertage oder späte Eröffnungen Probleme verursachen. Viele Leute ziehen es vor, ihre Skripte manuell auszuführen, aber es ist schön, die Option zu haben, sie einfach selbst laufen zu lassen.