Zum Inhalt springen

Interessensabfrage: Wer möchte selber einen Tradingbot erstellen?


Jokin

Empfohlene Beiträge

17 minutes ago, Jokin said:

Au weia - mit Zeigern arbeiten? Das hab ich im Studium gehasst - das war schon enorm fehleranfällig seinerzeit.

Das ist Übungssache. Wenn man sich erst einmal daran gewöhnt hat, nervt es einen bei Sprachen ohne Zeigern, dass man es nicht sehen kann, ob ein Objekt jetzt als unveränderbarer Wert oder als Objekt, dessen Inhalte man ändern kann, übergeben wird.

Unter der Oberfläche arbeiten PHP, Python etc ja auch alle mit Zeigern, sie verstecken es nur vor dem Programmierer. Das ist einerseits unbestreitbar bequem(er), andererseits IMHO immer wieder auch "undeutlicher".

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 9 Stunden schrieb PeWi:

Man könnte jetzt noch darüber diskutieren, ob die JSON-Funktionen der jeweiligen Programmiersprache diese Zeichenketten wieder ins passende Binärformat zurückkonvertieren sollten.

Bekommt man denn in PHP auch nur Zeichenketten?

JSON kommt ja von Javascript, wo nicht viel Heckmeck um Datentypen gemacht wird. Wenn auch Binance die Zahlen als Zeichenketten liefert, dann sollte der Empfänger doch so früh wie möglich wieder Zahlen daraus machen. Ich überlege also, ob ich nicht vielleicht den API-Client entsprechend ändere, so dass er mir immer gleich Zahlen gibt. Das wäre wirklich einfacher.

Link zu diesem Kommentar
Auf anderen Seiten teilen

1 hour ago, Herr Coiner said:

 Ich überlege also, ob ich nicht vielleicht den API-Client entsprechend ändere, so dass er mir immer gleich Zahlen gibt.

Sei mir nicht böse, aber das ist keine gute Idee. Jedesmal, wenn der API-Client auf Github verändert wird - seien es Bugfixes, Erweiterungen oder EInpflegen von API-Änderungen bei Binance - musst du deine Änderungen per Hand wieder nachziehen oder auf die neue Version verzichten.

Behalte alle Konvertierungen in deinem Source, damit du beim API-Client jederzeit problemlos Updates verwenden kannst.

JSON ist absichtlich ein Austauschformat des kleinsten Nenners, weil es dann auf jedem System und mit jeder Sprache funktioniert - um den Preis einer gewissen Unbequemlichkeit.

  • Like 1
Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 2 Stunden schrieb Herr Coiner:

Bekommt man denn in PHP auch nur Zeichenketten?

JSON kommt ja von Javascript, wo nicht viel Heckmeck um Datentypen gemacht wird. Wenn auch Binance die Zahlen als Zeichenketten liefert, dann sollte der Empfänger doch so früh wie möglich wieder Zahlen daraus machen. Ich überlege also, ob ich nicht vielleicht den API-Client entsprechend ändere, so dass er mir immer gleich Zahlen gibt. Das wäre wirklich einfacher.

PHP ist da total unkompliziert:

<?php
$foo = "3nix";
$bar = 4;
echo $foo + $bar;
?>

Die Ausgabe ist "7"

Wenn der Programmierer zu einem String etwas hinzuaddiert, dann konvertiert PHP von allein den String in eine Zahl so gut es geht.

 

Bearbeitet von Jokin
Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 21 Minuten schrieb Jokin:

PHP ist da total unkompliziert: [...]

Wenn der Programmierer zu einem String etwas hinzuaddiert, dann konvertiert PHP von allein den String in eine Zahl so gut es geht.

Boah, noch frecher als Javascript, was immer noch meine Lieblingssprache ist :wub:.

Dieses Go geht mir schon langsam auf den Keks... nicht mal etwas wie

a = test ? 1 : 2;

gibt es da. Man muss es umständlich notieren:

if test {
  a = 1
} else {
  a = 2
}

Mittelalter oder was? Dachte erst Go ist eine coole, moderne Sprache.

Bearbeitet von Herr Coiner
  • Thanks 1
Link zu diesem Kommentar
Auf anderen Seiten teilen

Ich würde da gern einen kleinen Unterschied anmerken:

Für Anfänger ist die Langform deutlich einfacher nachvollziehbar und erlernbar.

Ich benutze nie die Kurzform.

Da ich eh meist mit Copy-Paste programmiere stört der längere Code auch nicht. Zumal auch in meinen anderen Projekten die meiste Tipperei für Kommentierungen drauf geht.

Link zu diesem Kommentar
Auf anderen Seiten teilen

2 hours ago, Jokin said:

