Bitcoin Forum
June 15, 2024, 10:37:21 PM *
News: Latest Bitcoin Core release: 27.0 [Torrent]
 
   Home   Help Search Login Register More  
Pages: « 1 2 3 4 5 6 7 8 9 [10] 11 »  All
  Print  
Author Topic: Tagebuch eines Bot Entwicklers  (Read 16844 times)
Darkwinde
Hero Member
*****
Offline Offline

Activity: 700
Merit: 500


View Profile
January 05, 2015, 02:15:47 AM
 #181

kalkulatorix hat ja schon sehr ausführlich geantwortet.
Werde daher nochmal auf wirklich Knackpunkte eingehen, die dir vielleicht das Leben erleichtern sollten Smiley


> Wenn du die Orderbücher abfragst, bekommst auch zum einen immer das Volumen und die Tiefe mit. Du brauchst also keine zweite Abfrage nur deine erste etwas Aufbohren. Ich schreibe solche Infos immer in ein Array.

> Wenn du Sicherheit gewinnen willst, berechne erst alle Notwendigen Informationen, ob der Trade gut wäre und prüfe zum Schluss nochmal ob die selben Marktbedingungen noch existent sind. Das mache ich auch so, danach feuer frei Wink

> Logdateien werden dein Bester Freund, sieh schon jetzt eine Logging Klasse vor die du immer bemühst um Daten wegzuschreiben. Gerade das Debugging wird enorm einfacher wenn du einfach mal wichtige Codestellen im Log ausgeben lassen kannst.

> Du solltest nicht auf Exception bei der Erfüllung von Orders prüfen, das geht spätestens bei Partiell Erfüllten Orders schief. oftmals bieten die Exchanges ein API Call an, der dir sagt ob eien Order bereits geschlossen wurde und was der Grund dafür war. Cancel <-> Erfüllt
Gleiches gilt auch für teilweise Erfüllte Orders. Ich meien, dass es Bittrexx ist, die das sogar ganz wüst machen. Da hast du zum Einen Orders die in der API als offen stehen aber gleichzeitig in der History auftauchen ^^ da muss man dann beides verbinden...

> Du musst dir überlegen, wie und wann du mit Partiell Erfüllten Orders umgehst. Da gibt es diverse Einflüsse und musst dir ein Konzept überlegen. Nimm dir zeit dafür.

> Dein Rechner wird nicht der limitierende Faktor sein. Mein Bot äuft auf einem Raspberry PI Model B bei nicht mal 10% Last. Was aber zuträglich ist, sind stabile Verbindungen zu deinem Provider und einen Timeout für API Response und Connect Zeiten einzubauen in das Programm, Rest kannst du nicht beeinflussen.

> API Anfragen kannst du meines Wissens nach nicht beeinflussen nur deren Verarbeitung und da wirst du sicher deinen Weg finden

> Zeitmessung in Python kann sicher wie in PHP gehen. Nimm aktuelle Zeit vor der Methode und nach der Methode, abziehen und tada haste die Durchlaufgeschwindigkeit ^^

Hoffe ich konnte etwas helfen
Darkwinde


PS: Mir viel bisher kein besserer Name als verschobene Arbitrage ein da du eigentlich Ping-Pong Orders generierst und auf Erfüllung wartest, die aber über mehrere Exchanges gehen Wink Wenn es dafür nen Fachbegriff gibt oder jemand einen Coolen namen weiß, her damit ^^

Serpens66
Legendary
*
Offline Offline

Activity: 2926
Merit: 1131



View Profile
January 05, 2015, 07:57:19 AM
 #182

@kalkulatorix:

Quote
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.
jop, habe bei vielen Abfragen eine error Abfrage, also ob von Kraken ein error zurückgegeben wird und falls ja, wird dieser angezeigt. Ist noch nicht überall eingebaut.. sollte ich vllt wirklich nach jeder Abfrage machen, sicher ist sicher.
Habe vorhin auch geguckt was passiert, wenn ich den Bot ohne Internetverbindung starte. Dann erscheint ne lange Fehlerliste von Python und dem Modul requests, was ich verwende um die Anfragen zu machen... bin noch nicht sicher, wie ich da nun eine Kontrolle einbauen kann... Hast du eine Idee wie ich am anfang eine Kontrolle reinkriege ob Internet an ist und ob die API erreichbar ist?

Quote
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!
Ja richtig. Ich ging halt davon aus, dass es länger dauert das komplette orderbook abzufragen, als erstmal nur die Ticker, zusätzlich hatte ich dadurch gleich noch die kleine Kontrolle, ob der Preis sich vllt innerhalb der Ausführung schon wieder geändert hat. Aber wenn das kein großer unterschied ist, ist es tatsächlich sinnvoller gleich das Orderbook abzufragen.

Quote
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.
Habe das gerade mal bei Kraken getestet. Da bekomme ich auch eine OrderID, wenn die Order sofort ausgeführt wird. Bin aber gerade auch dabei, jetzt das mit den OpenOrders einzubauen. Ich frage also alle open orders ab, schaue ob meine Id dort noch vorhanden ist. Wenn ja, dann rufe ich das executed volume ab um zu erfahren, ob sie teilweise erfüllt ist.
Ich bin mir noch unsicher, wie ich verfahren sollte, wenn tatsähclich eine Order nicht/nur teilweise erfüllt wird... Entweder kehre ich dann trotzdem zur Ausganswährung zurück mit eventuellen Verlusten. Zurzeit stelle ich alle KAuf/Verkaufsorders gleichzeitig rein.  Man könnte es auch so machen, dass man erst die erste ORder reinstellt und diese kontrolliert, ob sie sofort erfüllt wurde. Wenn ja, dann werden die restlichen Orders reingestellt. Wenn nein, dann wird der Vorgang abgebrochen. Das minimiert also die Chance, dass ich in die Situation komme, dass etwas unerfüllt ist.  Dafür habe ich aber auch eine kleine Zeitverzögerung von ca. 1 sekunde zur Kontrolle ob die erste Order erfüllt ist...
Wie hast du das gelöst? Ich glaube Darkwinde z.b. hatte geschrieben, dass er die orders dann einfach drin lässt mit der begründung "das wird schon iwann angenommen", oder?  Wenn ich manuell trade und mir sowas passiert, dann analysiere ich erstmal die Lage und schätze ab, ob die Order noch erfüllt werden könnte und ziehe evtl nach oder schließe sie mit Verlust. Ich kann das ganz gut einschätzen. Aber der Bot kann das nicht. Deswegen müsste man da eine einzige konsequente Vorgehensweise programmieren. Und da wäre mir eine Schließung der Position schon lieber, als evlt in noch größere Verluste zu geraten.

