Zum Inhalt springen

Deep Reinforcement Learning


PeWi

Empfohlene Beiträge

On 10/19/2020 at 2:51 PM, skunk said:

Die KI wird dann anfangen ihre Entscheidung so zu optimieren, dass ein möglichst hoher Reward dabei raus kommt. Als Entwickler muss ich der KI lediglich sagen welche Indikatoren ich als Input für Sinnvoll halte, wie viele Neuronen ich vernetzen möchte und auf wie vielen Ebenen ich diese Neuronen anordnen möchte. Am Ende noch eine Reward Funktion und den Rest erlernt die KI dann selbstständig.

Ein nicht uninteressantes Paper zu dem Thema: "Using Reinforcement Learning in the Algorithmic Trading Problem"
https://link.springer.com/article/10.1134/S1064226919120131

Da kriegt man dann auch mit, dass das ganze doch noch ein Stück komplizierter ist, als das deine obige Beschreibung vermuten lässt. 😉

Edit: Da ist auch ein Link zu einem Github-Repo dabei:
https://github.com/ThibautTheate/An-Application-of-Deep-Reinforcement-Learning-to-Algorithmic-Trading
Klasse, falls man das nachstellen möchte, aber auch einfach zum Schmökern interessant.

Bearbeitet von PeWi
Link zu diesem Kommentar
Auf anderen Seiten teilen

On 10/24/2020 at 10:46 PM, PeWi said:

Edit: Da ist auch ein Link zu einem Github-Repo dabei:
https://github.com/ThibautTheate/An-Application-of-Deep-Reinforcement-Learning-to-Algorithmic-Trading
Klasse, falls man das nachstellen möchte, aber auch einfach zum Schmökern interessant.

Nachtrag: Ich habe endlich meine vor zwei Jahren für neuronale Netze gekaufte Grafikkarte eingeweiht 😉, um obiges selber nachvollziehen zu können.
Hat - trotz anderer Python-Version - nahezu auf Anhieb funktioniert.
Mal schauen, wie aufwendig es ist, dem Programm BTC als eine der Aktien unterzuschieben ... 😜

 

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

1 hour ago, skunk said:

Habe ich das richtig verstanden. Du hast dich gerade freiwillig gemeldet um mir bzw uns zu zeigen wie das geht?

😜

1 hour ago, skunk said:

Was muss ich installieren um mitmachen zu dürfen?

Wenn du mit Grafikkarten-Unterstützung mitmachen willst, was sich aus Geschwindigkeitsgründen empfiehlt, dann musst du erst das ganze Cuda- und cuDNN-Gedöns installieren. Vorausgesetzt, du hast eine NVidia-Karte, AMD geht meines Wissens nicht.

1)

Das Python-Programm nutzt PyTorch als NN-Basis, deswegen habe ich als erstes Cuda in der Version 10.1 Update2 installieren müssen:

https://developer.nvidia.com/cuda-10.1-download-archive-update2

Wenn man sein OS auswählt, werden Guides angezeigt, die bei meinem Linux out-of-the-box funktioniert haben. Vermutlich wird das bei Windows ähnlich sein.

2)

Danach muss man noch cuDNN, den "Treiber" für die neuronalen Netze, herunterladen und installieren, wozu man einen Developer-Account bei NVidia haben bzw anlegen muss (ich habe bei den notwendigen persönlichen Angaben frei phantasiert).
Die cuDNN-Version muss zur Cuda-Version passen, ich habe 8.04 genommen.

Wenn ich mich recht erinnere - das war eine sehr späte nächtliche Sitzung - haben die beiden Installationen eine ganze Weile gedauert, v.a. Cuda hat dann einen Haufen vor sich hin kompiliert.

 

Zum obigen Deep Reinforcement Learning-Projekt:

3)

Wer noch kein 64Bit-Python hat, sollte das zuerst noch installieren, idealerweise in der vom Projekt erwünschten Version 3.7.4.
Ich habe auf meinem Linux-PC 3.6.9 drauf, damit ging es auch.

4)

Dann ein virtuelles Environment anlegen:

Windows:  python -m venv .env
Linux:  python3 -m venv .env