Für Anfänger ist die Langform deutlich einfacher nachvollziehbar und erlernbar.

Das stimmt natürlich.

2 hours ago, Jokin said:

Ich benutze nie die Kurzform.

Das kommt bei mir auf die Situation an. Wenn das eine für den Programmfluss wichtige Verzweigung ist, dann auf jeden Fall ausführlich. Wenn es eine unbedeutende Verzweigung in einer sowieso schon längeren Funktion ist, dann nehme ich gerne die Kurzform, weil mir dann die Übersicht über das  ganze wichtiger ist.

Bearbeitet von PeWi
  • Like 1
Link zu diesem Kommentar
Auf anderen Seiten teilen

Am 16.1.2019 um 22:33 schrieb Jokin:

Dennoch starte ich meinen Versuch nun bei Bruchteilen von BNB und eben jenen 10 ETH. Ich bin gespannt wie der Verlauf sein wird und wann sich das dann eingependelt hat.

Da lediglich Limit-Order gesetzt werden und keine Market-Order dürfte sich das noch recht lange hinziehen. Grob überschlagen wird es wohl ca. zwei Wochen dauern.
Zur Dokumentation nehme ich mal die aktuellen Kurse hier auf:
ETH: 123,33 USD
NEO: 7,76 USD

XLM: 0,107185  USD
IOTA: 0,304484  USD
BNB: 6,12 USD
XRP: 0,327879 USD 
ADA: 0,044706 USD

Aktueller Portfoliowert somit: ca. 1233 USD.

Minimal-Ziel muss es sein am Jahresende doppelt so viel Gewinn zu machen wie durch das reine HODL der 10 ETH entstanden wäre damit die Spekulationssteuer bezahlt werden kann.
(natürlich hängt das auch vom Kursverlauf des ETH ab ...)

Nun läuft dieser "Workshop"-Bot ca. 3 Tage und einfach mal ein erster Wasserstand was aus dem Bot für diejenigen wurde, die die Lektionen mit durchgearbeitet hatten und den Bot mit 10 ETH an die Arbeit schickten:

16.01.2019 - Start des BalanceBots:
10 ETH @ 123,33 USD (IST: unendlich % des Gesamt-Coinwertes, SOLL: 25%)
0 NEO @ 7,76 USD (IST: 0%, SOLL: 19%)
0 XLM @ 0,107185  USD (IST: 0%, SOLL: 18%)
0 IOTA @ 0,304484  USD (IST: 0%, SOLL: 17%)
0 BNB @ 6,12 USD (IST: 0%, SOLL: 16%)
0 XRP @ 0,327879 USD  (IST: 0%, SOLL: 15%)
0 ADA @ 0,044706 USD (IST: 0%, SOLL: 14%)
Gesamt-Portfoliowert: 10 ETH, also ca. 1233 USD (Kurse aus Coinmarketcap)

Minimal-Ziel muss es sein am Jahresende doppelt so viel Gewinn zu machen wie durch das reine HODL der 10 ETH entstanden wäre damit die Spekulationssteuer bezahlt werden kann.

Zwischenzeitlich arbeitet er an der Ausbalancierung, am Code habe ich nichts geändert und auch an den Einstellungen nichts.

20.01.2019 - 4 Tage nach Start des BalanceBots:
7,21 ETH @ 121,13 USD (IST inkl. openOrder: 211% des Gesamt-Coinwertes, SOLL: 25%)
8,32 NEO @ 7,68 USD (IST inkl. openOrder: 16,7%, SOLL: 19%)
401 XLM @ 0,1056  USD (IST inkl. openOrder: 15,1%, SOLL: 18%)
170 IOTA @ 0,3056  USD (IST inkl. openOrder: 13,7%, SOLL: 17%)
3,2 BNB @ 6,53 USD (IST inkl. openOrder: 10,0%, SOLL: 16%)
270 XRP @ 0,3248 USD  (IST inkl. openOrder: 25,4%, SOLL: 15%)
1,65 tsd. ADA @ 0,043 USD (IST inkl. openOrder: 19,1%, SOLL: 14%)
Gesamt-Portfoliowert: 10,02 ETH, also ca. 1213 USD (Kurse aus Coinmarketcap)

... nur leichte Kursveränderungen - während des Aufbaus ganz gut.
Schön zu sehen, dass ADA und XRP deutlich übergewichtet sind und weit über das SOLL hinausgeschossen sind. Das liegt daran, dass die Basiswährung ETH noch wesentlich weiter weg vom SOLL-Wert ist und der Bot versucht auch ETH möglichst schnell ins Ziel zu bringen. Im Idealfall ist jeder Coin und die Basiswährung gleich weit entfernt vom SOLL-Wert.