Quote
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.
Naja, die Limits der Exchanges sind schon ziemlich eng. Soweit ich das bei Kraken verstanden habe, habe ich für die meisten Abfragen 10 Calls pro 5 sekunden.  Wenn ich nun also bei 3 currencies immer wieder ziwschendurch, in derselben Funktion, die Daten abfrage, ist das schon nach 3 Abfragen voll ^^ und da sind dann andere Abfragen wie openorders oderso noch garnicht mit drin. Also ich hab da eig nicht besonders viel Spielraum.




@Darkwinde:

Quote
> Wenn du die Orderbücher abfragst, bekommst auch zum einen immer das Volumen und die Tiefe mit. Du brauchst also keine zweite Abfrage nur deine erste etwas Aufbohren. Ich schreibe solche Infos immer in ein Array.
jop, meinte kalkulatorix ja auch schon. werde ich so machen.

Quote
> Wenn du Sicherheit gewinnen willst, berechne erst alle Notwendigen Informationen, ob der Trade gut wäre und prüfe zum Schluss nochmal ob die selben Marktbedingungen noch existent sind. Das mache ich auch so, danach feuer frei
hmhm.. ist nur immer schwierig zu erfassen. Weil ich all die Operationen und Abfragen ja theoretisch zurselben Zeit, also in derselben Funktion mache. Das heißt gäbe es keine Verzögerung durch Hardware, Software Inetleitung usw., dann wäre es auch alles zurselben Zeit. Aber wie gesagt, da muss ich mal ein Tool suchen, um zu sehen, wie lange mein Skript tatsächlich braucht und ob es sinnvoll ist, zu anfang und nach den Berechnungen die Werte abzufragen. (nicht sinnvoll wäre es z.b wenn dazwischen dann nur 0,0x sekunden liegen würden)

Quote
> Logdateien werden dein Bester Freund, sieh schon jetzt eine Logging Klasse vor die du immer bemühst um Daten wegzuschreiben. Gerade das Debugging wird enorm einfacher wenn du einfach mal wichtige Codestellen im Log ausgeben lassen kannst.
Nur zu meinem Verständnis, bin ja noch recht neu was das Programmieren angeht: Eine Logdatei ist doch einfach nur eine Datei, in der ich aufschreiben lasse, was so alles passiert ist. Das heißt wenn keine Profite gefunden werden und auch keine Fehler auftreten steht da für den entsprechenden Zeitraum (kann man ja nach Tag gliedern, oder?) nichts drin. Und sonst steht da nur das drin, was ich vorher festlege, also z.b bei Fehlern dann die fehlermeldungen und bei ausgeführten Trades dann evlt noch die Gewinne und sonstige hilfreiche Dinge. Letzlich ist es also dasselbe wie bisher die Ausgabe in meiner Shell (ich lasse Ereignisse und Fehler immer per "print" ausgeben), mit dem unterschied, dass es abgespeichert wird und zu jeder Zeit daher wieder nachvollziehbar ist.
"Debugging" heißt das auffinden und beheben von Fehlern, richtig?
Wieso soll ich eine Logging Klasse schreiben? Wie würde diese aussehen bzw. wozu wäre sie da? Vermutlich würde ich einfach im Botskript selbst nach jedem Ereignisauslösendem Teil sowas schreiben wie log("es wurde x zu y€/BTC gekauft"), angenommen "log()" sorgt dafür, dass der Text in die logdatei geschrieben wird.
Und wie kann ich mir über die Logdatei wichtige Codestellen ausgeben lassen? Undwozu brauche ich das? Den Code kann ich mir doch direkt im Skript ansehen. Oder meinst du bei Fehlermeldungen, dass dort die Codestelle mit dem Fehler genannt wird?

Quote
> Du solltest nicht auf Exception bei der Erfüllung von Orders prüfen, das geht spätestens bei Partiell Erfüllten Orders schief. oftmals bieten die Exchanges ein API Call an, der dir sagt ob eien Order bereits geschlossen wurde und was der Grund dafür war. Cancel <-> Erfüllt
Gleiches gilt auch für teilweise Erfüllte Orders. Ich meien, dass es Bittrexx ist, die das sogar ganz wüst machen. Da hast du zum Einen Orders die in der API als offen stehen aber gleichzeitig in der History auftauchen ^^ da muss man dann beides verbinden...
jop, ist wie oben erwähnt in Arbeit Smiley


Quote
> Du musst dir überlegen, wie und wann du mit Partiell Erfüllten Orders umgehst. Da gibt es diverse Einflüsse und musst dir ein Konzept überlegen. Nimm dir zeit dafür.
hast du dazu denn noch Ratschläge?


Quote
> Zeitmessung in Python kann sicher wie in PHP gehen. Nimm aktuelle Zeit vor der Methode und nach der Methode, abziehen und tada haste die Durchlaufgeschwindigkeit ^^
ja das klingt sinnvoll, werde ich so ausprobieren Smiley





Ach noch zur Bot-betreibung:
Welche Möglichkeiten habe ich da denn? Also entweder den Pc den ganzen Tag laufen lassen. Sich ein kleines stromsparendes Gerät wie einen Rasperry kaufen (gibts noch andere leichter einstellbare alternativen? weiß nicht ob ich mich mit Linux rumschlagen möchte). Oder einen Server mieten? Ein Server mieten würde vermutlich heißen, dass ich mein Skript irgendwo hochlade und der Dienstleister dieses dann für mich ausführt, richtig? Was kostet sowas im schnitt, ist es günstiger oder teurer als die anschaffung eine rasperry (oder für welchen Zeitraum lohnt sich was davon). Und sind meine Daten auf dem Server sicher? Schließlich steht im Skript mein API Key und bei manchen Exchanges sogar Username und passwort. Nicht dass die das nutzen können und mich bestehlen ^^

Mit Cointracking (10% Rabatt) behältst du die Übersicht über all deine Trades und Gewinne. Sogar ein Tool für die Steuer ist dabei Wink                          
Great Freeware Game: Clonk Rage
binance.com hat nun auch SEPA und EUR Paare! Mit dem RefLink bekommst du 5% Rabatt auf die Tradinggebühren!
kalkulatorix (OP)
Sr. Member
****
Offline Offline

Activity: 388
Merit: 250


View Profile
January 05, 2015, 11:12:54 AM
Last edit: January 05, 2015, 11:32:31 AM by kalkulatorix
 #183

