Zum Inhalt springen

Bot Trading mit genetischen Algorithmen


PeWi

Empfohlene Beiträge

vor 27 Minuten schrieb Arther:

Ich finde deine Perspektive recht interessant. Jedenfalls ist "overfitting" ein Fachbegriff im Machine Learning mit festgelegter Bedeutung und im Kern eine Konsequenz daraus, dass sich Fehler in der Vorhersage in Variance (was zu Overfitting führt) und Bias separieren lassen.
Du hast den Begriff glaube ich falsch verstanden, ich vermute wegen einer schlechten Intuition bezüglich Computer-Algorithmen (was sehr verständlich ist :D). Wenn du schreibst "Er schaut sich einen Chart an und sucht nach genau diesem Muster[...]" ist das etwas anderes als wenn ein Computer nach "genau diesem Muster" sucht, denn ein Trader sucht in Wahrheit nicht nach genau dem Muster, sondern dem Muster, das dem Wesen nach her vergangenen Mustern entspricht. Und genau das will man einem Computer ebenso beibringen. Overfitting bezeichnet genau das Gegenteil, nämlich das klammern an einzelne konkrete Werte ohne das "Wesen" des Musters zu erfassen um dann eben zu erkennen, dass ein Muster dem Wesen nach ganz klar dem entspricht was man kennt und also auch das zukünftige Ergebnis klar kennt.

Deinen Fachbegriff habe ich schon richtig verstanden. Doch genau das meine ich. Nehmen wir an, du hast einen Indikator wie den RSI und beginnst nach Divergenzen darin zu suchen. Nun definierst du z.B. 5 Kerzen nach Einstieg ist das Maximum an Divergenz-Länge, testest es durch und stellst fest: passt exakt zum Chart, gibt gute Signale > ergo tolle Idee. Dann nimmst einen neuen Chart her und es passt nicht mehr, weil man eventuell 10 Kerzen gebraucht hätte. Was du zu Beginn getan hast, nennt man overfitting. Anstatt ein flexibles Modell zu bauen, hast du deine Theorie zu sehr dem einen Datenset(Chart) angepasst und starr gemacht, sodass die Theorie nicht reproduzierbar auf andere Daten ist. Ich weiß, dass der Begriff eigentlich meint, mit zu vielen Variablen den Algorithmus zu sehr an einem Datensatz anzupassen. Doch Trader machen das mit eben "wenigen Variablen" und dennoch machen sie es.

Wenn ich aus einer Vielzahl an Daten und Signalen, nach genau dem einen Muster suche  (auch wenn das Muster nicht per se starr ist), und dabei sämtliche andere Signale ignoriere und mich somit gegen einen Großteil des Marktes stelle, dann "overfitte" ich meine Strategie mit der Vielzahl der sonstigen Möglichkeiten am Markt. Der Bezugspunkt ist entscheidend. Stimmt die Strategie auf 30% der Coins, ist die Strategie per se nicht schlecht, ich muss nur die 30% der Coins rausfiltern. Overfitting? ja, aber gutes Overfitting :D 

Machine learning ist der Bereich der Aufgabe, den ein guter Trader bereits hinter sich hat. Während die Maschine erst mal viele Szenarien durchspielt, viele Indikatoren begutachtet und in deren Breite austestest und auch noch die Ambition hat, das auf viele Charts ableiten zu müssen, weiß ein guter Trader schon, wie er in einer gewissen Situation den passenden Indikator zu deuten hat und verleiht ihm auch die richtige Wichtigkeit und erkennt auch am Chart, ob diese Strategie dort überhaupt funktioniert, oder nicht. Ein Trader macht das visuell, etwas flexibel, aber dennoch sehr reduziert auf seine wenigen altbewehrten Formationen und Signale. Im Vergleich zur Menge an Möglichkeiten/Strategien und möglichen Entscheidungen die der restliche Markt macht, ist dieser eine Trader für sich betrachtet, in seiner eigenen "overfitting Welt". Er reduziert immer auf diese paar Sachen seine Entscheidungen. Je weiter weg er davon ist, desto unsicherer handelt er und muss Risiko-ärmer handeln.

Ein guter Trader, traded nicht alles und nicht immer. Den Machine Learning-Algorithmen wollen die Programmierer aber genau das beibringen. Die Maschine kann erstmal nichts, aber es soll selbst aus jeder Lage irgendwas "lernen" und reproduzieren. Das ist eine hohe Ambition finde ich und eine unnötig hohe Ambition.

Den Trader limitiert die zeitliche Möglichkeit nach seinem overfitting Szenario alle Märkte zu durchsuchen, die Maschine ist limitiert jeden einzelnen Chart mit der Vielzahl an möglichen Strategien abzugleichen. Die Strategie der Maschine, ist Strategien zu finden,... und das braucht wie Pewi schon sagte: Rechenpower.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Um das mit dem Overfitten beim automatisierten Traden noch mal zu verdeutlichen ...

Nehmen wir Coinflippers Beispiel mit dem RSI kleiner 5 - angenommen, der RSI fiele in unseren Trainingsdaten dreimal unter die 5.0, und alle drei Male wären gute Käufe gewesen.

Dann macht daraus die overfittende Strategie:   kaufe, wenn  RSI = 4.938  OR  RSI = 4.422  OR  RSI = 4.712

Eine nicht-overfittende Strategie macht daraus:   kaufe, wenn RSI <= 4.938

Der Unterschied ist jetzt hoffentlich deutlich - die nicht-overfittende Stategie lernt ein Muster, während die overfittende Strategie lediglich auswendig lernt und reproduziert.