Pro Tag schafft der Bot also ca. 1 ETH auf die anderen Coins zu verteilen. Bei den gesetzten "25%" müsste es darauf hinauslaufen, dass 2 ETH an der Seitenlinie bleiben während 8 ETH auf die Coins verteilt sind.
Also vermutlich noch ca. 5 weitere Tage bis sich ein erstes Gleichgewicht eingestellt hat.

Ich poste dann auch mal das Diagramm auf dem man gut sehen kann wie sich die Bestände entwickelt haben. Ab dem ausbalancierten Zustand würde ich alle paar Tage mal einen Trade erwarten falls mal ein Coin gegenüber den anderen im Kurs stark abweicht.

  • Thanks 1
  • Like 1
Link zu diesem Kommentar
Auf anderen Seiten teilen

So, nach nun 10 Tagen hat sich mein 3. Bot fast ausbalanciert. 

Die Diagramme kommen später noch nach ...

... jedoch gab es neue Erkenntnisse:

Erkentnis 1:

Bei einem Budget von 200 USDT im USDT-Markt braucht es Kursschwankungen von 15-20% damit was passiert. ... die Umstellung auf 1,3 ETH führt zu notwendigen Kursschwangungen von nur noch 3-4%, was zu deutlich mehr Bewegung führen sollte.

Erkenntnis 2: 

Ein Budget von 0,55 ETH führt zu notwendigen Kurs-Schwankungen von 6%, die kommen zwar alle paar Tage, aber dennoch recht selten.

Erkenntnis 3:

Ein Budget von 10 ETH führt dazu, dass Kursschwankungen von 1-2% ausreichen um den Bot zum häufigen Setzen von Order zu bringen.

Erkenntnis 4:

Beide Bots, die keine weiteren Ref-Einnahmen bekommen, haben ihre ETH vermehren können. Langzeitergebnisse kann ich noch nicht liefern. Bis Ende Januar wird der 10-ETH-Bot völlig eingependelt sein und Ende Februar werde ich wissen wieviel Gewinn er erwirtschaften konnte ... ich gehe mal von vorsichtigen 2-3% aus, also aus derzeit knapp 10,1 ETH sollten da 10,4 ETH zu sehen sein.

Am Programmcode gibt es eine kleine Änderung:

Bisher kommt es in einem Lauf vor, dass erst eine SELL-Order erstellt wird, diese dann jedoch aus Balancierungsgründen wieder gelöscht wird. Das werde ich mit einem Update auf Github (am Sonntag oder so) unterbinden - diese SELL-Order soll mindestens ein Intervall (eine Stunde) stehen bleiben. Weitere Miniänderungen sind nur Darstellung und für die Auswertung.

Bearbeitet von Jokin
  • Thanks 1
Link zu diesem Kommentar
Auf anderen Seiten teilen

So, nun hab ich auch die Diagramme dazu erzeugt.

Zuerst mein Bot, der mit nur 0.55 ETH läuft, also weniger als 100 USD im Portfolio verwaltet:

0.55-ETH.png.109d46376e78e58d53c3cfe48061fc4f.png

Zu sehen gibt es dort wie der Bot um den 22.01. herum BNB verkaufte, da BNB im Kurs stieg.

Durch diesen Verkauf hatte er zu viele ETH und wollte NEO kaufen - das führte zum Schwingen, Order angelegt und direkt wieder gelöscht.
Ca. am 23.01. fiel der BNB-Kurs soass der Bot dann anstatt Neo doch lieber BNB kaufte.
Am 24.01. hat er nach gestiegenem BNB-Kurs BNB wieder verkauft und wollte doch wieder NEO kaufen.
Im weiteren Verlauf stieg der NEO-Kurs und der Bot hat keinen Sinn mehr darin gesehen NEO zu kaufen.
Seit dem 25.01. steigt BNB schon wieder. Es dauert aber noch recht lange bis ein Verkauf vorgenommen wird, da prozentual eh schon zu viel ETH da sind. Vermutlich wird erst ADA gekauft bevor BNB verkauft wird.

Wie im vorherigen Beitrag geschrieben: Die rote Linie zeigt den Wert des Gesamt-Portfolios und der ist stetig steigend, was jedoch im Wesentlichen dem BNB-Kurs geschuldet ist.

Und nun zu meinem öffentlichen Portfolio:

10-ETH-grob.png.78bb26751963ac95f42166d29c62d4c2.png

Hier ist erstmal im Groben zu sehen, wie die 10 ETH stetig abnehmend auf die anderen Coins umverteilt werden.

Im Kleineren Maßstab sieht das dann so aus:

10-ETH-fein.png.4f3f11d1b60cf2fb9530d6589ba10942.png