Quote
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.
Habe das gerade mal bei Kraken getestet. Da bekomme ich auch eine OrderID, wenn die Order sofort ausgeführt wird. Bin aber gerade auch dabei, jetzt das mit den OpenOrders einzubauen. Ich frage also alle open orders ab, schaue ob meine Id dort noch vorhanden ist. Wenn ja, dann rufe ich das executed volume ab um zu erfahren, ob sie teilweise erfüllt ist.
Ich bin mir noch unsicher, wie ich verfahren sollte, wenn tatsähclich eine Order nicht/nur teilweise erfüllt wird... Entweder kehre ich dann trotzdem zur Ausganswährung zurück mit eventuellen Verlusten. Zurzeit stelle ich alle KAuf/Verkaufsorders gleichzeitig rein.  Man könnte es auch so machen, dass man erst die erste ORder reinstellt und diese kontrolliert, ob sie sofort erfüllt wurde. Wenn ja, dann werden die restlichen Orders reingestellt. Wenn nein, dann wird der Vorgang abgebrochen. Das minimiert also die Chance, dass ich in die Situation komme, dass etwas unerfüllt ist.  Dafür habe ich aber auch eine kleine Zeitverzögerung von ca. 1 sekunde zur Kontrolle ob die erste Order erfüllt ist...
Wie hast du das gelöst? Ich glaube Darkwinde z.b. hatte geschrieben, dass er die orders dann einfach drin lässt mit der begründung "das wird schon iwann angenommen", oder?  Wenn ich manuell trade und mir sowas passiert, dann analysiere ich erstmal die Lage und schätze ab, ob die Order noch erfüllt werden könnte und ziehe evtl nach oder schließe sie mit Verlust. Ich kann das ganz gut einschätzen. Aber der Bot kann das nicht. Deswegen müsste man da eine einzige konsequente Vorgehensweise programmieren. Und da wäre mir eine Schließung der Position schon lieber, als evlt in noch größere Verluste zu geraten.

Ich kümmere mich gar nicht darum, ob die Order erfüllt ist oder nicht. Wenn ich eine Arbitrage gefunden habe, stelle ich alle Order gleichzeitig in den Markt, schreibe das Ergebnis ins Logfile und gut ist es. Dann warte ich 10 Sekunden und frage dannach die "availiable Funds" ab, und der Bot lauert auf weitere Arbitragen. Dadurch blieben so schöne Orders stehen wie verkaufe BTC um 620 oder verkaufe LTC um 7.9. Das reduziert mir die "availiable Funds" zwar, aber bis jetzt at sich das Aussitzen von offenen Orders immer noch ausgezahlt. Da würde ich eventuell das Volumen der Arbitragen beschränken, damit der Bot nicht handlungsunfähig wegen zu wenig Funds wird.

Ich habe leider noch kein API für Kraken, sorry für die Fehlinformation wegen der OrderID bei erfüllten Orders.

Naja, die Limits der Exchanges sind schon ziemlich eng. Soweit ich das bei Kraken verstanden habe, habe ich für die meisten Abfragen 10 Calls pro 5 sekunden.  Wenn ich nun also bei 3 currencies immer wieder ziwschendurch, in derselben Funktion, die Daten abfrage, ist das schon nach 3 Abfragen voll ^^ und da sind dann andere Abfragen wie openorders oderso noch garnicht mit drin. Also ich hab da eig nicht besonders viel Spielraum.

Ich würde davon ausgehen, daß der Bot das Einzige ist, was Orders in den Markt stellt. Wenn Du manuell eingreifen willst, stell den Bot ab, oder bau eine "Pause" ein, sodaß Du den Bot anhalten kannst, wenn Du manuell in die Exchange eingreifen willst.

Dann brauchst Du nicht so viele zusätzlichen Abfragen. Wenn eine Order erfüllt wird, erhöhen sich die "availiable Funds" in jedem Fall. Verringern tun sich die "avaliable Funds" nur, wenn Du Orders in den Markt stellst, die nicht erfüllt werden. Somit brauchst Du die Funds nur beim Start, Neustart nach Pause, nach Trades und sonst nur alle 5 Minuten. (je mehr Reserven Du hast, desto länger bleibt Dein Bot handlungsfähig und Du kannst das Intervall weiter erhöhen.)  Wenn Du Dich nicht darum kümmerst, ob die Orders erfüllt werden, oder nicht, kannst Du die Open Orders Abfrage ganz weglassen, oder das Handling der offenen Orders nur alle 15 Minuten machen, höchstens so oft, wie Du die Funds abfragst.


Ach noch zur Bot-betreibung:
Welche Möglichkeiten habe ich da denn? Also entweder den Pc den ganzen Tag laufen lassen. Sich ein kleines stromsparendes Gerät wie einen Rasperry kaufen (gibts noch andere leichter einstellbare alternativen? weiß nicht ob ich mich mit Linux rumschlagen möchte). Oder einen Server mieten? Ein Server mieten würde vermutlich heißen, dass ich mein Skript irgendwo hochlade und der Dienstleister dieses dann für mich ausführt, richtig? Was kostet sowas im schnitt, ist es günstiger oder teurer als die anschaffung eine rasperry (oder für welchen Zeitraum lohnt sich was davon). Und sind meine Daten auf dem Server sicher? Schließlich steht im Skript mein API Key und bei manchen Exchanges sogar Username und passwort. Nicht dass die das nutzen können und mich bestehlen ^^
Ich habe 3 lüfterlose Stromsparcomputer, die haben eine Quadcore Laptop CPU verbaut, und sind als Bot-Hardware vollkommen überdiemensioniert. CPU Last nur 1-3% durch den Bot. Stromverbrauch maximal 65 Watt, Kaufpreis aber 1400 EUR. Ich denke, Du würdest da auch mit irdenteinem billigeren USFF (Ultra Small Form Faktor) Computer auskommen, die Gefahr bei einem kleinen Gehäuse ist aber, dass die Lüfter angehen, das nervt auf Dauer gewaltig. Ein Ding mit Atom Prozessor reicht locker aus. Zum Raspberry kann ich nicht viel sagen, bin Windows gewöhnt und möchte in meinem Alter nicht mehr so viel Neues erlernen.


Edit: Unbedingt eine Professional Windows Version für den Bot - Computer verwenden. Nur die Professional Versionen habe einen Remote Desktop inkludiert, sodaß Du den Bot - Compter von Deinem Haupt - Computer fernsteuern kannst. Da brauchst Du, abgesehen von der Erstinstallation keinen Bildhschirm und Tasatur mehr am Bot - Computer, der kann dann irgendwo stehen, wo er keinen Hitzestau bekommt.

12313123
Darkwinde
Hero Member
*****
Offline Offline

Activity: 700
Merit: 500


View Profile
January 05, 2015, 02:13:39 PM
 #184