Ggfs muss unter Linux zuvor das Paket für virtuelle Umgebungen noch installiert werden:
sudo pip3 install virtualenv

Aktiviert wird die virtuelle Umgebung mit

Windows:  .env\Scripts\activate.bat
Linux:  source .env/bin/activate

Diese virtuelle Umgebung enthält eine recht alte Version des Python-Paketmanagers pip, weshalb man den zuerst updaten muss:

pip install --upgrade pip

5)

Als nächstes kopiert man sich das Projekt von Github runter. Wer die Git-Tools installiert hat, macht

git clone https://github.com/ThibautTheate/An-Application-of-Deep-Reinforcement-Learning-to-Algorithmic-Trading.git

die anderen wählen auf Github "download zip" aus und entpacken das im Projektverzeichnis.

6)

Anschließend muss man die zusätzlichen Python-Bibliotheken installieren, was üblicherweise einfach mit

pip install -r requirements.txt

funktionieren würde - hier ist aber eine Kleinigkeit in der Datei   requirements.txt   zu korrigieren; die Zeile

pytorch

muss man in

torch

abändern, weil der Downloadname für PyTorch nur "torch" ist; und wer so wie ich nicht die verlangte Python-Version 3.7.4 hat, muss noch die Versionsangabe auskommentieren:

Aus   python==3.7.4   muss man dann   #python==3.7.4   machen.

7)

Noch ein letzter Stolperstein - die Bibliothek torch ist die CPU-only Version. Wer die NVidia/Cuda/cuDNN-Version möchte, muss    torch    erst wieder deinstallieren

pip3 uninstall torch

und die Cuda-Version installieren:

pip install torch==1.7.0+cu101 torchvision==0.8.1+cu101 torchaudio==0.7.0 -f https://download.pytorch.org/whl/torch_stable.html

8.)

Noch ein allerletzter Stolperstein - man muss im Projektverzeichnis noch ein Unterverzeichnis Figures anlegen, sonst stürzt das Python-Programm ab, wenn es seine Ergebnisse abspeichern möchte.

 

Fertig

 

Dann kann man die Geschichte endlich starten, z.B: für Apple:

python main.py -strategy TDQN -stock Apple

Bei mir (Cuda mit Geforce GTX 1060) hat das etwa um die fünf Minuten gedauert. Ohne Cuda wird es wohl mindestens um den Faktor 10 längern dauern, eher mehr?

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

13 hours ago, PeWi said:

7)

Noch ein letzter Stolperstein - die Bibliothek torch ist die CPU-only Version. Wer die NVidia/Cuda/cuDNN-Version möchte, muss    torch    erst wieder deinstallieren

pip3 uninstall torch

und die Cuda-Version installieren:

pip install torch==1.7.0+cu101 torchvision==0.8.1+cu101 torchaudio==0.7.0 -f https://download.pytorch.org/whl/torch_stable.html

Nachträge:

Obigen Befehl hatte ich nach schnellem Googlen aus dem Internet übernommen. Vermutlich kann man sich die Vision- und Audio-Geschichten sparen und nur die Kernbibliothek installieren:

pip install torch==1.7.0+cu101 -f https://download.pytorch.org/whl/torch_stable.html


In meiner langen Anleitung kam vielleicht nicht gut raus, dass man alles auch ohne NVidia-Karte machen kann. (Notfalls muss man das Python-Programm dann halt über Nacht laufen lassen.) Für diesen Fall auf die Installation von Cuda und cuDNN verzichten und die CPU only-Version von PyTorch nehmen. Mehr Änderungen sollten es nicht sein.


Warum die NN-Geschichten AMD-Karten nicht unterstützen, kann ich nicht genau sagen. Mit OpenCL gäbe es einen universalen Standard, der unter der Haube CPUs und GPUs verschiedener Hersteller nutzen kann. Ich bilde mir ein, mal gelesen zu haben, dass Cuda als hersteller-spezifische Schicht merklich performanter wäre als das allgemeinere OpenCL, weswegen die großen NN-Libs wie TensorFlow und PyTorch nur auf Cuda setzen würden.

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 1 Stunde schrieb PeWi:

Notfalls muss man das Python-Programm dann halt über Nacht laufen lassen

ganz so schlimm ists auf CPU auch wieder nicht... bei mir waren es knapp ne Stunde auf der CPU (laptop ist schon bissle älter) 

und danke ! habs jetzt nur mal laufen lassen, aber noch nicht den Source angeschaut, was das wirklich gemacht wird...  bzw. wie
das Ergebnis zu interpretieren ist.

  • Like 1
Link zu diesem Kommentar
Auf anderen Seiten teilen

2 hours ago, ¯\_(ツ)_/¯ said:

und danke !

Einen doppelten Dank zurück!

Zum einen, dass ich mir gestern Abend nicht umsonst die halbe Stunde genommen habe, alles noch mal nachzuvollziehen und niederzuschreiben, sondern dass die Anleitung tatsächlich genutzt wurde ... 😜

Und zum zweiten, dass anscheinend keine großen Böcke in meiner Anleitung sind, sonst hättest du die sicher angemerkt.

Bearbeitet von PeWi
Reihenfolge getauscht
Link zu diesem Kommentar
Auf anderen Seiten teilen

So, es waren nur punktuelle Anpassungen notwendig, um dem Programm Bitcoin unterzuschieben.

Das größere Problem war es, passende historische Werte aufzutreiben. Ich habe nach ein bisschen Suchen immerhin vollständige Daten ab dem 28.11.2014 gefunden. Bei weiter zurückreichenden Daten fehlte das Volumen, insofern konnte ich die nicht nehmen.

Damit ist das Verhältnis Trainingsdaten zu Testdaten deutlich schlechter, bei den Aktien lernt das Programm an Tagesdaten aus 6 Jahren (2012 bis 2017 incl.) und testet über die zwei Jahre 2018 u. 2019. Beim BTC sind es somit nur drei Jahre Daten zum Lernen.

Dennoch - das Ergebnis:

(.env) pewi@pewili:~/PycharmProjects/drl_thibaut$ python main.py -strategy TDQN -stock BTC
checking for file 'Data/BTC_2012-1-1_2018-1-1.csv'
loading data from file 'Data/BTC_2012-1-1_2018-1-1.csv'

checking for file 'Data/BTC_2018-1-1_2020-1-1.csv'
loading data from file 'Data/BTC_2018-1-1_2020-1-1.csv'

Training progression (hardware selected => cuda:0):
100%|███████████████████████████████████████████████████████████████| 50/50 [07:47<00:00,  9.34s/it]
╒═══════════════════════════╤══════════╕
│   Performance Indicator   │   TDQN   │
╞═══════════════════════════╪══════════╡
│    Profit & Loss (P&L)    │ 29560584 │
├───────────────────────────┼──────────┤
│     Annualized Return     │  90.93%  │
├───────────────────────────┼──────────┤
│   Annualized Volatility   │  56.05%  │
├───────────────────────────┼──────────┤
│       Sharpe Ratio        │  2.543   │
├───────────────────────────┼──────────┤
│       Sortino Ratio       │  3.940   │
├───────────────────────────┼──────────┤
│     Maximum Drawdown      │  12.00%  │
├───────────────────────────┼──────────┤
│ Maximum Drawdown Duration │  2 days  │
├───────────────────────────┼──────────┤
│       Profitability       │  54.64%  │
├───────────────────────────┼──────────┤
│ Ratio Average Profit/Loss │  14.334  │
├───────────────────────────┼──────────┤
│         Skewness          │  1.082   │
╘═══════════════════════════╧══════════╛
checking for file 'Data/BTC_2018-1-1_2020-1-1.csv'
loading data from file 'Data/BTC_2018-1-1_2020-1-1.csv'