Auch hier von oben kommend der abnehmende ETH-Bestand und von unten kommend die Coin-Bestände.

Da für alle Coins immer fleißig BUY-Order eingestellt wurden, diese aber nicht immer erfüllt wurden, haben sich die Bestände unterschiedlich entwickelt.
Auch hier dem stetig steigenden BNB-Kurs zu verdanken, dass weit weniger BNB gekauft worden sind als andere Coins.

Im oberen Bild habe ich die prozentuale Ziel-Verteilung eingezeichnet, dort soll sich das Portfolio am Ende sammeln.

Da durch die 10 ETH das Portfolio groß genug ist um auch 1%-Kursunterschiede aktiv auszugleichen, erwarte ich, dass ab Anfang Februar alle Kurse in den Zielbereichen liegen werden und dort recht gut gehalten werden. Gleichzeitig erwarte ich, dass der BalanceBot permanent irgendwelche Order im Orderbuch offen haben wird, die auch immer mal wieder erfüllt werden und sich über die Differenz von niedrigem Kaufpreis und hohem Verkaufspreis "zwangsläufig" ein stetig steigender Gesamt-Portfoliowert ergeben wird.

Dass derzeit der Gesamtportfoliowert steigt ist nicht der Verdienst des Balancebots sondern dem steigenden Kurswert von BNB geschuldet - gerade in der Anfangsphase des Ausbalancierens ist es wahrscheinlicher, dass erstmal der Gesamt-Portfoliowert sinkt als dass er steigt. Die Erwartungen sollten dementsprechend bei "ca. 0%" liegen und da tendenziell eher im "ca. -0%"-Bereich 😉
Sobald das Ganze einmal ausbalanciert ist, sollte sich mit jedem Trade ein positives Ergebnis einstellen ... außer bei extremen Kursveränderungen.

 

  • Like 1
Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 19 Stunden schrieb Jokin:

Seit dem 25.01. steigt BNB schon wieder. Es dauert aber noch recht lange bis ein Verkauf vorgenommen wird, da prozentual eh schon zu viel ETH da sind. Vermutlich wird erst ADA gekauft bevor BNB verkauft wird.

Ok, inhaltlich ist die Prognose eingetreten.
Zeitlich jedoch hab ich mich voll verhauen, denn heute früh bereits war es soweit. Erst ADA gekauft und 2 Stunden später hat der Bot dann BNB verkauft.

0.55-ETH.png.3edaf67f16cb3f01e8c4ba043a610565.png

NEO fällt derzeit wieder und das brachte den Bot  ...
.... um 12 Uhr auf die Idee NEO zu kaufen -> BUY-Order angelegt ...
.... um 13 Uhr bemerkte der Bot, dass er zu viele NEO hatte, die BUY-Order war noch nicht erfüllt, also löschte er sie weg.
.... um 14 Uhr passte ihm das Gleichgewicht wunderbar und er tat nix.

Derzeit sind keine Order in diesem Bot offen.

Falls NEO noch weiter fällt, wird NEO dann doch mal nachgekauft.

Die rote Linie ist weiterhin leicht ansteigend und das bleibt hoffentlich so ...

Bearbeitet von Jokin
Link zu diesem Kommentar
Auf anderen Seiten teilen

9 minutes ago, Jokin said:

Die rote Linie ist weiterhin leicht ansteigend und das bleibt hoffentlich so ...

Da dieser Bot nicht gegen einen Stablecoin tradet, sondern gegen ETH, das genauso rauf und runter geht, sollte die rote Linie weiterhin leicht ansteigend bleiben;
es sein denn, einer deiner Coins NEO, ADA oder BNB fängt zu schwächeln an.

Leider garantiert das Rebalancen keine absoluten Gewinne, aber immerhin relative, d.h. gegenüber Buy-and-Hold der gleichen Coins sollte man auf Dauer immer besser (und das mit wachsendem Tendenz) dastehen.

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 19 Minuten schrieb PeWi:

Da dieser Bot nicht gegen einen Stablecoin tradet, sondern gegen ETH, das genauso rauf und runter geht, sollte die rote Linie weiterhin leicht ansteigend bleiben;
es sein denn, einer deiner Coins NEO, ADA oder BNB fängt zu schwächeln an.

Leider garantiert das Rebalancen keine absoluten Gewinne, aber immerhin relative, d.h. gegenüber Buy-and-Hold der gleichen Coins sollte man auf Dauer immer besser (und das mit wachsendem Tendenz) dastehen.

Ja, das ist korrekt.

Der HODLer kann sinkenden Kursen leider nur zuschauen und nach 12 Monaten bleibt er auf dem Verlust sitzen ohne dass er steuerliche Gewinne gegenrechnen kann.

