Einen Trading Bot bauen Teil 3 - Kryptoindikatorblog Teil 6

0 21
Avatar for mad-readcash
10 months ago

In diesem Teil soll es um die Optimierung des hypothetischen Bots gehen und um das mit der Optimierung verbundene Risiko des Over-Fittings. Was es damit auf sich hat und wie du vorgehen könntest, wirst du mit Beispielen in diesem Blogpost erfahren. Viel Spaß...

Optimierungen

Im vergangenen Blogpost haben wir eine simple Trading-Strategie formuliert, die wir hier noch einmal kurz wiederholen wollen:

Kaufe Bitcoin, wenn das Mayer-Multiple unter 1.2 liegt, und verkaufe bei über 2.4.

Testen wir die Trading Strategie mit einem Datensatz der letzten etwa 500 Tage, erhalten wir folgende Grafik:

Abb.1 Das Mayer-Multiple über die letzten 500 Tage seit Erstellung dieses Artikels.

Wie wir sehen können, wäre über den dargestellten Zeitraum nur die Kaufbedingung ausgelöst worden. Der Bot hätte am ersten Tag (hier um 08.2022) für einen festgelegten Betrag eine bestimmte Menge an BTC erworben und säße seitdem in dieser Position (HODL).

Wir haben nun 2 Optionen:
1) Anpassung des Beobachtungszeitraums (z.B. auf 1000 Tage erhöhen)
2) Anpassung der Strategie (verkaufe bei z.B. 1.4 und kaufe bei z.B. 0.8 (hier etwa die Spannweite des Mayer Multiples)

Beginnen wir mit Option 1.
Der Beobachtungszeitraum, bzw. dein Testdatensatz, muss in einem sinnvollen Verhältnis zu den Daten stehen, die dein Bot für die Berechnung braucht. Das Mayer Multiple benötigt als Bezug immer ein 200 Tage Mittel. Den Datensatz auf 500 Tage zu beschränken, mag vielleicht etwas klein gewählt sein, andererseits könnte dies ausreichen, wenn deine Position auch nicht länger als ein Jahr gehalten werden soll. Wäge also ab, was für dich passend ist. 500 Tage sind ein sinnvoller Zeitraum, wenn du z.B. auf monatlicher oder wöchentlicher Skala handelst.

In der folgenden Grafik werden wir den Beobachtungszeitraum auf 1000 Tage erhöhen:

Abb.2 Das Mayer-Multiple über die letzten 1000 Tage seit Erstellung dieses Artikels.

Auf 1000 Tage betrachtet, erhöht sich die Spanne von etwa 0.8-1.4 auf 0.6-2.1. Das Problem für den Bot ist jedoch, dass die Spanne mit 2.2 beginnt und der Bot gezwungen wäre, Bitcoin dort zu verkaufen. Du solltest deinem Bot in diesem Fall Bitcoin als Startkapital geben, oder wir erhöhen die Zeitspanne noch ein Wenig auf 1200 und beginnen dann, den Bot mit "Spielgeld", die folgende Strategie umzusetzen:

Spielgeld: 1000 EUR*
Verkaufe 100%: Mayer Multiple>2.0
Kaufe 50%: Mayer Multiple <1.1

*Dies sind keine echten 1000 EUR sondern nur ein Tabelleneintrag, der mit jedem Trade modifiziert wird. Diese Tabelle bezeichnen wir fortan als Werte-array und lassen uns diesen ausgeben, damit wir sehen können, über wieviel Vermögen der Bot bei jedem Trade verfügt. Die Ausgabe erfolgt dabei in eckigen Klammern [].
Mit diesen Tabelleneinträgen können wir dann die Effektivität dieser Strategie bewerten.

Wenn wir den Bot unter diesen Bedingungen arbeiten lassen, erhalten wir folgende Abbildung und Daten:

Abb.3 Das Mayer-Multiple über die letzten 1200 Tage seit Erstellung dieses Artikels.

Der Bot hätte zu Beginn des Datensatzes am 06.09.2020 für 500 EUR Bitcoin gekauft, am 29.12.2020 (natürlich nicht am Peak) wieder für 645 EUR verkauft, am 17.05.2021 wieder Bitcoin gekauft und hätte diese Position nicht mehr verlassen.
Der Werte-array für dieses Verhalten lautet:
[1000, 500, 1145, 572.5]

Wie wir sehen können, hätte der Bot Profite in EUR gemacht, die Vekaufsbedinung ist aber vielleicht zu selten ausgelöst worden (einmal in fast drei Jahren!!).

Durch weiteres Herumprobieren werden wir nun die Verkaufsbedinung optimieren, um so, hoffentlich, mehr Profite zu machen.

Over-fitting
Du solltest aber bedenken, die Bedingungen nicht so zu wählen, dass du aus deinem Datensatz den maximal möglichen Profit herausholst.
Dies wird als over-fitting bezeichnet. Zwar würdest du dann bei deinem Datensatz den höchstmöglichen Profit unter den gefundenen Bedingungen machen, aber der Datensatz bedient sich aus Daten der Vergangenheit. Schließlich muss es nicht sein, dass sich die Zukunft, in der du den Bot sicher verwenden willst, genauso verhält, wie die Vergangenheit, mit der er trainiert worden ist.

Es wird also empfohlen, den optimierten Datensatz, dann noch einmal über einen längeren Zeitraum zu testen.
Wir wählen nun die Kauf- und Verkaufsbedinungen noch einmal zwischen 1.1 und 1.5 für den 1200 Tage Datensatz und erhalten:

[1000, 500, 909, 454.5, 823, 411.5]

Oder tabellarisch:
Kauf Verkauf Vermögen
START 1000
09.2020 11.2020 909
05.2021 09.2021 823
12.2021 offen 411+120 in BTC*
*der Bot hält zusätzlich noch 0.0047 BTC, zur Zeit etwa 120 EUR.

Wie wir sehen können, macht der Bot unter diesen Bedingungen über die Zeit Verluste. Dieser Test war also keine Optimierung.

Zur Veranschaulichung testen wir aber den Bot unter diesen Einstellungen noch einmal über einen Zeitraum von 2000 Tagen:

Abb.4 Das Mayer-Multiple über die letzten 2000 Tage seit Erstellung dieses Artikels.

Auch hier ergibt sich ein ähnliches Bild. Mit einem Werte-array von:

[1000, 500.0, 817.68, 408.84, 773.47, 386.74, 700.08, 350.04]

, sieht man, dass der Bot trotz etwa 0.004 zusätzlichen BTC definitiv im Minus wäre. 1.1 und 1.5 sind also kein optimales Paar.

Wenn wir jedoch auf dem selben 2000 Tage Zeitraum noch einmal etwa 1.1 und 2.0 (wie oben erwähnt) probieren, liefert der Bot einen Werte-array von:


[1000, 500.0, 936.91, 468.46, 1126.50, 563.25]

und zusätzlich etwa 0.0078 BTC (etwa 200 EUR).
Mit etwa 760 EUR ist der Bot zum Ende zwar etwa 24% im Minus, konnte zwischenzeitlich aber auch fast 12% Rendite erzielen. Die Frage ist jetzt, ob man die Rendite re-investiert oder gesichert hätte. In diesem Beispiel ist von einem Reinvestment ausgegangen worden.

Wenn du dich für einen Indikator und den für dich optimierten Bedingungen entschieden hast, ist es an der Zeit, die Trades auch wirklich durchzuführen. Eine Möglichkeit stelle ich dir dann in dem nächsten Artikel vor.



1
$ 0.00
Avatar for mad-readcash
10 months ago

Comments