╒═══════════════════════════╤══════════╕
│   Performance Indicator   │   TDQN   │
╞═══════════════════════════╪══════════╡
│    Profit & Loss (P&L)    │  -30799  │
├───────────────────────────┼──────────┤
│     Annualized Return     │  9.58%   │
├───────────────────────────┼──────────┤
│   Annualized Volatility   │  57.88%  │
├───────────────────────────┼──────────┤
│       Sharpe Ratio        │  0.126   │
├───────────────────────────┼──────────┤
│       Sortino Ratio       │  0.185   │
├───────────────────────────┼──────────┤
│     Maximum Drawdown      │  68.43%  │
├───────────────────────────┼──────────┤
│ Maximum Drawdown Duration │ 676 days │
├───────────────────────────┼──────────┤
│       Profitability       │  40.38%  │
├───────────────────────────┼──────────┤
│ Ratio Average Profit/Loss │  1.360   │
├───────────────────────────┼──────────┤
│         Skewness          │  1.301   │
╘═══════════════════════════╧══════════╛

 

Ein paar ausgewählte Grafiken dazu. Zuerst der Fortschritt über die Zahl der Durchläufe (BTC_TrainingTestingPerformance.png). Man sieht schön, wie ca. ab Runde 25 das Overfitting startet - das Shape Ratio der Trainingsdaten steigt weiter, während das Sharpe Ratio der Testdaten (2018 bis 2020) wieder fällt. Man sollte also die Zahl der "Episodes" auf ca. 22 bis 25 begrenzen.

Passend dazu der Verlauf von Preis und Accountvermögen (BTC_Rendering.png). Aufgrund des Overfittings kommt der Agent mit den neuen Daten ab 2018 absolut nicht zurecht. Der Verlauf des Vermögens ist quasi ein einziger Drawdown.