Der TRADer kann ebenso mit Verlust dastehen, jedoch im günstigen Fall mit mehr ETH als der HODLer und dessen Verluste kann er gegen andere Gewinne verrechnen.
... im ungünstigen Fall hat er durch das Traden seinen Coinbestand reduziert und steht ärmer als der HODLer da, kann seine Verluste aber steuerlich geltend machen.

Im Gewinnfall steht der HODLer erstmal besser da, denn seine Gewinne sind nach 12 Monaten steuerfrei. Der TRADer hingegen muss umso mehr Coins erwirtschaften um seiner Einkommensteuerpflicht nachzukommen. Schafft der Trader dies und kann die zusätzlichen Freecoins für das Generieren weiterer Gewinne bis zum Steuerbescheid nutzen, dann hat er die Nase nachhaltig vorn.

Leider wird das recht schnell beliebig kompliziert und es lässt sich nicht genau ermitteln was das Beste ist ohne mit Sicherheit in die Zukunft zu schauen. 

Link zu diesem Kommentar
Auf anderen Seiten teilen

1 hour ago, Jokin said:

Leider wird das recht schnell beliebig kompliziert und es lässt sich nicht genau ermitteln was das Beste ist ohne mit Sicherheit in die Zukunft zu schauen. 

Ich wäre schon damit zufrieden, wenn ich es ungenau ermitteln könnte. :P

  • Haha 1
Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 5 Minuten schrieb PeWi:

Ich wäre schon damit zufrieden, wenn ich es ungenau ermitteln könnte. :P

Mit folgendem Gedanken beschäftige ich mich derzeit:

- über worldcoinindex stündlich die Rangfolge der TOP 30-Coins (nach Marketcap) ermitteln
- Ausrechnen wieviel Coins ins Portfolio genommen werden können damit 2%-Kursveränderungen zum Einstellen von Order reichen.
- Wenn es denn 20 Coins sein dürfen, dann die TOP-20 heranziehen (ansonsten entsprechend weniger oder mehr)
- Dynamisch den TOP-20-Coins prozentuale Werte zuweisen von ca. 10% für #1-Coin bis runter auf ca. 1% für #20-Coin
- Coins #21 bis #30 werden auf 0% gesetzt

=> Damit würde ich mir sparen in der Config für jeden Coin eine prozentuale Verteilung statisch festzulegen.
=> Damit würden im Marketcap steigende Coins im Portfolio hinzugekauft
=> Damit würden im Marketcap fallende Coins aus dem Portfolio nach und nach rausgeschmissen
=> Damit würden #21-#30-Coins durch die "0%"-Setzung lange genug vom Bot rausverkauft werden ohne dass durch das Rausfallen aus den TOP20 der Coin in Vergessenheit geraten würde.

Das sollte natürlich konfigurierbar sein - entweder man definiert die Coins selber manuell was man wie halten möchte (gerade bei kleinen Budgets wichtig) oder über ein config-Parameter holt sich der Bot die Rangfolge der Coins und balanciert dementsprechend das Portfolio aus.

 

Was habe ich übersehen? Erzeuge ich dadurch zusätzliche Risiken?

... wobei das sicher zu etwas Unübersichtlichkeit führt. Auch muss natürlich geschaut werden, dass diese Coins auf der Exchange auch gegen die gegebene Währung handelbar sind. Hmm, Ideen das zu vereinfachen damit es leichter nachvollziehbar ist?

 

 

  • Like 1
Link zu diesem Kommentar
Auf anderen Seiten teilen

Um Schwingungen zu vermeiden, könnte man ein bisschen Hysterese einbauen:

Bei z.B. 20 Plätzen für Coins -  Coin erst abverkaufen, wenn er die Top 30 verlässt.
Ersetzen dann durch den besten, noch nicht verwendeten  aus den Top 20. (Bei 20 Plätzen und einem Coin, der nach unten durchrutscht, muss ja mindestens einer der Top 20 noch nicht im Portfolio sein.)
Ggfs Top 25 statt Top 30, wenn weniger Hysterese reicht. Müsste man ggfs ausprobieren.

Erfahrungsgemäß schwingen kleinere Coins stärker als große - insofern verschenkt man vermutlich merklich Rendite, wenn man die Coins so stark unterschiedlich gewichtet. Statt der Staffelung 10:1 nur 5:1 oder gar nur 3:1?

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hmm, dann müsste ich die Platzierungen wieder in der Datenbank ablegen und das macht's recht kompliziert.