Link zu diesem Kommentar
Auf anderen Seiten teilen

19 minutes ago, coinflipper said:

Wenn ich aus einer Vielzahl an Daten und Signalen, nach genau dem einen Muster suche  (auch wenn das Muster nicht per se starr ist), und dabei sämtliche andere Signale ignoriere und mich somit gegen einen Großteil des Marktes stelle, dann "overfitte" ich meine Strategie mit der Vielzahl der sonstigen Möglichkeiten am Markt. Der Bezugspunkt ist entscheidend. Stimmt die Strategie auf 30% der Coins, ist die Strategie per se nicht schlecht, ich muss nur die 30% der Coins rausfiltern. Overfitting? ja, aber gutes Overfitting :D

Vielleicht könnte man deines als "Overfitting auf der Meta-Ebene" bezeichnen? Während Overfitting im ML-Kontext "Overfitting auf den Werten" entspricht?

Aber egal, wir driften langsam in Haarspaltereien ab - ich denke, jede Seite hat genügend Beispiele gebracht, damit jeder weiß, was gemeint ist.

 

  • Love it 1
  • Like 1
Link zu diesem Kommentar
Auf anderen Seiten teilen

und meine Theorie kurz erklärt:

  • ein trader, der overfitted: ich suche nach einem RSI unter 5, alles andere ist mir egal (doch recht starr und reduziert, auswendig gelernt und stumpfsinnig)
  • eine Maschine nach eurer Strategie, die nicht over-fitted: RSI unter 5 klingt gut, aber eventuell geht auch RSI unter 7, wenn Stoch bullish divergent, oder RSI unter 10, wenn stoch bullish divergent, und die letzte Kerze einen langen Docht hat (Strategie ist nicht overfitted, variabel, flexibel und beinhaltet mehr Möglichkeiten, aber eben auch mehr "Rauschen")

und je mehr die Maschine untersucht und meint zu verstehen, desto mehr sind die Wenn & Dann Päckchen und desto komplexer ist die Entscheidungsfindung durch Gewichtung und ich mutmaße eben, dass man je komplexer man es gestaltet, desto weniger ist es übertragbar. 

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 3 Minuten schrieb coinflipper:

ein trader, der overfitted: ich suche nach einem RSI unter 5, alles andere ist mir egal (doch recht starr und reduziert, auswendig gelernt und stumpfsinnig)

Das bezeichnet man übrigens als underfitting.

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

vor 1 Stunde schrieb PeWi:

Ist das genug angefangen? 😜

ja, das ist es :D 

 

vor 1 Stunde schrieb PeWi:

Mal laufen eine Zeit lang Mean Reversion-Strategien besser, mal Trend-Strategien, mal sind Strategien auf dem 4h-Chart profitabler, mal auf dem 1h-Chart, ... wenn du nach Z-Score und Monk suchst, der hat dazu einiges geschrieben.

schon probiert mehrere Zeiteinheiten miteinander zu kombinieren? 

 

vor 1 Stunde schrieb PeWi:

Aber ich habe im Forum schon öfters geschrieben, dass ich mit meinen Bastelstrategien nicht so erfolgreich/profitabel bin, wie ich es gerne wäre. Und deshalb habe ich angefangen, mich für komplexere Geschichten wie NNs, RL und GA/GP zu interessieren.

was ist NN, RL, GA/GP? :D 

vor 1 Stunde schrieb PeWi:

Das aktive Beschäftigen mit Gegenanzeigen mache ich bisher auf jeden Fall zu wenig - das ist ein guter Punkt, mit dem ich mich auf jeden Fall mehr beschäftigen muss.

was du als "intuitiv" bezeichnest, ist halt für manche intuitiv, andere Trader setzen sich feste Regeln. Man sollte sich eventuell festhalten, welches Signal, welches überstimmen darf. 

Link zu diesem Kommentar
Auf anderen Seiten teilen

2 hours ago, coinflipper said:

RSI unter 5 klingt gut, aber eventuell geht auch RSI unter 7, wenn Stoch bullish divergent, oder RSI unter 10, wenn stoch bullish divergent, und die letzte Kerze einen langen Docht hat

Ich weiß, dass das jetzt meiner vorherigen Definition widerspricht - aber das riecht eigentlich heftig nach Overfitting. 😉

Vielleicht sollte man die Definition etwas abändern zu "... immer wenn etwas sehr spezifisch festgelegt wird ..."?

1 hour ago, coinflipper said:

schon probiert mehrere Zeiteinheiten miteinander zu kombinieren?

Nur zaghaft, weil man a) Daten unter 1h-Candlelänge rückwirkend für längere Zeiträume nur schwer bekommt und b) weil meine bisherigen Bots und Backtests nur um eine feste Candlelänge herum (wenn auch wählbar) aufgebaut waren.

Ich liebäugle schon länger mit mehreren Candlelängen und habe mir als Ersatz für größere Candles bisher mit entsprechend größeren Parametern für die gewünschten Indikatoren beholfen. Seit kurzer Zeit habe ich auch Funktionen zum Runtersamplen auf größere Zeiteinheiten.

1 hour ago, coinflipper said:

was ist NN, RL, GA/GP?

NN: neuronale Netze;
dNN: tiefe neuronale Netze (d.h. viele Schichten)
RL: Reinforcement Learning (wenn du von "Agenten" liest, ist das normalerweise RL; das Gedächtnis von RL besteht i.A. aus einem tiefen NN)
DRP: Deep Reinforcement Learning
GA: genetische Algorithmen zur Optimierung von Parameterwerten (Simulation der evolutionären Auslese über mehrere Runden)
GP: genetisches Programmieren zur Festlegung und Optimierung von Regeln (Simulation der evolutionären Auslese über mehrere Runden)
ML: Machine Learning (Oberbegriff für diverse Verfahren wie NN/RL/GA/GP/Trees/Forests/...)

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