(Ich mach nachher mal einen neuen Test mit 'nem Splitzeitpunkt 1.1.2019, damit das Verhältnis Trainings- und Testdaten ausgewogener ist und suche auch eine günstige Zahl an Episoden raus, damit man das Potential dieser Methode ein bisschen besser sehen kann.)

 

 

BTC_TrainingTestingPerformance.png

BTC_Rendering.png

Bearbeitet von PeWi
Tippfehler
  • Love it 2
Link zu diesem Kommentar
Auf anderen Seiten teilen

Es gibt inzwischen ziemlich komplexe Ansätze, um das ewige Problem "buy low - sell high" etwas in den Griff zu kriegen.

Einer davon ist der Rückgriff auf maschinelles Lernen, das sich in diverse Untergruppen aufteilt. In diesem Thread soll es - ausgelöst durch ein Paper - um Deep Reinforcement Learning gehen.

https://link.springer.com/article/10.1134/S1064226919120131

In diesem Paper wird ein in der Sprache Python realisierter Ansatz vorgestellt, einen "Agenten" selbständig traden lernen zu lassen. Da die Sourcen zum Projekt auf Github gestellt wurden, kann man das Projekt runterladen und selber nachvollziehen.

https://github.com/ThibautTheate/An-Application-of-Deep-Reinforcement-Learning-to-Algorithmic-Trading

Eine Anleitung, was bis zur Lauffähigkeit alles gemacht werden muss, steht in einem der nachfolgenden Posts.

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

24 minutes ago, Männergruppe Monk said:

Dein Artikel gibts hier umsonst :

https://arxiv.org/ftp/arxiv/papers/2002/2002.11523.pdf

Das ist aber ein anderer Artikel - macht aber nix, mehr Input ist immer besser.
(BTW: Den ursprünglichen Artikel konnte ich zumindest am 24.10. über den Springer-Link ohne weiteres umsonst herunterladen. Jetzt nicht mehr.)

24 minutes ago, Männergruppe Monk said:

Das Python Programm ist sehr schlecht

Das habe ich auch schon festgestellt. 😉

Das Paper weckt anfangs hohe Erwartungen und schrumpft dann in der Realisierung auf das Minimum zusammen. 😉

Aber: Es ist der Source dabei. Damit hat man zumindest einen Startpunkt, mit DRL anzufangen ...

P.S.: Danke @Amsifür deine ultraschnelle Reaktion!

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

7 minutes ago, Männergruppe Monk said:

Wenn Du Deine Daten Dir mal genau ansiehst, Max Drawdown 68%, was meinst Du, sollte man sowas zum Trading einsetzen ?

Natürlich nicht. Wie auch die Charts nachdrücklich zeigen, tradet dieser Agent ziemlich grauenhaft. 😉

Es ging bisher ausdrücklich nur darum, überhaupt mal einen Fuß in die Tür zu bekommen, und einem lauffähigen DRL-Programm BTC unterzujubeln. Damit kann man dann eine Weile spielen und herumbasteln. Und wenn man dann ein bisschen Ahnung erworben hat, kann man sich mit deinen besseren Geschichten beschäftigen.

Und ich möchte erst mal ein bisschen in das Thema hineinschnuppern, auf einem Level, den ich noch bewältigen kann. 😉
"Dein" Paper ist sicherlich qualitativ besser, aber es hilft mir (nach erstem Lesen) auf meinem momentanen Kenntnisstand kein Stück weiter.

Link zu diesem Kommentar
Auf anderen Seiten teilen

2 hours ago, PeWi said:

Das größere Problem war es, passende historische Werte aufzutreiben. Ich habe nach ein bisschen Suchen immerhin vollständige Daten ab dem 28.11.2014 gefunden. Bei weiter zurückreichenden Daten fehlte das Volumen, insofern konnte ich die nicht nehmen.

Damit ist das Verhältnis Trainingsdaten zu Testdaten deutlich schlechter, bei den Aktien lernt das Programm an Tagesdaten aus 6 Jahren (2012 bis 2017 incl.) und testet über die zwei Jahre 2018 u. 2019. Beim BTC sind es somit nur drei Jahre Daten zum Lernen.

Um dem Problem mit den wenigeren Daten Herr zu werden, habe ich dem Programm testweise mal 4h-Daten vorgesetzt. Die habe ich ab Mitte Februar 2015, womit ich dem Programm fast dreimal so viele Daten vorsetzen kann als bei den ursprünglichen Aktien-Tageskursen ab 2012. Das dürfte auch die Probleme mit dem Overfitting ein bisschen reduzieren.

2 hours ago, PeWi said:

(Ich mach nachher mal einen neuen Test mit 'nem Splitzeitpunkt 1.1.2019, damit das Verhältnis Trainings- und Testdaten ausgewogener ist und suche auch eine günstige Zahl an Episoden raus, damit man das Potential dieser Methode ein bisschen besser sehen kann.)

Es wird ein bisschen besser, aber der Drawdown liegt immer noch bei fast 60%. Und - man merkt, dass die Ergebnisse ziemlich streuen, wenn man die Läufe wiederholt. Ich hatte bei wiederholten Läufen - bei gleichen Parametern - Werte von ca. 3% bis 45% bei "Annualized Return".  Wenig verwunderlich, sowohl bei den (v.a. anfänglichen) Entscheidungen des Agenten als auch bei der Erzeugung der Anfangsgewichte des Netzes spielt der Zufall eine große Rolle. Dass sich das vernünftig ausmittelt, dazu hatten wir bei den bisherigen Tageskerzen vermutlich viel zu wenig Daten. Mal schauen, ob das jetzt mit 4h-Kerzen besser wird?

  • Thanks 1
Link zu diesem Kommentar
Auf anderen Seiten teilen

Das hört sich alles unheimlich interessant an. 👍

Leider habe ich nicht die nötige Zeit, da jetzt tiefer einzusteigen. Obwohl es "schon juckt".
Vielleicht ist Ende nächstes Jahr das aktuelle Projekt abgeschlossen und ich kann nachziehen.

@PeWi also nicht gleich entmutigen lassen. Ich z.B. bin "nur" Mitleser. 

Vielleicht noch ein Gedanke. Wenn man nach Analyse usw. einsteigt und an Markt tätig wird, greift man auch in das System ein. Es kommt also zur Rückkopplung. (Vielleicht auch gleich mit einplanen. 😉)

Axiom

 

  • Like 1
Link zu diesem Kommentar
Auf anderen Seiten teilen

54 minutes ago, PeWi said:

Um dem Problem mit den wenigeren Daten Herr zu werden, habe ich dem Programm testweise mal 4h-Daten vorgesetzt. Die habe ich ab Mitte Februar 2015, womit ich dem Programm fast dreimal so viele Daten vorsetzen kann als bei den ursprünglichen Aktien-Tageskursen ab 2012. Das dürfte auch die Probleme mit dem Overfitting ein bisschen reduzieren.

Okay, das mit dem Overfitting hat sich mit den 4h-Daten tatsächlich entschärft - siehe Bild 1

Allerdings tappt er jetzt in die Buy-and-Hold-Falle, d.h. er tradet praktisch nicht mehr, sondern kauft anfangs und hält nur noch, weswegen die Kapitalkurve schlicht dem Preis folgt - siehe Bild 2. (Was man dagegen macht, weiß ich noch nicht und muss erst ein bisschen recherchieren.)

Edit: 2 Möglichkeiten auf die Schnelle gefunden:
- zusätzlich positiven Reward geben, wenn bei fallendem Preis keine Coins im Besitz sind
- Reward senken, je länger die Coins im Besitz bleiben

Noch eine (aufwendigere) Möglichkeit wäre, immer das jeweilige Sharpe Ratio mitzuführen und bei Verbesserung/Verschlechterung den Reward zu erhöhen/zu senken.

 

BTC_TrainingTestingPerformance.png

BTC_Rendering.png

Bearbeitet von PeWi
Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 1 Minute schrieb PeWi:

Okay, das mit dem Overfitting hat sich mit den 4h-Daten tatsächlich entschärft - siehe Bild 1

Allerdings tappt er jetzt in die Buy-and-Hold-Falle, d.h. er tradet praktisch nicht mehr, sondern kauft anfangs und hält nur noch, weswegen die Kapitalkurve schlicht dem Preis folgt - siehe Bild 2. (Was man dagegen macht, weiß ich noch nicht und muss erst ein bisschen recherchieren.)

 

KI sagt damit, das Hodler die beste Strategie ist. 👍 👍😉
Hat sich in der "rauen Wirklichkeit" im Laufe der "Evolution" auch so bewährt.

Schau mal, dass Du das System so trimmen kannst, dass es die Oberwellen ausnutzt.

Axiom

Link zu diesem Kommentar
Auf anderen Seiten teilen

53 minutes ago, Axiom0815 said:

KI sagt damit, das Hodler die beste Strategie ist. 👍 👍😉
Hat sich in der "rauen Wirklichkeit" im Laufe der "Evolution" auch so bewährt.

Soso.

Bei wievielen Coins von den mehreren Tausend hat sich diese Strategie nochmal so toll bewährt?
Scheint doch wohl eher eine ausgesprochene Minderheiten-Strategie zu sein ... 😜

Deswegen hat man ja das Traden erfunden - damit man auch bei den anderen Coins den einen oder anderen Gewinn erzielen kann. 😉

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 5 Minuten schrieb PeWi:

Soso.

Bei wievielen Coins von den mehreren Tausend hat sich diese Strategie nochmal so toll bewährt?
Scheint doch wohl eher eine ausgesprochene Minderheiten-Strategie zu sein ... 😜

Deswegen hat man ja das Traden erfunden - damit man auch bei den anderen Coins den einen oder anderen Gewinn erzielen kann. 😉

Du weißt doch 😉, bei einen Bitcoin-Maximalist gibt es nur einen wahren Coin. 😂

Also, wünsche Dir weiterhin viel Erfolg und tauche wieder in die schweigende Mitleserschaft ab.

Axiom

  • Like 1
Link zu diesem Kommentar
Auf anderen Seiten teilen

10 minutes ago, Männergruppe Monk said:

Ansonsten, Du wirst mit einfachen Tharp Algos wesentlich bessere Trading Ergebnisse in Cryptos erzielen.

Mit Tharp habe ich mich nach den Empfehlungen deiner vorhergehenden Inkarnation eine ganze Weile beschäftigt.
Jetzt ist Deep Learning interessant und dran.

13 minutes ago, Männergruppe Monk said:

Schau Dir die Videos bei Matlab an, dann verstehst Du wesentlich mehr, besonders was RL angeht.

Videos nerven meistens, ich lese viel lieber. Hast du da Tipps für gute Bücher, Paper oder Webseiten?

Link zu diesem Kommentar
Auf anderen Seiten teilen

1 hour ago, Männergruppe Monk said:

Du musst auch entscheiden, ob Du die Anwendung verstehen willst oder die unterliegenden Techniken. Mich zum Beispiel interessiert es nicht, wie er lernt, sondern wie kann ich bessere Ergebnisse erzielen.

Die allertiefsten Innereien muss man natürlich nicht verstehen, aber man sollte zumindest soviel Grundlagen haben, um das Zusammenspiel der Teile zu verstehen, damit man einzelne Komponenten tunen bzw gegen andere austauschen kann. Meine Erfahrung bisher ist, dass man ohne ein gewisses Basisverständnis einfach leicht in den oberflächlichen Details hängenbleibt und nicht mehr weiterkommt.

Beim momentanen Source aus dem ursprünglichen Paper würde ich z.B. gerne die Reward-Funktionen verändern, kann das aber nicht, weil ich noch nicht verstehe, wie der Reward intern gebildet wird. Ich sehe nur, dass der Reward aus dem Replaybuffer geholt wird bzw hineingeschoben wird, aber ich finde nicht, wo er tatsächlich gebildet wird.

Wer in diesem konkreten Fall mehr Durchblick hat und mir einen Tipp dazu geben - ich würde mich freuen!

Bearbeitet von PeWi
Link zu diesem Kommentar
Auf anderen Seiten teilen

On 11/1/2020 at 5:31 PM, PeWi said:

Beim momentanen Source aus dem ursprünglichen Paper würde ich z.B. gerne die Reward-Funktionen verändern, kann das aber nicht, weil ich noch nicht verstehe, wie der Reward intern gebildet wird. Ich sehe nur, dass der Reward aus dem Replaybuffer geholt wird bzw hineingeschoben wird, aber ich finde nicht, wo er tatsächlich gebildet wird.

Okay, endlich gefunden. In der Methode step() der Klasse TradingEnv in der gleichnamigen Datei tradingEnv.py.

Der Reward ist wie im Paper beschrieben einfach der relative Preisunterschied zwischen dem vorangegangenen Zeitpunkt und dem jetzigen Zeitpunkt. (Falls der Agent gerade short ist, wird das Vorzeichen invertiert.)

 

  • Thanks 1
Link zu diesem Kommentar
Auf anderen Seiten teilen

Wieder ein Update: Ich habe in der Reward-Funktion die "Strafen" für Verluste auf 150% erhöht in der Hoffnung, dass der Agent dann vorsichtiger wird und keine so tiefen Drawdowns mehr zulässt.

Der Reward pro Schritt bezieht sich immer nur auf den Wechsel von einer Candle zur nachfolgenden, insofern kann sich auch eine an sich recht gute Tradingstrategie einen größeren negativen Reward einfangen, wenn sie bei einer großen Candle mal falsch positioniert war.
Insofern wäre es vermutlich besser, wenn ich den relativen Gewinn zum Kaufpreis/Kaufzeitpunkt bewerten würde und nicht jede einzelne Candle. (Edit: Nach längerem Quelltextstudium: Da aber alle Rewards eines Tradingsdurchlaufes (Episode) zusätzlich zu einem Gesamtreward aufsummiert werden, und der ebenfalls in das Verhalten des Agenten eingeht, werden Verläufe mit großen Drawdowns oder vielen kleinen Drawdowns in Summe auch stärker abgestraft als einzelne Ausrutscher einer ansonsten guten Strategie. Sowas ähnliches stand zwar in der Artikelserie zu DRL, die ich gerade lese, aber hier in diesem Projekt stimmt es nicht.)

Das Ergebnis ist auch weniger schlimm als bei meinem vorgestern geposteten Ergebnis. Da mehrere Läufe aber bisher stark variierende Ergebisse gebracht haben, darf man auf dieses aktuelle Ergebnis auch nicht zu sehr bauen. 😉
(Noch ein Hinweis: Da das Programm für Tagescandles gebaut ist, ich momentan aber mit 4h-Daten arbeite, muss man die Zeitangaben (Länge Drawdown) in der Auswertung durch 6 teilen!)
 

$ python main.py -strategy TDQN -stock BTC
checking for file 'Data/BTC_2012-1-1_2019-1-1.csv'
loading data from file 'Data/BTC_2012-1-1_2019-1-1.csv'

checking for file 'Data/BTC_2019-1-1_2020-1-1.csv'
loading data from file 'Data/BTC_2019-1-1_2020-1-1.csv'

Training progression (hardware selected => cuda:0):
100%|███████████████████████████████████████████████████████████████| 40/40 [41:06<00:00, 61.67s/it]
╒═══════════════════════════╤═══════════╕
│   Performance Indicator   │   TDQN    │
╞═══════════════════════════╪═══════════╡
│    Profit & Loss (P&L)    │  4219284  │
├───────────────────────────┼───────────┤
│     Annualized Return     │  60.32%   │
├───────────────────────────┼───────────┤
│   Annualized Volatility   │  29.02%   │
├───────────────────────────┼───────────┤
│       Sharpe Ratio        │   0.533   │
├───────────────────────────┼───────────┤
│       Sortino Ratio       │   0.625   │
├───────────────────────────┼───────────┤
│     Maximum Drawdown      │  59.81%   │
├───────────────────────────┼───────────┤
│ Maximum Drawdown Duration │ 1695 days │
├───────────────────────────┼───────────┤
│       Profitability       │  43.32%   │
├───────────────────────────┼───────────┤
│ Ratio Average Profit/Loss │   1.509   │
├───────────────────────────┼───────────┤
│         Skewness          │  -0.861   │
╘═══════════════════════════╧═══════════╛
checking for file 'Data/BTC_2019-1-1_2020-1-1.csv'
loading data from file 'Data/BTC_2019-1-1_2020-1-1.csv'

╒═══════════════════════════╤═══════════╕
│   Performance Indicator   │   TDQN    │
╞═══════════════════════════╪═══════════╡
│    Profit & Loss (P&L)    │  203806   │
├───────────────────────────┼───────────┤
│     Annualized Return     │  68.13%   │
├───────────────────────────┼───────────┤
│   Annualized Volatility   │  22.02%   │
├───────────────────────────┼───────────┤
│       Sharpe Ratio        │   0.442   │
├───────────────────────────┼───────────┤
│       Sortino Ratio       │   0.557   │
├───────────────────────────┼───────────┤
│     Maximum Drawdown      │  43.84%   │
├───────────────────────────┼───────────┤
│ Maximum Drawdown Duration │ 1366 days │
├───────────────────────────┼───────────┤
│       Profitability       │  41.23%   │
├───────────────────────────┼───────────┤
│ Ratio Average Profit/Loss │   1.701   │
├───────────────────────────┼───────────┤
│         Skewness          │   0.379   │
╘═══════════════════════════╧═══════════╛

Noch der Chart dazu:

 

BTC_Rendering.png

Bearbeitet von PeWi
Erkenntnisse aus dem Source
  • Thanks 2
Link zu diesem Kommentar
Auf anderen Seiten teilen

11 minutes ago, Männergruppe Monk said:

Sag mal, was machst Du da eigentlich. Bist Du Dir sicher, dass Du das Konzept den Reinforced Learning verstanden hast ?

Habe ich das denn je behauptet? 😜


Männergruppe Monk, es wäre schön, wenn du irgendwann mal zu einem brauchbareren Diskussionsteilnehmer heranreifen würdest.

Du magst sicherlich viel wissen, aber du kannst - sinnbildlich gesprochen - deine PS einfach nicht vernünftig auf die Strasse bringen.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Am 1.11.2020 um 09:33 schrieb PeWi:

Man sieht schön, wie ca. ab Runde 25 das Overfitting startet

Ich habe leider noch nicht die Zeit gefunden deine Beispiele gleich selber nach zu stellen. Das muss ich leider weiterhin auf später verschieben. Ich finde es aber ganz praktisch, dass du gleich das machst was ich auch ausprobiert hätte :D

Zum Thema Overfitting gab es ein paar interessante Ansätze einige Neuronen zeitweise zufällig zu deaktivieren. Das hat zur Folge, dass die restlichen Neuronen plötzlich gezwungen sind den Ausfall aus zu gleichen. Das soll sich positiv auf das Overfitting Problem auswirken.

  • Like 2
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.