Heim  >  Artikel  >  Backend-Entwicklung  >  Erhalten Sie ganz einfach historische Binance-Transaktionen mit Python

Erhalten Sie ganz einfach historische Binance-Transaktionen mit Python

PHPz
PHPznach vorne
2023-04-12 22:16:191968Durchsuche

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.

Datenhäufigkeit und -ausgleich

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.

Die Kodierung, die wir durchführen werden

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.

Codierungszeit

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

Erhalten Sie ganz einfach historische Binance-Transaktionen mit Python

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

Erhalten Sie ganz einfach historische Binance-Transaktionen mit Python

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.

Transaktionen abrufen

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.

Holen Sie sich die erste Transaktionsnummer

Erhalten Sie ganz einfach historische Binance-Transaktionen mit Python

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.

Erhalten Sie ganz einfach historische Binance-Transaktionen mit Python

Die angeforderte Antwort ist eine nach Datum sortierte Liste von Handelsobjekten im folgenden Format:

#🎜🎜 #

Erhalten Sie ganz einfach historische Binance-Transaktionen mit Python

Da wir also die erste Transaktions-ID benötigen, geben wir diesen Antwortwert[0]["a"] zurück.


Hauptschleife


Da wir nun die erste Transaktions-ID haben, können wir 1000 Transaktionen gleichzeitig extrahieren, bis das Enddatum erreicht ist. Der folgende Code wird in unserer Hauptschleife aufgerufen. Es führt unsere Anfrage mit dem Parameter from_id aus und verwirft die Parameter startDate und endDate.


Erhalten Sie ganz einfach historische Binance-Transaktionen mit Python

Das ist nun unsere Hauptschleife, die die Anfrage ausführt und unseren DataFrame erstellt.


Erhalten Sie ganz einfach historische Binance-Transaktionen mit Python

Wir prüfen, ob current_time das zuletzt abgerufene Transaktionsdatum enthält, das größer als to_date ist. Wenn ja, dann gehen wir wie folgt vor:

# 🎜🎜 #

Verwenden Sie den Parameter „from_id“, um die Transaktion abzurufen.
  • Verwenden Sie die von der letzten Transaktion erhaltenen Informationen, um die Parameter „from_id“ und „current_time“ zu aktualisieren.
  • Schöne Debug-Nachricht drucken

  • pd.concat Diese Transaktionen werden mit unserem vorherigen Transaktions-DataFrame verglichen

  • Verwenden Sie den Ruhezustand, damit Binance dies tut Geben Sie uns keine 429-HTTP-Antwort . Wir werden Transaktionen mit doppelter Kürzung und Transaktionen, die nach to_date aufgetreten sind, entfernen (wir haben dieses Problem, weil wir die meisten der 1000 Transaktionen erhalten, daher wird erwartet, dass wir einige Transaktionen nach dem angestrebten Enddatum ausführen).

  • Wir können unsere Trimmfunktion kapseln:


und unsere Datenbereinigung durchführen:# 🎜🎜#


Jetzt können wir es mit der to_csv-Methode in einer Datei speichern: 🎜#

Wir können auch andere Datenspeichermechanismen verwenden, beispielsweise Arctic. Erhalten Sie ganz einfach historische Binance-Transaktionen mit Python

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. Erhalten Sie ganz einfach historische Binance-Transaktionen mit Python

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. Erhalten Sie ganz einfach historische Binance-Transaktionen mit Python

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!

Stellungnahme:
Dieser Artikel ist reproduziert unter:51cto.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen