Trading Bot

  • Hallo Zusammen,

    Ich stehe ja auf Analyse von Datenreihen. Daher habe ich mir ein neues Projekt „ausgedacht“:

    • Erstellen/Programmieren eines TadingBot Systems auf Basis eines Meta Sentimentors!

    Ich kann mich erinnern, dass Irrenhaus so etwas mal angefangen hat, ob das noch aktuell ist kann ich so auf die Schnelle nicht herausfinden. Daher habe ich mal ein neues Thema eröffnen.

    So ein Trading Bot, auf Basis mehrere Indikatoren, ist natürlich nix für den schnellen Gebrauch, da er eine ganze Menge an Parametern hat.


    Hier erstmal ein kleiner Einstieg, ob das alles Sinn macht wird sich noch herausstellen und es wird momentan NUR getestet, nicht gehandelt!

    Die einzelnen Indikatoren liefern Kauf, bzw. Verkaufssignale.

    Die jeweiligen Kauf-/Verkaufssignale werden zu einem Sentiment des jeweiligen Indikators gefasst, dem abfallend (bei Kauf) der jeweilige Wert zugewiesen wird: [100, 95, 90, 85, 80, 75, 70]. Bleibt der Indikator im der Kaufzone wird der Wert von 70 beibehalten.

    Umgekehrt, wenn ein Verkaufssignal erzeugt wird erhält der Senti des Indikators folgende Werte: [0, 5, 10, 15, 20, 25, 30].

    Somit hat man also die Stimmung des jeweiligen Indikators.


    Damit nun alle benutzen Indikatoren zu einem MetaSentiment zusammengefasst werden, wird die Summe aller SenitIndikatoren gebildet und durch die Anzahl der benutzen Indikatoren geteilt.

    Somit erhält man also einen MetaSentiment Indikator, der die Gesamtstimmung angibt. Dieser MetaSenti wird noch auf die letzten 5 Zeitintervalle geglättet um starke Ausreißer zu vermeiden.

    Dieser MetaSenti Indikaror bewegt sich zwischen 0 und 100!

    Ein Kaufsignal des MetaSenti wird erzeugt, wenn > 70, ein Verkauf, wenn < 30.

    Momentan wird mit folgenden Zeitintervallen experimentiert: 1h, 2h, 4h, 6h und 8h.


    Die Coins sind für diesen Test die Top 100 in dem Marktkapitalisierung.

    So, nun meine Frage, hat hier schon jemand etwas ähnliches probiert.


    Gruß,

    Ikarus

  • Ikarus

    Changed the title of the thread from “Tarding Bot” to “Trading Bot”.
  • Die jeweiligen Kauf-/Verkaufssignale werden zu einem Sentiment des jeweiligen Indikators gefasst, dem abfallend (bei Kauf) der jeweilige Wert zugewiesen wird: [100, 95, 90, 85, 80, 75, 70]. Bleibt der Indikator im der Kaufzone wird der Wert von 70 beibehalten.

    Umgekehrt, wenn ein Verkaufssignal erzeugt wird erhält der Senti des Indikators folgende Werte: [0, 5, 10, 15, 20, 25, 30].

    Somit hat man also die Stimmung des jeweiligen Indikators.

    Das ist für mich schwer verständlich - was meinst du damit?


    Geht es um "normale" Indikatoren wie EMA/RSI/... oder um "echte Sentiment-Indikatoren" (wie Twitter-Auswertungen o.ä.?)


    Und wieso willst du einem Indikator einen streng um je 5 abfallenden bzw ansteigenden Wert zuweisen? Müsste sich der Wert nicht abhängig vom weiteren Verlauf des Indikators bestimmen?

  • Das ist für mich schwer verständlich - was meinst du damit?


    Geht es um "normale" Indikatoren wie EMA/RSI/... oder um "echte Sentiment-Indikatoren" (wie Twitter-Auswertungen o.ä.?)


    Und wieso willst du einem Indikator einen streng um je 5 abfallenden bzw ansteigenden Wert zuweisen? Müsste sich der Wert nicht abhängig vom weiteren Verlauf des Indikators bestimmen?

    Hallo,

    Ja, genau es sind handelsübliche Indikatoren ((s/w/e)MA’s, XingMA, etc…)

    Jedem dieser Indikatoren wird je nach Zustand ein Sentimentwert (im Prinzip ein Parallelindikator) zugewiesen.


    Warum ab-, bzw. aufsteigend:

    Nun, wenn ein Indikator ein Signal erzeugt hat, ist der dazugehörige Senti entweder 100 (Kauf) oder 0 (Verkauf). Da ich nun aber nicht abrupt auf 70 (bei Kauf) und 30 (Verkauf) gehen will, nachdem das Signal erreicht wurde, habe ich eine Art "Gedächtnis" eingepflegt.

    Der eigentliche Indikator wird permanent berechnet, jedoch der sich daraus ergebene Senti ist abhängig vom Zeitpunkt der Signalgebung.

    Bleiben wir beim Kauf, somit ist der Senti nach einem weiteren Zeitintervall immer noch im „sehr“ gut Stadium, bis er nach X Ticks auf 70 bleibt (solange nicht ein Verkaufsignal erreicht wird), somit sind auch bei den einzelne Sentis „Stufen“ eingebaut. 70 Bedeutet er befindet sich immer noch im Kaufterrain, aber das eigentliche Signal ist schon etwas her. Insofern kann der MetaSenti in Verbindung anderer Sentis sehr wohl > 70 werden. Das ist der Hintergedanke. Es müssen nicht alle Indikatoren im Kaufbereich sein, es reicht, wenn so viele gute Signale erscheinen, dass die Kaufschwelle des MetaSentis überschritten wird.


    Als Nachtrag:

    Es ist auch noch ein Stopploss eingebaut worden, bei einem anfänglichen tolerieren Verlust von 10% wird dieser SL linear nachgezogen (immer 10% Abstand), wenn sich der Kurs nach oben entwickelt. Ab +/- 0 wird es parabolisch!


    Gruß,
    Ikarus

  • nachdem das Signal erreicht wurde, habe ich eine Art "Gedächtnis" eingepflegt.

    Okay, jetzt verstehe ich es - interessante Idee!


    Frage: Wenn du auf minimal 70 absenkst, wirkt das auf mich so, als würde der Indikator damit immer auf einer zumindest "minimalen Kaufbereitschaft" (bzw Verkaufsbereitschaft) hängen bleiben?


    Ich habe mit so einer Idee noch nie herumgespielt, insofern nimm das jetzt nicht als Kritik, sondern nur als Gedankenspiel - mein erster Ansatz wäre gewesen, bis auf 50 (= "neutral) abzufallen und dann je nach Signal auf 100 (Kauf) oder 0 (Verkauf) zu springen und dann wieder den langsamen Abfall auf 50 (neutral). Oder so ähnlich ... :winking_face:


    Es ist auch noch ein Stopploss eingebaut worden, bei einem anfänglichen tolerieren Verlust von 10% wird dieser SL linear nachgezogen (immer 10% Abstand), wenn sich der Kurs nach oben entwickelt. Ab +/- 0 wird es parabolisch!

    Das klingt so ähnlich, wie wenn du nach dem Erreichen von Break Even auf sowas ähnliches wie 'nen Parabolic SAR (nur ohne Reverse) umschaltest.

    Bleibst du dauer-parabolisch, oder setzt du die Parabel aus, falls der Kurs mal ein Stück seitwärts geht?

  • Hallo,

    Ja, ich hatte auch mit 50 geliebäugelt, bin aber momentan bei den 70/30 geblieben. Bei anderen Indikatoren, die sozusagen in eine neutrale Zone kommen können, wird die 50 mit Sicherheit angewendet. Jedoch habe ich im momentanen Teststadium noch nicht solche Indikatoren dabei.


    Genau, die 70 bedeuten, Indikator ist im Kaufbereich. Aber einer alleine kann nichts ausrichten. Es braucht mehrere Signale um die Kaufschwelle zu erreichen. Manche Indikatoren laufen sozusagen vor!


    Gemäß dem Motto „Apes alone, weak... Apes together, strong.”


    Ich habe übrigens beim MetaSenti die Kaufschwelle auf 75 angehoben und die Verkaufsschelle auf 35. Jedoch wird so gut wie immer der SL das Ausstiegssignal sein!


    Ja, Du hast das Prinzip dieses SL Ansatzes erkannt. Und nein, ich bleibe nicht dauer-para. Das könnte bei einem so kurzen Zeitintervall schnell zu Ausstieg führen (denke ich). Es wird nur parabolisch bei neuem Profitlevel nachgezogen.


    Wie gesagt das ist alles super experimentell und ich habe „Spaß“ daran, ob es aber auch profitabel sein wird… ich glaube es eigentlich nicht.


    Wenn man es noch weitertreiben will, so müsste jeder Coin eine andere Einstellung der Indikatoren haben und man müsste diese Optimieren. Was aber ziemlich viel Arbeit ist und es kann, wenn die Rahmenbedingen nicht gescheit gesetzt sind, zu einer Überoptimierung kommen.


    Denn, beinahe jedes Handelssystem ist profitabel im Backtesting, jedoch versprechen diese Einstellung noch lange kein Garant auf Erfolg in der Zukunft, selbst wenn man einen gewissen Bereich des Optimierens als Training (optimieren) und als Test (Anwenden) setzt.



    Gruß,
    Ikarus

  • Genau, die 70 bedeuten, Indikator ist im Kaufbereich. Aber einer alleine kann nichts ausrichten. Es braucht mehrere Signale um die Kaufschwelle zu erreichen. Manche Indikatoren laufen sozusagen vor!

    Mit einem verwandten Gedanken habe ich mal rumgespielt. Ich wollte die üblichen, festen Schwellen für Indikatoren aufweichen, damit das Signal auch kommt, wenn ein Indikator meiner Mischung sein Soll nicht ganz erreicht, falls dafür ein anderer der Indikatoren besonders gut liegt. D.h. auch da lag der Blick auf dem "Gesamtpaket" und nicht auf dem exaktem Wert jedes Einzelindikators.


    Im Endeffekt habe ich aber keine merklichen Unterschiede in den Backtests bekommen.


    Wenn man es noch weitertreiben will, so müsste jeder Coin eine andere Einstellung der Indikatoren haben und man müsste diese Optimieren. Was aber ziemlich viel Arbeit ist und es kann, wenn die Rahmenbedingen nicht gescheit gesetzt sind, zu einer Überoptimierung kommen.

    Overfitting zu vermeiden ist ziemlich schwierig, damit habe ich auch meine Erfahrungen.

    Falls du jedem Coin eigene Einstellungen geben willst, wird es noch schwieriger.

  • Wenn man es noch weitertreiben will, so müsste jeder Coin eine andere Einstellung der Indikatoren haben und man müsste diese Optimieren. Was aber ziemlich viel Arbeit ist und es kann, wenn die Rahmenbedingen nicht gescheit gesetzt sind, zu einer Überoptimierung kommen.

    Ich habe keine Ahnung und noch nichts in diese Richtung ausprobiert. Von da aus braucht man mich nicht so wirklich voll nehmen.


    Ein Wort zu Twitter: Bisher scheint es so, dass Twitter-Post den Preis hinterherlaufen. Ich schaue mir das gerade an, beziehungsweise baue mir einen Datensatz dazu auf. Wie gesagt, bisher wirkt das eher wenig vielversprechend.


    Warum wird eigentlich mit festen Schwellen gearbeitet? Kann man nicht jeden Indikator binär gestalten und eventuell mit einem linearen Model die Wichtigkeit jedes Faktors miteinbeziehen?

    Eine weitere Idee wäre es die Faktoren immer anhand deren Relation zu den Langzeit-Mittelwert zu normalisieren. Also quasi den 200-Tages-Durchschnitt nutzen und nur entscheiden, in der jetzige Indikator drüber oder drunter liegt. Hieraus kann man ein Signal zum Kauf oder Verkauf berechnen (binär). Dann summiert man die Signale mit dem linearen Model auf und enthält den Score. Alternativ kann man bestimmt die Werte auch anhand des Langzeitverhaltens normalisieren, eventuell einfach über Mittelwert und Standardverteilung des Langzeitdurchschnitts.


    Das schöne an den Ansatz ist, dann man das lineare Model anhand der Zuverlässigkeit der Indikatoren fitten kann. Man sucht sich aus den Preisdaten die Zeitpunkte heraus, bei denen der Preis stark gestiegen oder gefallen ist und versucht über die Indikatoren oder der Vergangenheit genau diesen Anstieg vorher sagen zu können. Streut ein Indikator sehr, wird er ein Modellgewicht nahe 0 annehmen.


    Der einzige Eingriffspunk ist damit nur ab welchen Score man sich für Kaufen oder Verkaufen entscheidet. Auch hier kann man sich die Zuverlässigkeit des linearen Modells zu Hilfe ziehen.


    Das wäre mein spontaner Ansatz, wie gesagt, ohne nennenswerte Erfahrung beim Traden.

  • Eine weitere Idee wäre es die Faktoren immer anhand deren Relation zu den Langzeit-Mittelwert zu normalisieren. Also quasi den 200-Tages-Durchschnitt nutzen und nur entscheiden, in der jetzige Indikator drüber oder drunter liegt. Hieraus kann man ein Signal zum Kauf oder Verkauf berechnen (binär).

    Die Idee mit dem Langzeit-Mittelwert klingt im ersten Moment spannend, haut aber für die meisten Indikatoren nicht hin.


    Beispiele:


    Ein RSI schwankt zwischen (theoretisch) 0 und 100, da ist der ganz lange Langzeitmittelwert wohl um die 50 herum. Kaufen will man aber üblicherweise bei Werten unter 20 (je tiefer, desto besser). Man könnte jetzt z.B. die tiefsten 10 Werte der letzten 200 Tage ermitteln. Damit fällt man aber auch öfters auf die Schnauze, weil die Marktverhältnisse nicht so lange stabil sind. Schau dir den Chart an, selten hat man so lange Aufwärts-, Abwärts- oder Seitwärtstrend, dass man über 200 Tage ermittelte Werte eine Zeitlang erfolgreich weiternutzen könnte.


    Andere Werte wie z.B: MA (SMA, EMA, DEMA, ...) sind geglättete Preisdaten, d.h. sie liegen je nach Kurs höher oder tiefer, da hilft ein 200 Tage-Mittelwert auch wenig. Es sei denn, du tradest auf Wochenbasis, dann mag das gehen. :winking_face:


    Allgemein ist nach meiner Erfahrung das Problem, dass das Tempo der Kursänderungen ständig wechselt, d.h. mal ist eine Indikatoreinstellung zu schnell, mal zu langsam. Und wenn man die in einem Bot automatisch an den Markt adaptieren lassen will, dann ist diese Adaption meistens zu langsam. Bis sich der Bot auf die aktuellen Verhältnisse eingeschwungen hat, sind sie bereits am Ändern.

  • hier die ersten Ergebnisse:

    Na, das schaut doch schon sehr gut aus. .|

    Entspricht auch meiner Erfahrung, dass niedrige Stundenbereiche typischerweise profitabler sind als kürzere Intervalle oder ganz lange.


    Eigentlich sind deine 4h-Ergebnisse schon fast zu gut - nach zweieinhalb Wochen mit 20€ Einsatz 50€ Gewinn zu erzielen, ist "unüblich".


    Vier mal >= 50% Gewinn zu erwischen ist natürlich klasse - am besten beibehalten. :winking_face:


    In deiner Auflistung der Verkaufsgründe fehlen bei den 4h-Trades aber noch 5 Stück, 4+2+51 sind erst 57 und nicht 62?

  • Hallo,

    ich habe den Indikatoransatz für den Bot verworfen. Er hat Kaufsignale generiert, jedoch sind dann die meisten Trades mit Verlust geschlossen worden. Scheint kein guter Ansatz gewesen zu sein in einem ziemlich volatilen Umfeld.


    Mein nächster Ansatz wird das „Gridtrading“ sein. In diversen Xchanges kann man das ja schon machen. Ich habe jedoch ein paar Sachen hinzugefügt.


    Die Grids sind nicht statisch, bedeutet, sie dienen nur als Einstiegssignal. Es wird erst dann nachgekauft, wenn es eine kleine Erholung (sagen wir +0.5% gibt).

    Verkauft (alle Trades des Zyklus) wird, wenn ein gewisser Profit erreicht wird (z.B. +1.5%), und es einen Rücksetzer (z.B -0.5%) gegeben hat.


    Dieser Ansatz hat natürlich auch seine Tücken:

    • Man wird unweigerlich irgendwann in der Nähe eines ATH seinen ersten Trade eines Zyklus machen.
    • Dieser Ansatz benötigt Cash, damit man immer nachkaufen und verkaufen kann um den AvgKurs zu drücken.
    • Wenn ein Coin auf 0 geht, ist alles weg!


    Ich habe das mal mit Solana (ab 10/2021) durchlaufen lassen. Und ich kann sagen, obwohl der Kurs unter 30 USDT gefallen ist, hatte der Bot noch Cash zum Traden. Es sind insgesamt 95 Trades mit unterschiedlichen Gridschwellen möglich. Und beim größten Verlust zum Initaltrade (-75%) des Zyklus waren noch genügend Grids vorhanden um weiter zu Traden. Rein theoretisch ist bis zu einem Verlust von -90% ein Funktionieren des Bots möglich. Praktisch liegt der Verlust aber höher, da NIE zu den definierten Schwellen gekauft wird, die sind immer größer!


    Es war schön zu sehen, wie jeder Trade (Kauf/Verkauf) den Durchschnittskurs gesenkt hat.


    Mal schauen, ob das was wird!


    Gruß,

    Ikarus

Participate now!

Don’t have an account yet? Register yourself now and be a part of our community!