vor 13 Minuten schrieb PeWi:

Nur zaghaft, weil man a) Daten unter 1h-Candlelänge rückwirkend für längere Zeiträume nur schwer bekommt und b) weil meine bisherigen Bots und Backtests nur um eine feste Candlelänge herum (wenn auch wählbar) aufgebaut waren.

Ich liebäugle schon länger mit mehreren Candlelängen und habe mir als Ersatz für größere Candles bisher mit entsprechend größeren Parametern für die gewünschten Indikatoren beholfen. Seit kurzer Zeit habe ich auch Funktionen zum Runtersamplen auf größere Zeiteinheiten.

Es gab mal einen Typen, der mir auf Twitter erklärt hat, er verändert einfach die Zeiteinheiten, bis er eine findet, die dem Indikator besser passt. D.h. abseits von 1h, 4h, 1d Einheiten, nimmt er dann auch 3h, oder 30min, oder 4h-Candles. Wenn man das mal probiert, merkt man, dass es nicht so dumm ist, vom Ansatz. manchmal ist der 12h besser und klarer als der 1d chart. Man könnte auch den Indikator anpassen, dass er besser zum Chart passt, aber es gibt eben auch die umgekehrte Methode, die kaum einer nutzt.

und bezüglich der Charteinheiten: Das ist mMn furchtbar wichtig! Man muss ja quasi zwingend von oben nach unten denken, in den Zeiteinheiten. Der 1h Chart kann theoretisch gleich aussehen, in unterschiedlichen Positionen des 1d chart und dann bestimmt der 1d-Chart den Ausgang des Musters auf der 1h-Einheit. Das macht immens was aus, was das Ziel des Trades betrifft. Es gibt manche Kerzenformationen, die im Weekly stattfinden, wo man weiß, dass die darauf folgende Kerze z.B. unbedingt rot wird. Da fängt man an mit diesem "weekly open", oder "monday open" Zeug, was quasi einem ein sehr gutes Indiz bietet, für kleinere Zeiteinheiten. 

vor 19 Minuten schrieb PeWi:

NN: neuronale Netze;
dNN: tiefe neuronale Netze (d.h. viele Schichten)
RL: Reinforcement Learning (wenn du von "Agenten" liest, ist das normalerweise RL; das Gedächtnis von RL besteht i.A. aus einem tiefen NN)
DRP: Deep Reinforcement Learning
GA: genetische Algorithmen zur Optimierung von Parameterwerten (Simulation der evolutionären Auslese über mehrere Runden)
GP: genetisches Programmieren zur Festlegung und Optimierung von Regeln (Simulation der evolutionären Auslese über mehrere Runden)

Danke für die Erklärung. Offensichtlich bastle ich dann, an etwas wie RL ^^ und wenn die RL-Mechanik läuft und sie sich selbst backtestet, wird es ein GP, weil sie eventuell irgendwann sich selbst updated? 😄 Naja, ist noch Zukunftsmusik, aber theoretisch habe ich mir dafür Konzepte überlegt

Link zu diesem Kommentar
Auf anderen Seiten teilen

2 hours ago, coinflipper said:

und je mehr die Maschine untersucht und meint zu verstehen, desto mehr sind die Wenn & Dann Päckchen und desto komplexer ist die Entscheidungsfindung durch Gewichtung

Deswegen ist es beim ML so wichtig, auf furchtbar vielen Daten zu trainieren. Denn nur dann fallen so komplexe Wenn & Dann Päckchen oft genug auf die Schnauze, wenn sie nicht "echt" sind.

Bei weniger Daten kommt es einfach zu oft vor, dass ein zufälliges Muster signifikant erscheint, weil es eben nur ein- oder zweimal vorkommt, und es da eben zufällig klappt. Hätte man deutlich mehr Daten, käme es öfter vor, und bei "nicht-echten" Mustern dann eben auch oft genug als Fehlschlag.

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 5 Minuten schrieb PeWi:

Deswegen ist es beim ML so wichtig, auf furchtbar vielen Daten zu trainieren. Denn nur dann fallen so komplexe Wenn & Dann Päckchen oft genug auf die Schnauze, wenn sie nicht "echt" sind.

Bei weniger Daten kommt es einfach zu oft vor, dass ein zufälliges Muster signifikant erscheint, weil es eben nur ein- oder zweimal vorkommt, und es da eben zufällig klappt. Hätte man deutlich mehr Daten, käme es öfter vor, und bei "nicht-echten" Mustern dann eben auch oft genug als Fehlschlag.

Von was für einer Performance sprechen wir hier so in der Regel? Also, wie viel sollte sowas schaffen, in der Woche/Monat in Prozent im Vergleich zum Einsatz, oder als Trefferquote beschrieben.

Bearbeitet von coinflipper
Link zu diesem Kommentar
Auf anderen Seiten teilen

8 minutes ago, coinflipper said:

Es gab mal einen Typen, der mir auf Twitter erklärt hat, er verändert einfach die Zeiteinheiten, bis er eine findet, die dem Indikator besser passt. D.h. abseits von 1h, 4h, 1d Einheiten, nimmt er dann auch 3h, oder 30min, oder 4h-Candles. Wenn man das mal probiert, merkt man, dass es nicht so dumm ist, vom Ansatz. manchmal ist der 12h besser und klarer als der 1d chart. Man könnte auch den Indikator anpassen, dass er besser zum Chart passt, aber es gibt eben auch die umgekehrte Methode, die kaum einer nutzt.

Zwei Einwände:

Je mehr man rumprobiert, bis etwas passt, desto mehr gibt man dem Zufall eine Chance, dass irgendwann etwas passt.

Ist nicht TA zumindest in Teilen eine selbsterfüllende Prophezeiung? Wenn alle Leute auf den RSI(14) im 4h-Chart schauen, dann erlangt der seine Bedeutung zusätzlich auch aufgrund der selbsterfüllenden Prophezeiung. Benutzt man jetzt unübliche Indikatoren, unübliche Einstellungen oder unübliche Zeiteinheiten, dann fällt dieser Teil der "Wirksamkeit" schon mal weg.

14 minutes ago, coinflipper said:

und bezüglich der Charteinheiten: Das ist mMn furchtbar wichtig! Man muss ja quasi zwingend von oben nach unten denken, in den Zeiteinheiten.

Sowas in simpler Ausprägung wird in Bots gerne als "Trendfilter" genutzt. Z.B. bei einem Bot, der Stundensignale handelt: Wenn der 4h-Trend noch oben geht, handle nur Long-Signale; wenn der 4h-Trend nach unten geht, handle nur Short-Signale.

18 minutes ago, coinflipper said:

Offensichtlich bastle ich dann, an etwas wie RL ^^ und wenn die RL-Mechanik läuft und sie sich selbst backtestet, wird es ein GP, weil sie eventuell irgendwann sich selbst updated? 😄 Naja, ist noch Zukunftsmusik, aber theoretisch habe ich mir dafür Konzepte überlegt

Na dann Glückwunsch! Ist doch super! 👍

Link zu diesem Kommentar
Auf anderen Seiten teilen

insgesamt ein interessantes Thema hier,... vermutlich müsste man noch hinzufügen, dass man mittels klugem Einsatz und Stop-Loss-Verfahren diese Dinge durchaus umsetzen kann. Viele Trader haben ja ca 50% Trefferquote oder so und sind dennoch profitabel, was man so liest. Demnach ist die reine Analyse gar nicht das aller wichtigste. 

vor 11 Minuten schrieb PeWi:

Na dann Glückwunsch! Ist doch super! 👍

Danke. Bin ja noch nicht so weit, aber ich arbeite halt immer dran, mal schauen. 

Link zu diesem Kommentar
Auf anderen Seiten teilen

16 minutes ago, coinflipper said:

Von was für einer Performance sprechen wir hier so in der Regel? Also, wie viel sollte sowas schaffen, in der Woche/Monat in Prozent im Vergleich zum Einsatz, oder als Trefferquote beschrieben

Ich habe jetzt aus der Erinnerung an Artikel o.ä. keine Zahlen parat. (Systeme aus akademischen Papers sind oft wenig profitabel, weil sie aus Gründen der Reproduzierbarkeit oder Vergleichbarkeit mit Vorgängerpapers oft nur relativ simpel sind.)

Da müsste man jemanden fragen, der ein solches System im realen Einsatz hat. Allerdings halten sich Betreiber echter, profitabler Bots gerne mit Details zurück. 😉

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hab da auch keinen Zugang zu, aber folgendes:

Zitat

High-frequency trading (HFT) is a type of algorithmic financial trading characterized by high speeds, high turnover rates, and high order-to-trade ratios that leverages high-frequency financial data and electronic trading tools.

Zitat

In 2017, Aldridge and Krawciw[9] estimated that in 2016 HFT on average initiated 10–40% of trading volume in equities

Die Quote dürfte heute deutlich höher liegen - hat sich ziemlich viel getan in den letzten Jahren - und in Krypto dürfte die Quote nochmal höher sein. Daraus kann man folgern, dass die wohl ziemlich erfolgreich sind.
Sagen wir so ein hypothetischer reiner HFT Fond verwaltet 20 Milliarden und kostet vllt 1% pro Jahr, dann sind das 200 Millionen pro Jahr Budget für "IT Kram" + sonstige Verwaltung. Um die Größenordnungen mal darzustellen.

Gerade auf Reddit gefunden btw.:

Much surprise woweeee ;P.
Auch interessant, auch wenig überraschend:

 

  • Like 1
Link zu diesem Kommentar
Auf anderen Seiten teilen

5 hours ago, coinflipper said:

dass man mittels klugem Einsatz und Stop-Loss-Verfahren diese Dinge durchaus umsetzen kann

Da möchte ich nochmal einhaken, da SLs bei der hohen Volatilität der Kryptos ein steter Quell der Freude sind ...

Meine Backtests haben eigentlich immer ergeben, dass in Summe ein Stop-Loss dem Ergebnis abträglich ist; sowohl das Durchschnitts-Endvermögen als auch der durchschnittliche Max-Drawdown verschlechtern sich mit einem SL, und um so mehr, je dichter er sitzt.

Das kommt ja nicht unerwartet, denn Absicherungen kosten üblicherweise. Trotzdem wäre es natürlich schön, wenn es pfiffigere Varianten gäbe, die in Summe kostengünstiger wären. 😉

Ich habe etwas mit Varianten herumexperimentiert. Z.B. nur dann den SL auszulösen, wenn xx% aller Coins im Besitz um mindestens y% gefallen sind. Oder zu schauen, ob sich die Korrelation der Coins über die letzten Candles erhöht hat. Meine aktuelle Variante ist, das Volumen der aktuellen Candle mit dem Durchschnittsvolumen der vorhergehenden 12 Candles zu vergleichen und bei massiver Erhöhung den SL schon eher auszulösen, während er ansonsten etwas weiter weg sitzt.