Quote
Quote
> Wenn du Sicherheit gewinnen willst, berechne erst alle Notwendigen Informationen, ob der Trade gut wäre und prüfe zum Schluss nochmal ob die selben Marktbedingungen noch existent sind. Das mache ich auch so, danach feuer frei
hmhm.. ist nur immer schwierig zu erfassen. Weil ich all die Operationen und Abfragen ja theoretisch zurselben Zeit, also in derselben Funktion mache. Das heißt gäbe es keine Verzögerung durch Hardware, Software Inetleitung usw., dann wäre es auch alles zurselben Zeit. Aber wie gesagt, da muss ich mal ein Tool suchen, um zu sehen, wie lange mein Skript tatsächlich braucht und ob es sinnvoll ist, zu anfang und nach den Berechnungen die Werte abzufragen. (nicht sinnvoll wäre es z.b wenn dazwischen dann nur 0,0x sekunden liegen würden)
Weil es in der sleben Funktion ist, heißt es ja nicht zwangsläufig, dass du es parallel alles machst. Ist Python Multithread fähig? Wenn ja könntest du eine Näherung hinbekommen aber ein sofortiges Ergebnis sehe ich aktuell nicht als möglich an....lasse mich aber gerne umstimmen Wink

Quote
Quote
> Logdateien werden dein Bester Freund, sieh schon jetzt eine Logging Klasse vor die du immer bemühst um Daten wegzuschreiben. Gerade das Debugging wird enorm einfacher wenn du einfach mal wichtige Codestellen im Log ausgeben lassen kannst.
Nur zu meinem Verständnis, bin ja noch recht neu was das Programmieren angeht: Eine Logdatei ist doch einfach nur eine Datei, in der ich aufschreiben lasse, was so alles passiert ist. Das heißt wenn keine Profite gefunden werden und auch keine Fehler auftreten steht da für den entsprechenden Zeitraum (kann man ja nach Tag gliedern, oder?) nichts drin. Und sonst steht da nur das drin, was ich vorher festlege, also z.b bei Fehlern dann die fehlermeldungen und bei ausgeführten Trades dann evlt noch die Gewinne und sonstige hilfreiche Dinge. Letzlich ist es also dasselbe wie bisher die Ausgabe in meiner Shell (ich lasse Ereignisse und Fehler immer per "print" ausgeben), mit dem unterschied, dass es abgespeichert wird und zu jeder Zeit daher wieder nachvollziehbar ist.
"Debugging" heißt das auffinden und beheben von Fehlern, richtig?
Wieso soll ich eine Logging Klasse schreiben? Wie würde diese aussehen bzw. wozu wäre sie da? Vermutlich würde ich einfach im Botskript selbst nach jedem Ereignisauslösendem Teil sowas schreiben wie log("es wurde x zu y€/BTC gekauft"), angenommen "log()" sorgt dafür, dass der Text in die logdatei geschrieben wird.
Und wie kann ich mir über die Logdatei wichtige Codestellen ausgeben lassen? Undwozu brauche ich das? Den Code kann ich mir doch direkt im Skript ansehen. Oder meinst du bei Fehlermeldungen, dass dort die Codestelle mit dem Fehler genannt wird?
Jop hast es schon erfasst. Meine Logging Methode gibt auf der Console oder in DB oder schickt mir was per Mail zu, abhängig von dem was ich im Code ausgeben will. Sprich alle aktuellen Daten zur Marktlage gebe ich nur auf der Console aus, wenn aber ein Trade stattgefunden hat kommt es zusätzlich in die DB (wie auch Fehler) und wenn ein Eingreifen des Nutzers erforderlich ist (kein Withdraw via API) dann schickt er mir eine Mail Wink
Debugging -> Nach verfolgen und Lösen von Fehlern
In PHP gibt es zum Beispiel eine Möglichkeit die Struktur und Inhalte von Variablen auszugeben, was oftmals einfach wichtig ist um ein falschen Tradevorgang nachzuvollziehen.


Quote
Quote
> Du musst dir überlegen, wie und wann du mit Partiell Erfüllten Orders umgehst. Da gibt es diverse Einflüsse und musst dir ein Konzept überlegen. Nimm dir zeit dafür.
hast du dazu denn noch Ratschläge?
Ratschlag nicht, aber kann dir sagen, wie ich es mache:
1) prüfe ob partiell erfüllt
2) wenn ja prüfe ob mit vorhandenem Füllstand bereits meine Profitvorgaben erfüllt sind
2.1) wenn nein leg dich schlafen
3) wenn ja prüfe ob Magic Counter erreicht (berechne ich aus Anzahl der zu prüfenden Coins) wurde
2.2) wenn nein leg dich schlafen
3) wenn ja, breche den Arbitrage ab und verkaufe

Ist etwas verwirrend, hat aber den Ursprung darin, dass mein Arbitrage Trading Strategie zwei geteilt aufgebaut ist: Sofortige Ausführung und verschobene.
Die verschobene Arbitrage geht bei mir vom Startpunkt aus, dass jemand mein Kaufangebot annimmt und erst dann los geschossen wird. Damit trage ich eben Sorge, dass mir der Markt nicht weg läuft und ich im Deadstate bin ohne dass die Order nochmal erfüllt wird. kalkulatorix, hat wie oben beschrieben ein anderes vorgehen bei Arbitrage.







Ach noch zur Bot-betreibung:
Welche Möglichkeiten habe ich da denn? Also entweder den Pc den ganzen Tag laufen lassen. Sich ein kleines stromsparendes Gerät wie einen Rasperry kaufen (gibts noch andere leichter einstellbare alternativen? weiß nicht ob ich mich mit Linux rumschlagen möchte). Oder einen Server mieten? Ein Server mieten würde vermutlich heißen, dass ich mein Skript irgendwo hochlade und der Dienstleister dieses dann für mich ausführt, richtig? Was kostet sowas im schnitt, ist es günstiger oder teurer als die anschaffung eine rasperry (oder für welchen Zeitraum lohnt sich was davon). Und sind meine Daten auf dem Server sicher? Schließlich steht im Skript mein API Key und bei manchen Exchanges sogar Username und passwort. Nicht dass die das nutzen können und mich bestehlen ^^

Ist am Ende des Tages eine Sache, was dir am Besten gefällt. Das aagt dir jemand der erst auf seine alten Tage vor einem Jahr mit Linux angefangen hat: Linux rumschlagen musst du dich nicht viel, sind paar Kommandozeilen Parameter und das ding rennt dann bis zum Ende aller Tage. Updates sind auch einfacher als bei Windows. Will meine beiden Rasps nimmer missen. Aber auch jeder andere Mini PC tut es auch und Windows ist ja auch nicht so das Schlimmste Wink schau dich doch einfach mal um und lass dann danach entscheiden was dir ein sicheres Gefühl gibt und was nicht dein Geldbeutel zu sehr schröpft.

ewibit
Legendary
*
Offline Offline

Activity: 2955
Merit: 1049


View Profile
January 05, 2015, 06:26:58 PM
Last edit: January 05, 2015, 07:10:54 PM by ewibit
 #185

Aktuell BTer, Bittrex, Poloniex und Cryptsy.
Weitere können aber bei Bedarf noch implementiert werden hatte aberbisher kein Bedarf.
Bin da flexibel was eure Wünsche anbelangt.

viele der neuen cryptos werden auf

   AllCrypt
   Coins-E
   AllCoin
   Coin-Swap
   SwissCEX
   AskCoin
   UseCryptos.com
   .
   .
   .


gehandelt und gerade am Anfang ist meist hohe Volatilität...

hier
https://de.cryptonator.com/exchange
hat man einen schönen Überblick  Smiley
Darkwinde
Hero Member
*****
Offline Offline

Activity: 700
Merit: 500


View Profile
January 05, 2015, 09:35:52 PM
Last edit: January 05, 2015, 10:14:03 PM by Darkwinde
 #186

Aktuell BTer, Bittrex, Poloniex und Cryptsy.
Weitere können aber bei Bedarf noch implementiert werden hatte aberbisher kein Bedarf.
Bin da flexibel was eure Wünsche anbelangt.

viele der neuen cryptos werden auf

   AllCrypt
   Coins-E
   AllCoin
   Coin-Swap
   SwissCEX
   AskCoin
   UseCryptos.com
   .
   .
   .


gehandelt und gerade am Anfang ist meist hohe Volatilität...

hier
https://de.cryptonator.com/exchange
hat man einen schönen Überblick  Smiley

Nur weil ein Exchange einen neuen Coin ASAP integriert, heißt es ja nicht, dass andere das auch tun. Bei Dreiecks Arbitrage auf einem Exchange geht das, keine Frage, aber nicht bei meiner Methode über zwei Exchanges...

Trotzdem guter Hinweis zu der Seite (merke ich mir) und auch welche Börsen potenziell interessant sein könnten für meine nächsten APIs
Danke dir

Serpens66
Legendary
*
Offline Offline

Activity: 2926
Merit: 1131



View Profile
January 08, 2015, 12:20:38 PM
 #187

nochmal danke für eure antworten kalkulatorix und darkwinde Smiley 
Python ist übrigens multithread-fähig, weshalb ich das noch dementsprechend umschreiben werde Smiley Aktuell braucht es vom erkennen bis zur ausführung 5 sekunden, was leider oft zu lange ist =/

Mir kam der Gedanke, ob es nicht auch möglich ist, so ein Skript auf einem Tablet zu betreiben? Würde mir halt ungerne ein neues gerät anschaffen wollen. Ich kenne mich nicht mit den nötigen Vorraussetzungen und den Möglichkeiten eines mittelmäßigen Android Tablets aus... aber eigentlich sollte das doch möglich sein?  WLAN kann man sogar im Ruhezustand aktiviert lassen, also sollte man es doch auch hinbekommen, dass im Ruhezustand der Bot arbeitet?  Denkt ihr sowas geht?

Mit Cointracking (10% Rabatt) behältst du die Übersicht über all deine Trades und Gewinne. Sogar ein Tool für die Steuer ist dabei Wink                          
Great Freeware Game: Clonk Rage
binance.com hat nun auch SEPA und EUR Paare! Mit dem RefLink bekommst du 5% Rabatt auf die Tradinggebühren!
kalkulatorix (OP)
Sr. Member
****
Offline Offline

Activity: 388
Merit: 250


View Profile
January 08, 2015, 02:20:07 PM
 #188

Python ist übrigens multithread-fähig
Das ist eine guten Nachricht, da ergeben sich schon einmal mehrere Möglichkeiten.

Aktuell braucht es vom erkennen bis zur ausführung 5 sekunden, was leider oft zu lange ist
Das dauert genau 5 Sekunden? Für eine Analyse des Problem solltest Du erst herausfinden, wie lange jeder einzelner Schritt der Verarbeitung dauert. Ohne mit Kraken Erfahrungen zu haben, erscheinen mir die 5 Sekunden lange für 1*Fund,1*Open_Orders und 3*Market. OOps, das sind ja genau 5, hast Du vielleicht die Verzögerungen eingebaut und mitgerechnet, damit Du nicht über das API Limit kommst?

Mir kam der Gedanke, ob es nicht auch möglich ist, so ein Skript auf einem Tablet zu betreiben? Würde mir halt ungerne ein neues gerät anschaffen wollen.
Das kann ich jetzt nicht nachvollziehen. Selbst bei mir in Österreich kostet so ein Mini PC unter 300 EUR, das sind doch Peanuts im Vergleich dazu, was er im Laufe der Zeit bringen wird. Unterschätze nicht die Schwierigkeiten, die auf Dich zukommen, wenn Du unter Android programmieren willst.

Weiters sollte ein Bot ja 24/7 laufen, das ist mit einem Tablett nur schwer zu erreichen, wenn man es so verwendet, wofür es gedacht ist.

12313123
Darkwinde
Hero Member
*****
Offline Offline

Activity: 700
Merit: 500


View Profile
January 08, 2015, 03:29:01 PM
 #189

Sorry muss mal wieder ranten...
Ich bekomme schon wieder Plack. Hab durch Zufall gesehen, dass der PHP Parser auf einmal meinte in Zeile XY von API Bittrex würde es Offset 1 nicht geben...
Schaue es mir an, kratz mich am Kopf. Erstelle Testdaten....alles OK...kann doch nicht sein...

So nach 2 Stunden jetzt die Lösung... (sorry fürs Schreien) DIE SCHE.... API SCHNITTSTELLE VON BITTREX GIBT ALS ORDERTYPE "Limit_Buy" ZURÜCK UND WENN SIE GERADE LUST HAT FÜR DICH GLEICHE ORDER AUCH MAL NUR "Buy"...
AHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH wie soll man mit so nem Mist arbeiten


So hab mich jetzt ausgekotzt Wink

-----------------

Warum nimmst kein Raspberry PI kostet doch nur 30€ und verbraucht nur paar Watt...

Serpens66
Legendary
*
Offline Offline

Activity: 2926
Merit: 1131



View Profile
January 08, 2015, 06:12:54 PM
Last edit: January 08, 2015, 07:36:02 PM by Serpens66
 #190

Danke für die antworten Smiley

@kalkulatorix:
ich hab ja schon mehrere API Anfragen und diese dauern grob überschlagen je 1 Sekunde.  Ganz genau habe ich es noch nicht nachvollzogen, was wie lange braucht.  Verzögerungen sind nur 0,5 sekunden eingebaut. Wie gesagt beschäftige ich mich jetzt mit Threads (für mich als programmieranfänger noch nicht ganz so leicht, aber wird schon Cheesy) und dann mal schauen, wieviel Zeit ich einsparen kann Smiley

Auch wenn ich schon ein paar Gewinne durch Bitcoins machen konnte, bin ich dennoch nur Student und 300€ sind schon eine gaaaaanze Menge Geld. Hatte bis vor kurzem auch noch einen alten Röhrenfernseher, kein Smartphone, ein kaputtes Bett, einen sehr alten Laptop usw. Neu kaufe ich die Dinge erst, wenns wirklich garnicht mehr anders geht Cheesy  oder wenn ich so wie jetzt gebrauchte Dinge von Verwandten geschenkt bekomme, die aber dennoch um ein vielfaches Neuer sind, als meine Dinge Cheesy
Deswegen würde mir die günstigst-mögliche Variante schon zusagen, die aber dennoch nicht zuviel zusätzlichen Aufwand benötigt.
Schön wäre vermutlich so eine Preisklasse von maximal 100€, wobei ich den Aufwand einen Rasperry zu programmieren für mich mal mit einem Wert von 70€ beziffere Cheesy (weürde also 70€ mehr zahlen, wenn ich keinen Einrichtungsaufwand des Gerätes habe).
Bezüglich Android hätte es ja sein können, dass es da bereits irgendwelche Apps (eine art sehll) gibt, mit denen man Skripte ausführen kann. dann müsste ich nichts direkt mit android machen.

@Darkwinde:
Oh man Cheesy Altcoin-exchanges scheinen eine ziemlich dämliche API zu haben ^^  
Kann man so einen Raspberry denn irgendwo fertig einrichten lassen, sodass ich mich wirklich garnicht mit Linux auskennen muss? Programmieren lernen reicht mir fürs Erste, möchte mich wirklich nicht auch noch mit Linux beschäftigen müssen =/
Gibts denn nichts mit Windows oderso in der Preisklasse 50-100€?

Mit Cointracking (10% Rabatt) behältst du die Übersicht über all deine Trades und Gewinne. Sogar ein Tool für die Steuer ist dabei Wink                          
Great Freeware Game: Clonk Rage
binance.com hat nun auch SEPA und EUR Paare! Mit dem RefLink bekommst du 5% Rabatt auf die Tradinggebühren!
ewibit
Legendary
*
Offline Offline

Activity: 2955
Merit: 1049


View Profile
January 08, 2015, 07:09:24 PM
 #191


Kann man so einen Raspberry denn irgendwo fertig einrichten lassen, sodass ich mich wirklich garnicht mit Linus auskennen muss? Programmieren lernen reicht mir fürs Erste, möchte mich wirklich nicht auch noch mit Linus beschäftigen müssen =/
Gibts denn nichts mit Windows oderso in der Preisklasse 50-100€?
hier
http://www.raspberrypi.org/downloads/
hast du fertige Linux images zum download und z.B. Raspbian
(Debian Wheezy) ist gut und einfach zum Einstieg.

edit:
hier noch ein Vergleich
http://www.raspberry-pi-geek.de/Magazin/2013/05/Distributionen-fuer-den-Raspberry-Pi-im-Ueberblick
kalkulatorix (OP)
Sr. Member
****
Offline Offline

Activity: 388
Merit: 250


View Profile
January 08, 2015, 08:23:28 PM
 #192

... 300€ sind schon eine gaaaaanze Menge Geld.... kein Deswegen würde mir die günstigst-mögliche Variante schon zusagen, die aber dennoch nicht zuviel zusätzlichen Aufwand benötigt.
Schön wäre vermutlich so eine Preisklasse von maximal 100€, wobei ich den Aufwand einen Rasperry zu programmieren für mich mal mit einem Wert von 70€ beziffere Cheesy (weürde also 70€ mehr zahlen, wenn ich keinen Einrichtungsaufwand des Gerätes habe).
Du brauchst ja nicht gleich morgen einkaufen gehen. Einige Zeit musst Du den Bot ja ohnehin überwacht laufen lassen, auf Anhieb funktioniert so ein großes Projekt nicht problemlos. Ich würde sagen, die Hardwareentscheidung hat noch so lange Zeit, bis der Bot längere Zeit ohne Probleme funktioniert hat.

Investiere die 70 EUR besser in Kapital für Deinen Bot, die Installationsanleitungen findest Du ja gratis im Internet.


Gibts denn nichts mit Windows oderso in der Preisklasse 50-100€?
Nein. Ich würde Dir auch NICHT raten, einen gebrauchten Computer in dieser Preisklasse zu kaufen. Da bleibt nur ein Raspberry als Alternative. Ich hatte vor 15 Jahren auch aus der Windows Welt kommend, mit Linux zu tun, das war zwar eine Umstellung, aber nach einer Zeit gewöhnt man sich an die Möglichkeiten die eine Linux Shell so bietet. Du muss ja nicht ein Raspberry Guru werden, im Internet gibt es Installationsanleitungen, wenn es einmal eingerichtet ist, brauchst Du nur Dein Python Programm auf den Raspberry kopieren (entwickeln kannst Du ja bequem am PC) und dann starten/stoppen. Den Bot zu schreiben ist die größere Hürde.

12313123
Darkwinde
Hero Member
*****
Offline Offline

Activity: 700
Merit: 500


View Profile
January 08, 2015, 10:10:56 PM
 #193

... 300€ sind schon eine gaaaaanze Menge Geld.... kein Deswegen würde mir die günstigst-mögliche Variante schon zusagen, die aber dennoch nicht zuviel zusätzlichen Aufwand benötigt.
Schön wäre vermutlich so eine Preisklasse von maximal 100€, wobei ich den Aufwand einen Rasperry zu programmieren für mich mal mit einem Wert von 70€ beziffere Cheesy (weürde also 70€ mehr zahlen, wenn ich keinen Einrichtungsaufwand des Gerätes habe).
Du brauchst ja nicht gleich morgen einkaufen gehen. Einige Zeit musst Du den Bot ja ohnehin überwacht laufen lassen, auf Anhieb funktioniert so ein großes Projekt nicht problemlos. Ich würde sagen, die Hardwareentscheidung hat noch so lange Zeit, bis der Bot längere Zeit ohne Probleme funktioniert hat.

Investiere die 70 EUR besser in Kapital für Deinen Bot, die Installationsanleitungen findest Du ja gratis im Internet.


Gibts denn nichts mit Windows oderso in der Preisklasse 50-100€?
Nein. Ich würde Dir auch NICHT raten, einen gebrauchten Computer in dieser Preisklasse zu kaufen. Da bleibt nur ein Raspberry als Alternative. Ich hatte vor 15 Jahren auch aus der Windows Welt kommend, mit Linux zu tun, das war zwar eine Umstellung, aber nach einer Zeit gewöhnt man sich an die Möglichkeiten die eine Linux Shell so bietet. Du muss ja nicht ein Raspberry Guru werden, im Internet gibt es Installationsanleitungen, wenn es einmal eingerichtet ist, brauchst Du nur Dein Python Programm auf den Raspberry kopieren (entwickeln kannst Du ja bequem am PC) und dann starten/stoppen. Den Bot zu schreiben ist die größere Hürde.