Kleinere Coins dürften an sich nicht in die TOP20 geraten - und wenn, dann kommen die nicht innerhalb einer Stunde mehrere Plätze rauf und wieder runter. Und wenn das auch der Fall ist, dann würde ein Kauf eh nicht so schnell passieren, da der 24h-low-Wert so niedrig ist, dass die BUY-Order entsprechend weit weg ist.

Weiterhin ist meine Hoffnung, dass der Coin bei Eintritt in die TOP-20 gekauft wird und beim Wandern nach oben nich sofort wieder verkauft wird sondern sich eine Art "Trailing" ergibt.

Derzeit sehe ich das bei BNB - den bekomme ich in einem Bot gerade nicht nachgekauft, weil der Kurs so abnormal nach oben rennt. Im anderen Bot hingegen wird der nun stückweise verkauft - was ja im Sinne der Strategie ist.

(die Bots müssten sich die eher untereinander zuschieben ... :D )

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ich hab mir mal kurz eine Excel-Datei erstellt um abzuschätzen wie diese dynamische Kapitalverteilung aussehen könnte:

Dabei gehe ich erstmal von 100 USDT aus, die in Coins verteilt werden sollen.
20% sollen zusätzlich an der Seitenlinie liegen => also braucht es ein Gesamtbudget von 120 USDT
Da das minimale Order-Volumen bei 10 USDT liegt, muss ich auf "30%" raufgehen, die der Bot braucht um auf Kursveränderungen mit Order zu reagieren.

Damit kann ich mir gerademal 3 Coins leisten, die bei 43,33%, 39% und 17,66% verteilt werden. (Je höher der Rang, desto mehr Gewichtung soll der Coin haben)

Unbenannt.png.a100c454bd783d2d39a9293698701682.png

Wechsel ich in den ETH-Markt und sage, dass ich anstatt 100 USDT auf 1 ETH gehe, dann ergibt sich, dass ich mir 14 Pairs leisten kann.

Unbenannt2.png.9b0a1a00e7c5ff233f90eb8cd1f400d9.png

Allerdings sind die 30% Kursveränderung kaum realistisch, der Bot würde fast nie Order erstellen.

Realistischer sind Kursveränderungen von 5% innerhalb weniger Tage, also von 30% auf 5% reduzieren, was die Anzahl der möglichen Coins wieder auf die TOP4 einschränkt. (30%, 27%, 24,3% und 18,7%).
(mein 0,55-ETH-Bot kann dementsprechend nur 3 Coins sinnvoll ausbalancieren, das macht er ja gerade)

Unbenannt3.png.01f8f7bdc7d0129153fc30272d39f6e6.png

Erst wenn 20 ETH als Gesamt-Coinwert ausbalanciert werden sollen kann ich gut erreichbare "2%" Kursdifferenz angeben auf die er reagieren soll und mir stehen dann 15 Coins zur Verfügung, die ausbalanciert werden:

Unbenannt4.png.ccf7fd05b72735712aa5da27edbd4e2b.png

 

... ja, ich denke so sieht das ganz sinnvoll aus :-)

Worldcoinindex ist für meine Zwecke nicht zu gebrauchen, daher hab ich mich vorhin mal mit der API von Coinmarketcap befasst. Das klappte ziemlich gut. Die Rangfolge der TOP100-Coins habe ich nun vorliegen.
Der Abgleich mit den bei Binance handelbaren Coins war auch nicht sonderlich schwer.

Nun habe ich also die Coins, die zum Ausbalancieren in Frage kommen und ich hänge an der prozentualen Verteilung, die ich nun mit Excel für verschiedene Fälle ausprobiert habe.

Die Formel ist nun auch recht einfach.

Lediglich der letzte Coin braucht noch Handarbeit - ich denke, ich schmeiße dessen Wert weg und addiere ihn einfach auf den Coin auf Rang 1 - der ist dann halt etwas dynamischer mit jedem Durchlauf, was aber durchaus mehr Bewegung reinbringt.

Denn gerade die Bewegung, das Setzen von niedrigen BUY-Order und hohen SELL-Order ist es was den Gesamtportfoliowert mit der Zeit steigen lässt.

 

Ideen? Anmerkungen? Kritik?

 

  • Like 1
Link zu diesem Kommentar
Auf anderen Seiten teilen

Und weiter geht's ...

... nachdem ich gestern das Ganze mal im Code umgesetzt hatte, hab ich nochmal das Excel-Dokument nachgezogen damit ich auf einem Blick kontrollieren kann wie der Balancebot die prozentuale Verteilung vornimmt.

Das ist zugleich auch ein schönes Planungstool um zu sehen mit welchem Budget und welchen Einstellungen sich wieviele Coins sinnvoll ausbalancieren lassen:

Unbenannt.thumb.png.a404f7344abbc2a72a5c9ee961ad87ff.png

