Heim > Artikel > Backend-Entwicklung > Erhalten Sie ganz einfach historische Binance-Transaktionen mit Python
Angesichts der Tatsache, dass einige Strategien ein bestimmtes Maß an technischen Daten erfordern, während andere möglicherweise nur eine Stunde Ihrer Zeit in Anspruch nehmen, ist der Prozess nicht immer einfach und Elemente wie Infrastruktur, Verfügbarkeit und Konnektivität können je nach Daten variieren. Die Arten variieren stark.
Aber warum geht es in diesem Artikel nur darum, „Transaktions“-Daten zu erhalten, warum verwenden wir die Binance-API? Möglicherweise haben Sie Fragen zum Inhalt meines Artikels.
Ich würde sagen, dass Handelsdatenendpunkte hauptsächlich an 99,99 % der Börsen verfügbar sind. Es ist feinkörnig, bietet genügend Details (in einigen sehr spezifischen Fällen) für das Backtesting von Hochfrequenzhandelsstrategien (HFT) und kann als OHLC-Kerzenbasis (1S bis 24H oder mehr, falls gewünscht) verwendet werden.
Handelsdaten sind universell und ermöglichen eine große Anzahl von Experimenten mit Strategien mit unterschiedlichen Häufigkeiten.
Warum Binance wählen?
Das liegt einfach daran, dass es sich um eine der Börsen handelt, bei denen ich aufgrund des schieren Volumens eher zurückziehe.
Wir werden ein Python-Skript erstellen, das ein Symbolpaar, ein Startdatum und ein Enddatum als Befehlszeilenargumente empfängt. Es gibt eine CSV-Datei mit allen Transaktionen auf die Festplatte aus. Der Prozess kann durch die folgenden Schritte im Detail erklärt werden:
1 Analysieren Sie die Argumente Symbol, Startdatum und Enddatum.
2. Holen Sie sich die erste Transaktion, die am Startdatum stattgefunden hat, um die erste Transaktions-Trade_ID zu erhalten.
3. Schleife, um 1000 Transaktionen pro Anfrage zu erhalten (Binance-API-Limit), bis das Enddatum erreicht ist.
4. Speichern Sie abschließend die Daten auf der Festplatte. Für das Beispiel haben wir es als CSV gespeichert, aber Sie haben andere Optionen und speichern es nicht unbedingt als CSV.
5. Wir verwenden Pandas, Anfragen, Zeit, System und Datum/Uhrzeit. Im Codeausschnitt wird die Fehlervalidierung nicht angezeigt, da sie keinen Mehrwert für die Beschreibung darstellt.
Das Skript verwendet die folgenden Parameter:
1 Symbol: Das von Binance definierte Symbol des Handelspaares. Dies kann hier abgefragt oder aus der URL der Binance-Webanwendung kopiert werden (ohne _-Zeichen).
-Startdatum und Enddatum: Selbsterklärend. Das erwartete Format ist MM/TT/JJJJ oder %m/%d/%Y im Python-Slang.
Um die Parameter zu erhalten, verwenden wir die integrierte Funktion sys (hier gibt es nichts Besonderes) und um das Datum zu analysieren, verwenden wir die Datetime-Bibliothek.
Wir addieren einen Tag und subtrahieren eine Mikrosekunde, so dass der Zeitteil „Enddatum“ immer bei 23:59:59.999 liegt, was das Erhalten des gleichen Tagesintervalls praktischer macht.
Mit der Binance-API und dem aggTrades-Endpunkt können wir bis zu 1000 Trades in einer Anfrage mit bis zu einer Stunde dazwischen abrufen, wenn wir Start- und Endparameter verwenden.
Nach ein paar Fehlschlägen bei der Verwendung des Intervallabrufs (irgendwann würde die Liquidität verrückt spielen und ich würde einige wertvolle Trades verlieren), habe ich mich entschieden, die from_id-Strategie auszuprobieren.
Wird der von aggTrades ausgewählte Endpunkt sein, da er komprimierte Trades zurückgibt. So gehen uns keine wertvollen Informationen verloren.
Erhalten Sie komprimierte Gesamtangebote. Gleichzeitig ausgeführte Trades aus derselben Order zum gleichen Preis summieren die Menge.
Die from_id-Strategie sieht folgendermaßen aus:
Wir möchten das Startdatum der ersten Transaktion erhalten, indem wir das Datumsintervall in Richtung Endpunkt senden. Danach erhalten wir 1000 Transaktionen, beginnend mit der ersten abgerufenen Transaktions-ID. Wir prüfen dann, ob die letzte Transaktion nach unserem Enddatum stattgefunden hat.
Wenn ja, haben wir alle Zeiträume durchlaufen und können die Ergebnisse in einer Datei speichern. Andernfalls aktualisieren wir die Variable from_id, um die letzte Transaktions-ID zu erhalten, und starten die Schleife erneut.
Zuerst erstellen wir ein neues_Enddatum. Das liegt daran, dass wir aggTrades verwenden, indem wir die Parameter startTime und endTime übergeben.
Jetzt müssen wir nur noch die erste Transaktionsnummer des Zeitraums kennen, also fügen wir 60 Sekunden hinzu. Bei Währungspaaren mit geringer Liquidität kann dieser Parameter geändert werden, da nicht garantiert werden kann, dass Transaktionen am ersten Tag der Anfrage stattfinden.
Analysieren Sie dann das Datum mit unserer Hilfsfunktion, um das Datum mithilfe der Funktion „calendar.timegm“ in eine Unix-Millisekundendarstellung umzuwandeln. Die Funktion timegm ist die bevorzugte Funktion, da sie Datumsangaben in UTC speichert.
Die angeforderte Antwort ist eine nach Datum sortierte Liste von Handelsobjekten im folgenden Format:
# 🎜🎜 #
Jetzt können wir es mit der to_csv-Methode in einer Datei speichern: 🎜#
Wir können auch andere Datenspeichermechanismen verwenden, beispielsweise Arctic.
Zuletzt: Überprüfen Sie Ihre Daten
Es ist wichtig, dass wir unseren Daten vertrauen, wenn wir Handelsstrategien verwenden. Wir können dies mit den erfassten Transaktionsdaten leicht tun, indem wir die folgende Validierung anwenden: Konvertieren Sie diesen DataFrame in ein NumPy-Array und iterieren Sie Zeile für Zeile und prüfen Sie, ob die Transaktions-ID für jede Zeile um 1 erhöht wird.
Binance-Transaktions-IDs werden fortlaufend nummeriert und für jedes Handelssymbol erstellt, sodass die Richtigkeit der Daten leicht überprüft werden kann.
PS: Der erste Schritt bei der Erstellung einer erfolgreichen Handelsstrategie besteht darin, über die richtigen Daten zu verfügen.
Das obige ist der detaillierte Inhalt vonErhalten Sie ganz einfach historische Binance-Transaktionen mit Python. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!