In Summe hat das aber wenig geändert; die größte Verbesserung ergab sich schon ziemlich zu Anfang meiner Versuche, wenn man den SL nicht in Prozenten, sondern in ATRs angibt.

Gibt es da pfiffigere Methoden, die sich programmtechnisch mit begrenztem Aufwand nutzen lassen? Irgendwas in der Art von "der Kurs beim letzten RSI-Tief minus xx ATRs" oder so?

 

  • Thanks 1
Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 20 Stunden schrieb PeWi:

Gibt es da pfiffigere Methoden, die sich programmtechnisch mit begrenztem Aufwand nutzen lassen?

Wenn man mit Hebel handelt, muss man sich einfach ein Limit setzen, sonst wird man liquidiert bzw. man kann den Trade nicht "aussitzen", wegen den Gebühren.

Bei denen, die so handeln, hat sich die Methode der R:R durchgesetzt. Sie rechnen den Gewinn nicht in Prozent, sondern in R um. D.h. sie gehen trades ein, die z.B. 40% upside und maximal 5% downside haben bis zum Stop-Loss. Das wäre ein R von 8. Und sie gehen nie ein Trade ein, der unter einem R von 3 liegt (grob). Und wenn man das so angeht, braucht man nicht mal 50% Hitrate, um erfolgreich zu sein. Wobei der Stop-Loss ist nicht willkürlich 5% oder so, sondern ist der Punkt, ab wo die Idee hinter dem Trade für nichtig erklärt wird.

Wenn du z.B. ein Trade eingehst, als "retest eines Ausbruchs", dann ist der Stop-Loss dort, wo der Ausbruch invalidiert wird. Oft nehmen sie dann einen tieferen Punkt, der irgendwo mit Support und Resistence zusammenhängt, der es einem logisch zeigt, dass der Kurs droht weiter abzurutschen, anstatt zu steigen.

Wie du das programmierst, weiß ich ehrlich gesagt nicht. Jedoch erscheint mir die R-Methode eine plausible zu sein, die auch erklärt, dass man als Trader gar nicht so oft richtig liegen muss.

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

27 minutes ago, coinflipper said:

... hat sich die Methode der R:R durchgesetzt.

Die R:R-Methode steht in vielen Büchern über Trading. Und den Stop an den Punkt zu legen, an dem sich die Idee zum Trade als offensichtlich falsch herausstellt, leuchtet mir auch ein.

27 minutes ago, coinflipper said:

Wie du das programmierst, weiß ich ehrlich gesagt nicht.

Meistens mache ich Trendverfolgung-Strategien, da habe ich überhaupt keine Idee, wie hoch das gehen könnte, und mein Programm noch weniger. Deswegen bleibt mir da nur ein 08/15-Abstand ala "xx ATR unter dem Einstieg".

An sich haben Trendverfolger einen indirekten Stop - wann eben der Trend aufhört. Ärgerlich sind da nur jähe Preisstürze, die für die Indikatoren zu schnell gehen, und die Strategie deswegen erst reagieren würde, wenn das Kind schon im Brunnen liegt. Dafür ist ein gut funktionierendes SL-Konzept sehr hilfreich.

Ich hatte auch schon ein SL-Konzept, das sich wieder eingekauft hat, sobald der Preis den SL-Level wieder erreicht hat. Und eines, das nach x% Abfall den SL ausgelöst hat und nach y% Anstieg nach dem tiefsten Punkt wieder eingestiegen ist.
Mit beiden Konzepten hatte ich gehofft, mir einen relativ nahen SL leisten zu können. In Summe hat beides aber ebenfalls zuviel Profitablität gefressen.

 

Bearbeitet von PeWi
Link zu diesem Kommentar
Auf anderen Seiten teilen

  • 2 Wochen später...
On 5/18/2021 at 12:49 PM, PeWi said:

Mit der genetischen Programmierung möchte ich anfangen. Dazu muss ich in meinen Bot noch sowas wie einen Regel-Interpreter einbauen, denn bisher hatte ich ja nur hart-kodierte Strategien. Wenn der steht und funktioniert, dann kann ich die Strategieregeln zukünftig aus einer Textdatei in einem Baum einlesen und den dann durch die GAs verändern und optimieren lassen.

Kleines Update:

Endlich bin ich dazu gekommen, mit dem Regel-Interpreter anzufangen. Eine erste Rohversion mit noch recht kleinem Befehlsumfang läuft seit eben.

Eingebaut sind die Indikatoren der Tulip-Library und die Operatoren AND, OR, NOT, >, >=, <, >= und =.

Damit die Programmierung nicht zu aufwendig wird, ist das Format der Regeln noch etwas nerdig - meine aktuelle Datei zum Testen des Codes:

INDICATORS:

    close_1h = COIN(1h, close)
    ema1_1h = EMA(1h, close, 12)
    ema2_1h = EMA(1h, close, 24)

BUY:

    buy = money AND coincheck

    money = enoughmoney AND nocoins
    enoughmoney = FREEMONEY > 50
    nocoins = COINVALUE < 20

    coincheck = price AND indis
    price = close_1h > ema1_1h
    indis = ema1_1h > ema2_1h
    
SELL:

    sell = havecoins AND indis

    havecoins = COINVALUE >= 20
    indis = ema1_1h < ema2_1h

(Bitte keine Bemerkungen zur Sinnigkeit dieser Strategie - ich weiß, dass man mit kreuzenden EMAs nix reißen kann - aber ich brauche eben etwas einfaches zum Testen der Implementierung.  🙄)


So eine regelbasierte Strategie gliedert sich in drei Blöcke - die Definition der verwendeten Indikatoren, die Regeln fürs Kaufen und die Regeln fürs Verkaufen. Nicht enthalten ist die Schleife über alle Coins - im Bot werden der Reihe nach für alle Coins, die im Bot freigeschaltet sind, die Indikatoren berechnet und die Regeln geprüft.

Die Wurzel für den Regelbaum ist immer buy bzw sell. Jede Regel verweist entweder auf andere Regeln oder enthält ausrechenbare Bedingungen.

Exemplarisch für den Buy-Zweig:

buy = money AND coincheck
Damit ein Coin gekauft wird, müssen die beiden Regeln money und coincheck erfüllt sein.

money = enoughmoney AND nocoins
money ist nur erfüllt, wenn die beiden Regeln enoughmoney und nocoins wahr sind.

enoughmoney = FREEMONEY > 50
enoughmoney ist die erste Regel, die sofort ausgerechnet werden kann; wenn das freie Geld im Account, das dem Bot zum Kaufen zur Verfügung steht, noch größer als $50 ist, ist die Regel erfüllt.

nocoins = COINVALUE < 20
nocoins ist erfüllt, wenn wir vom Coin, der gerade durchgeprüft wird, nur Dust, d.h. weniger als $20, besitzen.

In Kürze zum Rest des Buy-Blocks: Die Regel coincheck ist erfüllt, wenn der schnellere EMA über dem langsameren liegt, und der Preis zusätzlich noch über dem schnellen EMA.


In den nächsten Tagen komme ich hoffentlich dazu, noch ein paar der fehlenden Geschichten (wie Channel-Breakouts) einzubauen. Außerdem sollte man später irgendwann bei den Indikatoren auch Vielfache des Basisintervalls einstellen können, also im obigen Beispiel mit dem Basisintervall 1h auch Indikatoren auf 2h-, 3h-, 4h-, ...Candles definieren und verwenden können.

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

Interessantes Paper zum Thema GP - die vorgestellten Gedanken eigenen sich aber auch für  andere, sich selbst optimierende Methoden, Trading-Strategien zu entwickeln und zu optimieren.

Kernpunkt des Artikels sind die sogenannten Pre-Tests, die vorab helfen abzuschätzen, ob sich ein intensiver Entwicklungsaufwand für GP-Trading lohnt oder nicht.

Diese Pre-Tests sind so gestaltet, dass man zwischen drei Fällen unterscheiden kann:

a) Der getestete Markt ist soweit effizient, dass keine systematische Trading-Strategie möglich ist.
b) Es gibt ausnutzbare Ineffizienzen, aber die eigene GP-Implementierung taugt nichts (d.h. sie optimiert nicht besser als eine vom Rechenaufwand vergleichbare Zufallssuche im Strategieraum).
c) Es gibt ausnutzbare Ineffizienzen, und die eigene GP-Implementierung optimiert die Strategien tatsächlich besser.


Etwas ausführlicher zu b): Die Hoffnung bei selbst-optimierenden Systemen ist ja, dass die mit dem gleichen (Rechen-) Aufwand zu besseren Ergebnissen kommen; wenn man folglich 500 Individuen über 100 Generationen per GP optimieren lässt, sollten die letzten 500 Individuen besser sein, als die besten 500 Individuen aus 100 x 500 = 50.000 per Zufall erzeugten Strategien. Ist das nicht der Fall, kann man sich den Aufwand mit der GP sparen.
 

https://hal.inria.fr/file/index/docid/168269/filename/SHC_NN_Springer2007.pdf

Summary: Over the last decade, numerous papers have investigated the use of Genetic Programming (GP) for creating financial trading strategies. Typically, in the literature, the results are inconclusive but the investigators always suggest the possibility of further improvements, leaving the conclusion regarding the effectiveness of GP undecided. In this paper, we discuss a series of pretest s aimed at giving more clear-cut answers as to whether GP can be effective with the training data at hand.
Precisely, pretesting allows us to distinguish between a failure due to the market being efficient or due to GP being inefficient. The basic idea here is to compare GP with several variants of random searches and random trading behaviors having well-defined characteristics. In particular, if the outcomes of the pretests reveal no statistical evidence that GP possesses a predictive ability superior to a random search or a random trading behavior, then this suggests to us that there is no point in investing further resources in GP. The analysis is illustrated with GP-evolved strategies for nine markets exhibiting various trends.

 

  • Love it 1
Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 20 Stunden schrieb PeWi:

Diese Pre-Tests sind so gestaltet, dass man zwischen drei Fällen unterscheiden kann:

Wobei "unterscheiden" ja ein etwas zu starkes Wort ist. "Kann Hinweise geben in eine Richtung".

Aber natürlich gut ein möglichst differenziertes Framework zur Beurteilung der Ergebnisse zu haben. Bei den Experimenten fehlt mir der "Random Market" als Beleg dafür, dass die Methode auch wirklich "kann nichts lernen" korrekt identifiziert. Ergebnisse sind generell etwas kurz geraten mit etwas viel Fußnote, haben die da evtl. nen zweites Paper draus gebastelt? Woher hatten die z.B. die Märkte C1, J1, etc., warum genau diese Jahre? Klingt ein kleines bisschen nach p-Hacking.

Bearbeitet von Arther
  • Up 1