Mit meinen 10 ETH und einem Anspruch,
dass bei 2%-Kursänderungen ausbalanciert kann und
25% auf der Seitenlinie
und einer 10%-Degression, also einer Höhergewichtung der TOP-Coins
... wird der Bot das Guthaben auf 10 Coins aufteilen.

Der 10. Coin hat einen zu geringen Anteil, der wird zum Schwingen führen, das nehme ich mal in Kauf, da jede weitere Sonderbehandlung im Programm nur umständlich realisierbar ist. Dessen prozentuale Aufteilung ändert sich eh immer mal wieder mit dem Gesamtbudget, welches selbst permanent mit den Kursen schwanken wird.

Die Excel-Datei kann ich kurzfristig zur Verfügung stellen (balancebot@gmx.de), nachdem ich das umgesetzt und ausgiebig getestet habe, kommt das auch bei Github mit rein.

Zeitlich plane ich das so:
... Bugfixes zum Stand der Lektionen bis Ende Januar als Download auf GitHub (ich nenne das "Version 1.2 stable")
... Testphase des Codes über den gesamten Februar mit meinem 10-ETH-Bot
... Die neue Coinranking-Systematik wird eine neue Version werden. ("Version 2.1 unstable")
... dazu bereite ich ein weiteres Portfolio vor, das werden wohl nochmal 10 ETH
... der einmonatige Testbetrieb könnte dann bis Ende März abgeschlossen sein.

 

  • Like 1
Link zu diesem Kommentar
Auf anderen Seiten teilen

Es würde mich schon reizen, für deinen Balancebot ein Backtest-Script zu schreiben und das dann hier zum Herumspielen zur Verfügung zu stellen.
Leider fehlt mir im Moment die freie Zeit dazu.

Zudem nimmt dein Balancebot ständig an Komplexität zu, es wird also immer aufwendiger, ihn zu simulieren.

Sobald die Coinranking-Systematik auch noch drin ist, wird es kaum mehr möglich sein; zumindest ist mir nichts bekannt, dass man von Coinmarketcap das Coinranking für die Vergangenheit zumindest tagesgenau bekommen kann. (Falls doch, würde ich mich über Hinweise freuen.)

  • Like 1
Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 1 Stunde schrieb PeWi:

Sobald die Coinranking-Systematik auch noch drin ist, wird es kaum mehr möglich sein; zumindest ist mir nichts bekannt, dass man von Coinmarketcap das Coinranking für die Vergangenheit zumindest tagesgenau bekommen kann. (Falls doch, würde ich mich über Hinweise freuen.)

Über die API bekommst Du das nicht. Es gibt Webarchive, die Snapshots der Seite enthalten, da kann man sich zumindest mit annähern. Aber der Aufwand dürfte den Nutzen bei weitem übersteigen.

Ich schätze mal den Aufwand bei deutlich über 40 Stunden ein - und wenn ich da mal nur einen Stundensatz von 50 Euro annehme, hauste da 2.000 Euro raus und hast lediglich die Information in der Hand wie das in der Vergangenheit ausgesehen "hätte".

Da nehm ich lieber die 2.000 Euro in die Hand und schmeiße die in ein Testaccount und schau was damit passiert.
(gestern abend erfolgt, der Testaccount ist mit 20 ETH gestartet)

vor 1 Stunde schrieb PeWi:

Zudem nimmt dein Balancebot ständig an Komplexität zu, es wird also immer aufwendiger, ihn zu simulieren.

Ja, sorry - das war ja auch schon das Problem bei dem Farmer-Skript für den ProfitTrailer. Da der PT bei fallenden Kursen nicht funktioniert hab ich das Projekt nun erstmal auf Eis gelegt.

vor 1 Stunde schrieb PeWi:

Es würde mich schon reizen, für deinen Balancebot ein Backtest-Script zu schreiben und das dann hier zum Herumspielen zur Verfügung zu stellen.
Leider fehlt mir im Moment die freie Zeit dazu. 

Nee, lass mal.

Ich habe nun vier Accounts damit laufen, das sollte ganz gut repräsentativ werden über die nächsten Monate.

Account 1:
Ca. 0,55 ETH (waren mal ca. 100 USDT vor der Umstellung auf ETH), hier laufen keine Ref-Boni rein, also repräsentativ mit der Entwicklung.
... bei 0,55 ETH werden zu selten Order angelegt, da sich erst Kursänderungen von ca. 8% auf die Neubalancierung auswirken.

Account 2:
Ca. 1,35 ETH, hier laufen Ref-Boni rein, daher nicht repräsentativ, da hier eh immer ein kleines bisschen hinzukommt.
Allerdings zeigt sich auch hier, dass die nötigen Kursveränderungen von ca. 3% lediglich zu wenigen Order je Tag führen