+1 nimmst mir die Worte aus dem Mund Wink wobei ich erst vor einem Jahr durch den PI mit Linux angefangen hatte...solange konnte ich mehr wehren Wink

Steinbeisser
Newbie
*
Offline Offline

Activity: 11
Merit: 0


View Profile
January 11, 2015, 05:47:32 PM
 #194

Da gibt es gerade neu ein Buch mit dem Titel "Sie wissen alles" zu kaufen. Darin gibt es Hinweise wie Profis aus Banken ihre Bots entwickeln.
FreeBit
Member
**
Offline Offline

Activity: 106
Merit: 10


View Profile
January 14, 2015, 05:17:38 PM
Last edit: January 14, 2015, 05:32:44 PM by FreeBit
 #195

Hallo Smiley ...

Habe gestern nach langer Zeit mal wieder ins Forum geguckt und diesen Thread über antizyklisches Handeln entdeckt. Sehr interessant - habe ich dort auch zum Ausdruck gebracht.

Ich mache auch crypto currency trading bots, und das auch schon etwas länger. Eher alleine und mit sehr geringem Austausch, vor allem, weil ich die Bots, die versuchen, Prognosen zu treffen, nicht so interessant finde. Eine einfache mathematische Grundlage wie die Antizyklische Strategie mag ich mehr.

Habe allerdings auch einen Bot gemacht, der den Ichimoku-Indikator als Trendsignal benutzt und die Parameter des Indikators mittels genetischer Algorithmen ständig optimiert. Erfolg war durchaus da, habe aber nach VPS-Provider-Wechsel vorübergehend das Interesse daran verloren. Der neue Provider ist sehr billig (7,5$ py, und irgendwie schlecht), und hat nicht genug Rechenleistung für die Optimierung.

Anyway - als Programmiersprache benutze ich Scala. Ist eher wenig verbreitet, aber ich mag es und es ist sehr effektiv. Banken etc. stellen zunehmend auf Scala um. Die Twitter-Message-Loop ist in Scala programmiert, netflix benutzt es auch.

Es war nett zu lesen, wie sich andere durch die Standard-Probleme durchgekämpft (wie Nachkommastellen auf bter etc.) haben. Ich habe als Resultat dieses Lernprozesses inzwischen drei bis vier Abstrahierungsschichten zwischen der konkreten Exchange-Klasse und der Logik Smiley ...


Mein nächstes Projekt wird die Implementierung eines AntiCycle-Bots sein. Und die allererste sich stellende Frage ist nicht-technischer Natur, nämlich welches Handelspaar: https://bitcointalk.org/index.php?topic=495672.msg10152920#msg10152920


Was meint ihr Smiley ... ?


kalkulatorix (OP)
Sr. Member
****
Offline Offline

Activity: 388
Merit: 250


View Profile
January 20, 2015, 12:00:55 PM
 #196

Implementierung eines AntiCycle-Bots sein. Und die allererste sich stellende Frage ist nicht-technischer Natur, nämlich welches Handelspaar:
Bei solchen Fragen gehe ich immer nach den Ausschlußprinzip vor. Zuerst alle Alternativen auflisten und dann die schlechten Alternativen streichen.

Meine Ausschlußkriterien sind:

Geringes Handelsvolumen Ein Antizyklus Bot stellt keine zusätzlichen offenen Orders in den Markt, er nimmt nur vorhandene Orders an. d.h. wenn ein weiterer Bot in den Markt kommt, wird das Handelsvolumen nicht oder nur minimalst steigen. Alle Märkte, deren Volumen zumindest nicht 10.000 (zehntausend) mal höher als Deine Investition sind, kannst Du streichen.

Volumen der offenen Orders Ein Antizyklus Bot braucht, bei kleineren Gewichtungskorrekturen pro Prozent der Preisänderung ein halbes Prozent von Deiner Investition an Ordervolumen im Markt. Ich würde 10% Preisänderung als Grenze sehen, mit der der Bot noch funktioniren sollte, alse 5% Deiner Investition sollten jederzeit im Besten Bid/Ask Paar des Marktes verfügbar sein.

Bid/Ask Spread Da ein Antizyklus Bot immer nur vorhandene Orders im Markt nimmt, hat er bei 2 Korrekturen in die entgegengesetzte Richtung den Abstand zwischen Bid und Ask zu überwinden. Dieses Kriterium hängt stark mit dem vorigen zusammen, meist haben Märkte mit gut gefüllten Orderbüchern auch einen geringen Spread.

Handelspreis im Verhältnis zur kleinsten Handelseinheit Oft sind die Kommastellen im Preis auf weniger als 8 Stellen beschränkt. Die kleinstmögliche Preisänderung sollte den Wert eines Coins im Handelspaar um weniger als 1% verändern.

Spesen Die Spesen nicht vergessen! Ein Antizyklus Bot kann durch die Spesen rasch unprofitabel werden, macht der Bot 2 Korrekturen in die entgegengesetzte Richtung, fallen die Spesen doppelt an.

minimale Ordergröße Bei vielen Märkten muß die Order eine bestimmte Größe haben. Ein Antizyklus Bot stellt eher kleinere Orders in den Markt, sodaß das bei kleinen Investitionen bereits ein Problem werden kann. Falls der Bot Fehlgewichtungen von 1% korrigieren soll, darf die minimale Ordergröße nicht kleiner sein als 0,5% der Investition.

Wieviel möchtest Du vom Bot verwalten lassen? Auf welcher Exchange? Es macht einen großen Unterschied, ob Du mit 10 EUR oder 10000 EUR startest, die Kriterien filtern in Abhängigkeit von der Investition ganz andere Märkte heraus.

12313123
FreeBit
Member
**
Offline Offline

Activity: 106
Merit: 10


View Profile
January 20, 2015, 03:02:14 PM
 #197

Implementierung eines AntiCycle-Bots sein. Und die allererste sich stellende Frage ist nicht-technischer Natur, nämlich welches Handelspaar:
Bei solchen Fragen gehe ich immer nach den Ausschlußprinzip vor. Zuerst alle Alternativen auflisten und dann die schlechten Alternativen streichen.

Meine Ausschlußkriterien sind:

[...]


Danke.

Ich habe mich für STR|BTC auf Poloniex entschieden. Die von dir genannten Punkte sind eingermaßen gewährleistet - darüber hinaus habe ich mich dafür entschieden, weil ->

* ich STR für vergleichsweise langlebig halte
* das Verhältnis schwankt natürlich, aber vermute, daß es nicht zu stark schwanken wird.
* ich einen Grund habe, meine ExchangeInterface-Bibliothek zu erweitern.


