Sooo.. meine Grundversion eines einfachen Dreiecksarbitragebot für Kraken.com ist fertig
Gratuliere Dir!
Dreiecksarbitrage geht dort eig nur sinnvoll mit "btc xrp eur" und "btc ltc eur", weil überall woanders das Volumen fehlt..
Fehlendes Volumen ist nicht nur Dein Problem, sondern auch das aller Anderen in diesem Markt. Schnell kann da ein best bis zu einem best ask werden, und sich eine Arbitragemöglichkeit ergeben. Auch wenn es nur eine alle paar Tage ist. ....
und selbst bei diesen 2 möglichkeiten habe ich noch nie was profitables gesehen, es dient also mehr Testzwecken
Also seit Samstag sollte sich auch da einiges getan haben. Bei so großen Kurssprüngen sollten sich einige arbitragemöglichkeiten gefunden haben.
Morgen versuche ich dann rauszufinden, wie ich mit Python was in eine txt datei schreiben lasse und mache mir damit dann eine Logdatei.
Logdatei ist sehr wichtig.
Habt ihr noch Hinweise worauf ich achten sollte? Also z.b ungewöhnliche Fehlermeldungen, oder Kontrollen die man einbauen sollte?
Alle APIs die ich bisher gesehen habe, liefern immer eine Antwort zurück. Manche Programmiersprachen werfen eine Exception, wenn bei der Abfrage ein Fehler in der Internetverbindung auftritt (das kommt sehr häufig vor) Die Antworten immer auswerten, Fehler in jedem Fall ins Logfile schreiben, ebenso die Internet Excaptions.
Aktuell läuft es wirklich nur so ab, dass die besten bids/asks miteinander vergleichen werden. Wenn kein Profit möglich ist, macht er nichts weiter. Wenn Profit möglich ist, dann ruft er zusätzlich noch das Volumen dieser besten bids/asks ab und kontrolliert nochmal schnell, ob der Preis sich nicht schon geändert hat. Dann berechnet er die Menge, die möglich ist zu handeln, dabei berücksichtigt er die angebotene Handelsmenge und auch die eigene Balance der Währungen. Wenn diese Menge mind. der MindestHandelmenge entspricht, dann platziert er die entsprechenden Orders mit der ermittelten Menge.
Dann wird 10 sekunden gewartet.
Arbitrage muss schnell gehen. Die extra Abfrage der Besten bid/asks würde ich weglassen, sondern gleich mit den Orderbüchern starten. Spesen nicht vergessen!
Nun wird versucht die soeben erstellten Orders wieder zu canceln. Tritt dabei überall eine Fehlermeldung auf, ist alles gut, weil die orders nicht gecancelt werden können, da sie bereits durchgeführt wurden. Tritt aber bei einer Order kein Fehler auf, wurde diese nicht ausgeführt und der Bot gibt eine entsprechende Fehlermeldung an mich aus. Bisher müsste ich das dann manuell korrigieren, sodass die richtige Menge gehandelt wird.
Du bekommst ja nur eine OrderID, wenn eine Order angelegt wird, also die Order nicht sofort vollständig durchgeführt werden konnte. Mit dem Order Cancel Versuch erkennst Du nur jene Order als korrekt durchgeführt, die beim Absenden der Order nicht sofort vollständig durchgeführt wurden, aber innerhalb von 10 Sekunden komplett durch waren. Vor allem bei Teilweise ausgeführten Orders kannst Du Dir mit dieser Logik Probleme einfangen, Da Du nicht weißt, ab eine gecancelts Order teilweise ausgeführt wurde. Ich würde da eher so vorgehen, wie Du weiter unten schreibst.
Geplant ist noch folgendes:
-Selbstständiges reagieren auf nicht durchgeführte Orders.
Dazu frage ich dann halt die Open Orders ab und dementsprechende Reaktionen.
Das einzige Problem was ich dabei sehe ist die Geschwindigkeit. Denn auch wenn ich alle Befehle innerhalb einer Funktion ohne "warten" habe, dauert die Durchführung ja eventuell etwas (und wenn es nur 1 Sekunde ist).
Ja, die Geschwindigkeit ist ein Problem. Da Du die Märkte nur einzeln Abfragen kannst, arbeitest Du im Prinzip immer mit veralteten Daten. Ja nachdem, wieviele andere Bots gerade dieselbe Arbitrage gefunden haben, wird die Anzahl der nicht sofort durchgeführten Orders steigen.
Nun will und kann ich ja aber nicht ständig weitere API Abfragen reinstellen, um zu kontrollieren, ob eine Order angenommen wurde oder nicht.
Wieso? Sende soviele API Anfragen an die Exchange wie es für Dich nötig und von der Exchange her zulässig ist.
Und noch Fragen zu API Abfragen:
Wovon hängt die Zeit ab, die der Bot für die einzelnen Schritte und Abfragen bei den APIs braucht? Von meiner Inetverbindung? Von meinem Pc? (z.b ist mein Browser oft relativ langsam, ist meine api abfrage es damit auch?) Braucht die API Abfrage länger, wenn ich ein ganzes Orderbook abfrage, als wenn ich nur die besten bids/asks abfrage, die ausgegebene Liste also länger ist?
, also worauf achten?
Kann ich Dir nicht für Kraken beantworten. Der Browser hat mit dem API wenig zu tun, den kannst Du nicht als Vergleich heranziehen. Die APIs brauchen nicht viel Bandbreite, ich verbrauche 20kBit/s Senden und 400kBit/s Empfangen als kurzfristiges Maximum. Internetverbindung sollte wesentlich mehr kBit/s haben, geht ja noch Anderes über die Leitung.
Wie kann ich die API Abfrage beschleunigen?
Darauf hast Du wenig Einfluß. Aktuelle Hardware verwenden, gute Internetverbindung und gut ist. Das Bot Programmieren ist keine Raketenwissenschaft, da kann so viel außerhalb Deines Einflußbereichs als Programmierer passieren, sodass ein suboptimales API das geringste Problem ist.