Jump to content

Bot Trading mit genetischen Algorithmen


Empfohlene Beiträge

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?

 

Link zum Beitrag
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
Link zum Beitrag
Auf anderen Seiten teilen
Geschrieben (bearbeitet)
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 zum Beitrag
Auf anderen Seiten teilen
vor 29 Minuten schrieb PeWi:

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.

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.

 

Ein Trendsystem bei Coins wird nur dann funktionieren, wenn Du das mit breiter Granularität machst und die Stop Losses so setzt, dass Du es schon wieder vergessen kannst.

Aber, es reicht ja 1 postiver Trade bei 20 Versuchen, wenn Du dann die Verluste der anderen deckst. Das ist ein ganz normaler Ansatz, gibt so eine Art Sägezahn aussehen der Equity Kurve. Aber selbst das wird nur funktionieren, wenn Du eine Pyramide aufbaust, also nachkaufst und das Risiko im Griff hast. Mach ich das bei Coins ? Nein ...

Sehr viel besser und effektiver. Momentum Ansatz. Da sortierst man alle Coins mit dem Momentum vor und schlägt da zu, wo die gerade abgehen, wenn der Trigger kommt. da kann/muss man mit kleinen Stop Losses arbeiten. 

Oder einfach kaufen, vergessen und warten und hoffen. Dazu brauche ich aber diese Diskussion nicht.

 

Link zum Beitrag
Auf anderen Seiten teilen
  • 2 weeks later...
Geschrieben (bearbeitet)
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
Link zum Beitrag
Auf anderen Seiten teilen
vor 16 Minuten schrieb PeWi:

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.

Ich habe gerade mal ein NN mit GA durchrechnen lassen, um die Gewichtung zu optimieren. Sehe keinen Sinn drin, wenn man Ergebnisse haben will.

Aber ich nehme an, es bringt Dir Spass, sich mit solchen Konzepten zu beschäftigen. Sonst kannst Du auch einfach fertige Software nehmen und Ergebnisse ansehen.

 

 

 

Link zum Beitrag
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.

 

Link zum Beitrag
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
Link zum Beitrag
Auf anderen Seiten teilen
vor 2 Stunden schrieb Arther:

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.

Hast Du gesehen, wann das eingereicht wurde ? In der Tradingwelt sind 14-15 Jahre alte Paper ziemlich veraltet.

bearbeitet von Männergruppe Monk
Link zum Beitrag
Auf anderen Seiten teilen
  • 2 weeks later...

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.)

Link zum Beitrag
Auf anderen Seiten teilen

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Clear editor

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...

Wichtige Information

Wir speichern Cookies auf Ihrem Gerät, um diese Seite besser zu machen. Sie können Ihre Cookie-Einstellungen anpassen, ansonsten gehen wir davon aus, dass Sie damit einverstanden sind. In unseren Datenschutzerklärungen finden sie weitere Informationen.