Link zu diesem Kommentar
Auf anderen Seiten teilen

  • 2 Wochen später...

Eine weitere Artikelserie mit einigen interessanten Punkten zum Thema "Maschinelles Lernen":

https://robotwealth.com/machine-learning-financial-prediction-david-aronson/

Eines der Probleme, wenn KI-Verfahren sich die Trading-Regeln selber suchen, ist die Schwierigkeit, echte Pattern von statistischen Artefakten zu unnerscheiden.
 

The data mining approach

Data mining is just one approach to extracting profits from the markets and is different from a model-based approach.

Rather than constructing a mathematical representation of price, returns, or volatility from first principles, data mining involves searching for patterns first and then fitting a model to those patterns. Both model-based and data mining approaches have pros and cons.

The Financial Hacker summed up the advantages and disadvantages of the data mining approach nicely:

    The advantage of data mining is that you do not need to care about market hypotheses. The disadvantage: those methods usually find a vast amount of random patterns and thus generate a vast amount of worthless strategies. Since mere data mining is a blind approach, distinguishing real patterns – caused by real market inefficiencies – from random patterns is a challenging task. Even sophisticated reality checks can normally not eliminate all data mining bias. Not many successful trading systems generated by data mining methods are known today.

David Aronson himself cautions against putting blind faith in data mining methods:

    Though data mining is a promising approach for finding predictive patterns in data produced by largely random complex processes such as financial markets, its findings are upwardly biased. This is the data mining bias. Thus, the profitability of methods discovered by data mining must be evaluated with specialized statistical tests designed to cope with the data mining bias.


Data mining is a term that can mean different things to different people depending on the context. When I refer to a data mining approach to trading systems development, I am referring to the use of statistical learning algorithms to uncover relationships between feature variables and a target variable (in the regression context, these would be referred to as the independent and dependent variables, respectively).

 

Ein zweites Problem bei "tiefen" ML-Verfahren ist, dass man nicht einschätzen kann, wie lang- oder kurzlebig der gefundene Edge ist, weil tiefe Neuronale Netzwerke und Deep Reinforcement Learning weitgehend Black Boxes sind, die keine Einsicht in ihre Entscheidungsprozesse ermöglichen.
(Einfachere Verfahren wie Entscheidungsbäume oder genetische Programmierung dagegen ergeben menschenlesbare Tradingregeln, die zumindest die Chance auf eine Einschätzung eröffnen.)

  • Thanks 1
Link zu diesem Kommentar
Auf anderen Seiten teilen

Letzte Woche hatte ich wieder ein bisschen Zeit, mit diesem Thema weiterzumachen.


Die Papers zu Genetic Programming (GP) sind deswegen alle schon ziemlich alt, weil ab ca. 2001 die Weiterentwicklung Gene Expression Programming (abgekürzt GEP) das Ruder übernommen hat.

Auch zu GEP gibt es inzwischen viele Varianten und Verbesserungen - eine Übersicht zu GEP und den daraus abgeleiteten Weiterentwicklungen kann man im Artikel "Gene Expression Programming: A Survey" finden. (https://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&arnumber=7983467)


GEP verbessert GP in mehreren Punkten.

GP arbeitet typischerweise direkt auf dem Regelbaum (Expression Tree). Damit handelt man sich mehrere Probleme ein:

Mutationen und Crossovers können leicht an "unpassender Stelle" eines Baumes geschehen, weswegen man zusätzliche Maßnahmen treffen muss, sinnvolle Trennstellen im Baum zu finden.

Auch neigen reine Entscheidungsbäume für komplexere Geschichten zum ungebremsten Wachstum (ergibt Overfitting statt Generalisierung), weswegen entweder die Fitnessfunktion einen Strafterme für große Bäume enthalten muss (weniger effektiv), oder gleich die maximale Baumtiefe und Knotenanzahl hart festgelegt werden (effektiver).


GEP dagegen kodiert den Baum in einer relativ simplen Textform, die sich leichter mit den üblichen genetischen Operatoren bearbeiten lässt als ein Baum, da jetzt einfache Stringoperationen zur Modifikation genügen. (Genotyp-/Phänotyp-System - der Expression Tree als Phänotyp wird erst zur Laufzeit aufgebaut und ausgewertet.)

Diese Textform bündelt die ursprünglichen Baumknoten zusätzlich noch in ein oder mehrere "Chromosomen". Das hat weitere Vorteile:

Dadurch, dass alle Chromosomen eine fix vorgegebene Länge haben, und die Chromosomenzahl ebenfalls vorgegeben wird, ist der Gesamtbaum aus allen Chromosomen automatisch in seiner Größe und Komplexität beschränkt.
(Der Teilbaum aus einem Chromosom kann übrigens auch kleiner sein, dann enthält das Chromosom - analog zum richtigen Leben - auch ungenutzte Gene.)

Wenn man Crossovers nur über Chromosomen erlaubt, nicht aber innerhalb von ihnen, dann bleibt der Teilbaum innerhalb jedes Chromosoms weitgehend stabil. Sinnvolle Teilbäume (Building Blocks) können dadurch viele Generationen überdauern und laufen nicht so leicht Gefahr, durch die Eingriffe der künstlichen Evolution zerstört zu werden. (Das ist allerdings bereits eine Weiterentwicklung des ursprünglichen GEP.)

 

 

  • Thanks 1
Link zu diesem Kommentar
Auf anderen Seiten teilen

Mach ich mal weiter mit meinem Monolog ... 😉

Ich bin letzte Woche auch dazu gekommen, an meinem Strategie-Parser weiterzumachen.

Er kann jetzt zusätzlich die Grundrechenarten und verschachtelte Ausdrücke.

Damit sind komplexere Sachen möglich wie einfache Breakouts:

buy = price > ema_short + 3*ATR

Außerdem kann man jetzt per Indexangabe auf vorherige Werte zugreifen:

buy = price > price[1] + ATR

Und bei Indikatoren, die mehrere Werte zurückgeben wie z.B. den MACD (eigentlicher MACD-Wert + Signallinie), kann man den Wert über eine Nummer auswählen:

buy = macd:0 > macd:1

Das kann man natürlich auch kombinieren, z.B. für eine Cross-Erkennung:

buy = (macd[1] < macd:1[1]) and (macd > macd:1)

(Falls weggelassen, werden als Defaults ':0' und '[0]' angenommen.)


Es fehlt jetzt nur noch die Möglichkeit, Indikatoren direkt auf großen Candlelängen einzubeziehen, und nicht nur indirekt, indem man entsprechend höhere Periodenzahlen angibt.

(Denn das funktioniert zwar bei den meisten Indikatoren, aber nicht bei allen; z.B. die 4h-ATR bekomme ich nicht, indem ich die 1h-ATR *4 nehme, oder die Periodenlänge für die ATR vervierfache.)


Aber okay, das meiste geht; insofern kann ich demnächst programmieren, Regelsätze per Random zu erzeugen bzw abzuändern.
Alle ungeeigneten Regelsätze werden dann vom Backtest verworfen werden; für die geeigneten müsste ich dann evolutionäre Methoden wie Crossover und Mutation entwickeln.


Ich werde wohl vorerst trotz der bekannten Nachteile beim ursprünglichen GP bleiben, weil GEP und seine Abkömmlinge noch aufwendiger sind.

 

  • Like 2
Link zu diesem Kommentar
Auf anderen Seiten teilen

Hi, konnte das GEP Paper leider nur überfliegen, aber klingt interessant. Einige fragen zu deinen Ausführungen, verweis mich im Zweifel einfach auf das Paper ;).