Account 3:
Ca. 10 ETH, auch repräsentativ da keine Ref-Boni reinkommen
Hier braucht es gerademal 1% Kursveränderungen. Damit ist der Account recht aktiv, es werden nun mit jedem Durchlauf Order eingestellt.

Account 4:
Ca. 20 ETH, hier teste ich die dynamische prozentuale Aufteilung nach CoinmarketCap-Ranking.
Den hab ich am 29.01.2019 gestartet und der ist nun dabei sich auszubalancieren. Diese Anfangsphase wird aufgrund der größeren Anzahl auszubalancierenden Coins lediglich zwei oder drei Tage dauern, danach dürfte er in den eingeschwungenen Zustand übergehen.
Auch hier plane ich mit 2%-Kursänderungen ausreichend Order absetzen zu können, die dann durch die Volatilität der Kurse ausgeführt werden.

Da der Markt derzeit absolut feindlich für jeden Bot ist, bin ich froh nun mehrere Testaccounts am Laufen zu haben, denn was sich jetzt nicht beweist und wenn das Gesamtportfolio nicht "gestärkt" aus der Krise rauskommt, dann muss ich das Projekt beerdigen :-)
... wobei vollkommen klar ist, dass der Gesamt-Portfoliowert mit dem Gesamtmarkt fällt - er sollte nur nicht stärker fallen als der Markt und später stärker steigen als der Markt.

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

23 hours ago, Jokin said:
On 1/30/2019 at 8:46 AM, PeWi said:

Sobald die Coinranking-Systematik auch noch drin ist, wird es kaum mehr möglich sein; zumindest ist mir nichts bekannt, dass man von Coinmarketcap das Coinranking für die Vergangenheit zumindest tagesgenau bekommen kann. (Falls doch, würde ich mich über Hinweise freuen.)

Über die API bekommst Du das nicht. Es gibt Webarchive, die Snapshots der Seite enthalten, da kann man sich zumindest mit annähern. Aber der Aufwand dürfte den Nutzen bei weitem übersteigen.

Unter https://coinmarketcap.com/de/historical/ kann man zumindest einmal pro Woche das Coinranking nachschauen.

23 hours ago, Jokin said:

Ich schätze mal den Aufwand bei deutlich über 40 Stunden ein - und wenn ich da mal nur einen Stundensatz von 50 Euro annehme, hauste da 2.000 Euro raus und hast lediglich die Information in der Hand wie das in der Vergangenheit ausgesehen "hätte".

Da nehm ich lieber die 2.000 Euro in die Hand und schmeiße die in ein Testaccount und schau was damit passiert.

Wenn ich tatsächlich für jede freie Stunde entsprechende Projekte an Land ziehen könnte, dann hättest du vollkommen recht.
Aber ich arbeite daran, dass es irgendwann mal so funktioniert. :D

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

  • 1 Monat später...

Wow, ich möchte mich hiermit für dein Engagement bedanken @Jokin ! Ich habe die Lektionen zwar erst zur Hälfte gelesen, aber ich empfinde es als sehr motivierend.

Nachdem ich meinen ersten Versuch (u.a. mit der Software AutoIt) vor etwa einem Jahr auf Eis gelegt hatte (ich war nur soweit gekommen, Preis-Daten zu sammeln und Graphen zu zeichnen), wollte ich noch einen neuen Versuch mit C# wagen, das ich schon seit einigen Monaten nebenbei mit einem Buch lerne. Durch deine Erklärungen habe ich das Gefühl, dass ich auch den von mir entdeckten Binance-C#-API-Client besser verstehe...auch wenn ich noch ziemlich am Anfang stehe.

Hast du eigentlich die in deinem Tutorial verwendete PHP-API komplett gelesen, um sicher zu sein, dass alles mit rechten Dingen zu geht? Ich gehe davon aus, dass du sie nicht selbst geschrieben hast, zumindest habe ich dazu keinen Hinweis gefunden... Und für wie sinnvoll hälst du es (wie viel Arbeitsersparnis ist es), eine solche fertige Lösung zu verwenden, im Vergleich dazu, eine entsprechende Funktionalität selbst zu entwickeln?

Link zu diesem Kommentar
Auf anderen Seiten teilen

Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde Dich hier an.

Jetzt anmelden
×
×
  • Neu erstellen...

Wichtige Information

Wir haben Cookies auf Deinem Gerät platziert. Das hilft uns diese Webseite zu verbessern. Du kannst die Cookie-Einstellungen anpassen, andernfalls gehen wir davon aus, dass Du damit einverstanden bist, weiterzumachen.