Bis jetzt habe ich ->

* die groben, aber schon lauffähigen Klassenstrukturen, die ich in die
Ausführungsroutine der "Bot-Oberklasse" einhängen kann, gemacht. Auch die Datenbanktabellen, Konfigurationsdateien usw.

* ExchangeInterface abgeleitet und teilweise implementiert. Das ist inzwischen einfach nur langweilig.

* Die Kernroutinen dieser AntiCycle-Logik - nämlich Berechnung der Relation und der daraus folgenden Handelsgrößen, unter Berücksichtigung der bid bzw. ask-Seite - vollständig, genau, fehlerbehandelnd und allgemein verwendbar implementiert.

* Erste Strukturen der die AntiCycle-Logik einbindenen Handelslogik. Abläufe etc.

* Das mit anderem bestehenden Code harmonisiert, Code-Wiederholungen in "Traits" (so heißt das bei Scala) oder Elter-Klassen ausgelagert etc.

Wenn ich mir das so durchlese, gar nicht so schlecht.


Anyway - ich mache das schon etwas länger und einige meiner Konstrukte (Klassen) zu Behandlung der typischen Aufgaben eines Handelsbots haben sich für mich als sehr nützlich erwiesen. Beispielsweise eine konfigurierbare Klassen für Fee-Berechungen, Behandlung von Währungswertepaaren, Dezimalstellen etc.

Besteht daran Interesse, ich könnte hier hoffentlich aufschlußreichen SourceCode reinstellen?


FreeBit
Member
**
Offline Offline

Activity: 106
Merit: 10


View Profile
January 20, 2015, 03:03:11 PM
 #198

Da gibt es gerade neu ein Buch mit dem Titel "Sie wissen alles" zu kaufen. Darin gibt es Hinweise wie Profis aus Banken ihre Bots entwickeln.

Wie machen die das denn?
Serpens66
Legendary
*
Offline Offline

Activity: 2926
Merit: 1131



View Profile
January 20, 2015, 07:40:06 PM
 #199

Besteht daran Interesse, ich könnte hier hoffentlich aufschlußreichen SourceCode reinstellen?
Ich schreibe meinen Bot ja in Python und lerne diese Sprache (als meine erste richtige Programmiersprache) auch gerade.
Meine bisherigen Konstrukte laufen größtenteils linear und mit wenig Verzweigungen, weshalb wenn ich was neues zufügen will,  ich alles neuschreiben müsste. Natürlich wird aber auch in Python normalerweise so programmiert, dass man z.b problemlos eine neue Börse aufnehmen kann, ohne alles komplett neu zu schreiben/zu ändern.
Daher hätte ich schon Interesse daran, wie sowas aussehen kann, wenn auch in einer anderen Sprache, aber ich denke es wird schon verständlich genug sein Smiley

Mit Cointracking (10% Rabatt) behältst du die Übersicht über all deine Trades und Gewinne. Sogar ein Tool für die Steuer ist dabei Wink                          
Great Freeware Game: Clonk Rage
binance.com hat nun auch SEPA und EUR Paare! Mit dem RefLink bekommst du 5% Rabatt auf die Tradinggebühren!
FreeBit
Member
**
Offline Offline

Activity: 106
Merit: 10


View Profile
January 20, 2015, 09:42:10 PM
Last edit: January 20, 2015, 10:07:50 PM by FreeBit
 #200

@serpens66

Also grundsätzlich mache ich alles so allgemein verwendbar wie möglich.


Beispiel Nachkommastellen. Ich unterscheide drei Fälle: Anzeige, Rechnungen und Handeln. Beispielsweise Nxt auf Bter:  Wird mit drei Nachkommastellen gehandelt, aber mit acht Nachkommastellen berechnet und gespeichert.


In der Konfigurationsdatei gibts einen Abschnitt, der die Nachkommastellen definiert, jeweis für base (NXT), counter (BTC) und die rate, zu der das gehandelt wird.

Quote

        <!-- decimals -->
        <decimals>

            <calc>
                <base>8</base>
                <counter>8</counter>
                <rate>8</rate>
            </calc>

            <show>
                <base>8</base>
                <counter>8</counter>
                <rate>7</rate>
            </show>

            <trade>
                <base>3</base>
                <counter>8</counter>
                <rate>7</rate>
            </trade>

        </decimals>



Dann gibt es eine Klasse, die drei Instanzen eines Dezimalstellen-Sets aufnimmt. Das wird beim Start geladen und erzeugt.


Code:

case class Decimals ( calc: DecSet,
                      show: DecSet,
                      trade: DecSet )





Code:
case class DecSet ( decRate: Int,
                    decBase: Int,
                    decCntr: Int,
                    fmtHRtA: String => String,
                    fmtHRtB: String => String) {

  import tradebot.div.tools._

  /* rounding */
  def rndRate(v: Double) = roundDouble(v, decRate)
  def rndBase(v: Double) = roundDouble(v, decBase)
  def rndCntr(v: Double) = roundDouble(v, decCntr)

  /* formatting */
  def fmtRate(v: Double) = format(v, decRate)
  def fmtBase(v: Double) = format(v, decBase)
  def fmtCntr(v: Double) = format(v, decCntr)


  /* highlight the four relevant decimals */
  def fmtHRate(v: Double) = { ... }
}




Jetzt kann ich anderen Klassen zu verschiedenen Zwecken Instanzen dieser DecSet- Klasse übergeben und muß mich nicht mehr um Runden, Formatieren etc. kümmern.

Beispiel

Code:
case class SDBasicTrade ( trdDirection: TTrdDir.TTrdDir,
                          amount: Double,
                          rate: Double) {

  def toStr(decs: DecSet, units: BCUnits) =
      List( TTrdDir.toStr(trdDirection).toUpperCase, decs.fmtBase(amount),
              units.b, "@", decs.fmtRate(rate)).mkString(" ")
}



Jetzt kann ich sehr schnell und einheitlich eine Ausgabe auf die Konsole erzeugen:


Code:

   val trade = SDBasicTrade ( trdDirection = tdBuy,
                                           amount = 1,
                                           rate = 0.01 )

   println("executing trade -> " + trade.toStr(decs.trade, ... )
   logic.executeTrade(trade)




So, die ganzen Vorarbeiten sind natürlich etwas länglich, aber wenn sie gemacht sind, kann ich alle Dezimalstellen einheitlich runden und formatieren. Und muß für ein anderes Handelpaar an einer anderen Exchange nur ein paar Zahlen in einer Konfigurationsdatei ändern.
Pages: « 1 2 3 4 5 6 7 8 9 [10] 11 »  All
  Print  
 
Jump to:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.19 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!