Am 27.6.2021 um 22:44 schrieb PeWi:

Mutationen und Crossovers können leicht an "unpassender Stelle" eines Baumes geschehen, weswegen man zusätzliche Maßnahmen treffen muss, sinnvolle Trennstellen im Baum zu finden.

unpassend bedeutet: Es entstehen Bäume, die syntaktisch inkorrekt sind, oder was ist damit gemeint? Hätte gedacht, das kann man eher relativ leicht abfangen.

Am 27.6.2021 um 22:44 schrieb PeWi:

Auch neigen reine Entscheidungsbäume für komplexere Geschichten zum ungebremsten Wachstum (ergibt Overfitting statt Generalisierung), weswegen entweder die Fitnessfunktion einen Strafterme für große Bäume enthalten muss (weniger effektiv), oder gleich die maximale Baumtiefe und Knotenanzahl hart festgelegt werden (effektiver).

Das leuchtet mir nur bedingt ein, Regularisierung / Strafterme sind bei Baum-basierten Verfahren eigentlich üblich. Da wäre interessant, was GP da so besonders macht, dass Regularisierung nicht so gut funktioniert. Fixe Chromosonen/Genanzahl scheint mir eine recht harte Einschränkung zu sein im Vergleich zu z.B. kontinuierlichen Straftermen.

Am 27.6.2021 um 22:44 schrieb PeWi:

Wenn man Crossovers nur über Chromosomen erlaubt, nicht aber innerhalb von ihnen, dann bleibt der Teilbaum innerhalb jedes Chromosoms weitgehend stabil. Sinnvolle Teilbäume (Building Blocks) können dadurch viele Generationen überdauern und laufen nicht so leicht Gefahr, durch die Eingriffe der künstlichen Evolution zerstört zu werden. (Das ist allerdings bereits eine Weiterentwicklung des ursprünglichen GEP.)

 

Spannend, das ist ja durchaus anders als sonst bei reinforced learning und andere, wo man ja eher mit Gewichtungen arbeitet. Meine Intuition wäre gewesen: Man fängt ganz kleinteilig an und mutiert einzelne Operationen und vergibt jeweils Scores und mutiert dann graduell immer grobkörniger. Also z.B. [+*xxy] mutiert man erst zu [+*xyy] oder [+*xxx] und notiert sich, wie gut jeweils [*xy], [*xx] und [*yy] abschneiden = der Score und je nach Score tauchen diese Bausteine dann später mit höhrer wahrscheinlichkeit wieder auf, weil man im zweiten Schritt nicht mehr nur Blätter/Terminals, sondern eben function austauscht (welche aber nur terminals als children haben, also "fast ganz unten" im Baum sind).
Also sprich, wir fangen an mit Ursuppe, alles ist wild, dann nach und nach werden aber Teile immer kohärenter und wenn man beim Menschen angelangt ist, dann wuselt man kaum noch im Genom an sich herum, sondern versucht halt ob nen dritter Arm praktisch wäre oder zwei Daumen pro hand.
Aber vllt funktioniert das schlicht nicht :D.

Am 28.6.2021 um 14:43 schrieb PeWi:

buy = price > ema_short + 3*ATR

Das ist dann quasi ein einzelnes Chromoson?

Am 28.6.2021 um 14:43 schrieb PeWi:

Ich werde wohl vorerst trotz der bekannten Nachteile beim ursprünglichen GP bleiben, weil GEP und seine Abkömmlinge noch aufwendiger sind.

Da muss es doch Implementierungen für geben!

Bearbeitet von Arther
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.