Monday 20 November 2017

Lua Handelssystem


Guile ist eine Programmiersprache Guile wurde entwickelt, um Programmierern dabei zu helfen, flexible Anwendungen zu erstellen, die von Benutzern oder anderen Programmierern mit Plug-Ins, Modulen oder Scripts erweitert werden können. Mit Guile können Sie Anwendungen und Spiele für den Desktop erstellen. das Netz. Die Befehlszeile. und mehr. Codebeispiele Guile ist eine Implementierung der Programmiersprache Programm, die die Revised 5 und die meisten der überarbeiteten 6 Sprachberichte sowie viele SRFIs unterstützt. Es kommt auch mit einer Bibliothek von Modulen, die zusätzliche Funktionen wie einen HTTP-Server und Client, XML-Parsing und objektorientierte Programmierung bieten. Hallo Weltprogramm Definiere eine Variable namens Name. Komm zu den Texten Hallo. Name. und. Zusammen, um den Gruß Hallo Welt zu bilden. Und sie auf dem Bildschirm anzeigen. Importieren von Modulen Importieren Sie das Modul srfi-19 und nutzen Sie die Funktionen, um das aktuelle Datum und die Uhrzeit im Format WEEKDAY, MONTH MONTHDAY YEAR HOUR: SECOND anzuzeigen. Hallo HTTP-Server Führen Sie einen Webserver aus, der eine Antwort mit dem Text quotHello Worldquot an jede von HTTP-Clients gesendete Anfrage zurücksendet. Öffnen Sie localhost: 8080, um das Ergebnis zu sehen. Guile ist eine Erweiterungssprache Plattform Guile enthält einen effizienten Compiler und eine virtuelle Maschine. Es kann aus der Box verwendet werden, um Programme in Schema zu schreiben, oder kann leicht mit C - und C-Programmen integriert werden. Guile ist die GNU Ubiquitous Intelligent Language für Extensions und die offizielle Erweiterungssprache des GNU-Projekts. Verlängerung von Bewerbungen Zusätzlich zu Scheme enthält Guile Compiler-Frontends für ECMAScript und Emacs Lisp (Unterstützung für Lua), was bedeutet, dass Ihre Bewerbung in der für Ihre Benutzerbasis am besten geeigneten Sprache (oder Sprachen) erweitert werden kann. Und Guileaposs-Tools für das Parsen und Kompilieren werden als Teil des Standard-Modulsatzes ausgesetzt, so dass zusätzliche Sprachen hinzugefügt werden können, ohne eine einzige Zeile von C. Guile zu schreiben, ermöglicht es Benutzern mit einer anspruchsvollen Software-Freiheit. Verwenden Sie eine der unterstützten Skriptsprachen Anpassen und Erweitern von Anwendungen, während sie laufen und sehen die Änderungen stattfinden Live-Nutzer können leicht handeln und teilen Features durch das Hochladen und Herunterladen der Skripte, anstatt Handel komplexe Patches und Neukompilierung ihrer Anwendungen. Anwendungen mit Guile GNU Guix Verstärker GuixSD Paketmanager und GNU Distribution Suite für Electronic Design Automation Der GNU Debugger GNU Guile bei FOSDEM 10. Januar 2017 GNU Guile hat in diesem Jahr wieder eine eigene Session bei FOSDEM. Der Zeitplan ist ab sofort verfügbar. Gespräche decken eine Reihe von Themen ab: Benutzeroberfläche GNU Guile 2.1.5 veröffentlicht am 9. Dezember 2016 Wir freuen uns, GNU Guile Release 2.1.5 bekannt geben zu können, die nächste Vorveröffentlichung in der 2.2 stabilen Serie. Diese Version verbessert Guileaposs Parallelität GNU Guile 2.0.13 veröffentlicht Sicherheitsfixes 12. Oktober 2016 Weaposve hat gerade eine neue Version von GNU Guile, Version 2.0.13 veröffentlicht, die ein Sicherheits-Release für Guile ist (siehe die ursprüngliche Ankündigung). Dies ist ein wichtiger Faktor Sicherheitsanfälligkeit Über diese Website Diese Website wird von GNU Guile betrieben und der Quellcode steht unter der GNU AGPL. Bitte verwenden Sie die Mailingliste oder den Guile-Kanal auf Freenode für weitere Informationen über GNU Guile und diese Website. Machine Learning und Automated Trading The Big Short (Ich mag es) Suche nach Handelsstrategien mit profitable Backtests - UPDATE Ich habe einige sehr interessante Gespräche seit Ich habe mein nicht öffentliches Intraday-Trading-Framework im Austausch für Informationen über profitable Strategien angeboten, weshalb ich diesen anfänglich zeitlich begrenzten Anruf unbegrenzt verlängern möchte. Beachten Sie, dass ich keine Strategieideen suche. Ich habe viele davon. Die Herausforderung liegt nicht darin, mit einer Idee zu kommen, sondern bei der Auswahl der richtigen und testen sie bis zum Ende, wenn Sie entweder wissen, dass es funktioniert oder dass es nicht tut. Der kritische Faktor ist hier Zeit. Also, was ich im Wesentlichen handeln ist die Zeit, die ich in die Entwicklung eines Rock solide Intraday Trading Framework investiert haben, gegen die Zeit, die Sie in die Entwicklung einer profitable Trading Strategie investiert haben. Es kann eine Aktie, ETF, Zukunft oder Optionsstrategie sein. Alle gesprochenen Diskussionen und Informationen werden vertraulich behandelt. Ich bin natürlich offen für rein diskutieren Ideen, aber bitte nicht erwarten, dass ich sie für Sie testen und nicht beschweren, wenn ich sie umsetzen, ohne um Ihre Zustimmung zu bitten. Aufforderung zur Einreichung von Vorschlägen Suche nach Handelsstrategien mit rentablen Backtests Bis zum 15. Juni akzeptiere ich Vorschläge für vielversprechende Handelsstrategien auf Aktien, Währungen und Aktienbindungsindizes. Die Strategie muss im Backtesting profitabel sein und eine annualisierte Sharpe-Ratio von mindestens 1,0 haben. Am 1. Juli werden die beiden vielversprechendsten Strategien ausgewählt und ihre Autoren können eine der folgenden Optionen wählen: 1) Erhalten Sie eine vollständige und kostenlose Kopie des erweiterten, nicht-öffentlichen Handelsrahmens auf der Grundlage von R, die ich entwickelt und verwendet habe Seit 2012 und dass die Autoren für Live-Trading ihre Strategien mit Interactive Brokers verwenden können. (Die vereinfachte öffentliche Version kann hier heruntergeladen werden) 2) Geben Sie in eine Kooperationsvereinbarung ein, in der ich mich verpflichten werde, ihre Strategie im R - und Papierhandel für maximal drei Monate umzusetzen. Alle Einzelhandelsabteilungen werden mit den Autoren geteilt, wenn sie auftauchen. Darüber hinaus wird der R-Code, der spezifisch für die Strategie ist (nicht der Code des Handelsrahmens), an die Strategie-Autoren übergeben werden. Was ist zu unterbreiten: Eine schriftliche Beschreibung der Strategie sowie eine Liste der Trades sowie die Rückkehrzeiten des Backtests oder ausführbaren Roctavepython-Codes, der direkt die Backtest-Rückkehr-Timeeries berechnet, zusammen mit dem vollständigen Datensatz der im Backtest verwendeten Preise. Senden Sie meine E-Mail in der Kontakt-Sektion ein. Update des reinen R Intraday Trading Framework Schließlich fand ich die Zeit, dies zu tun. Lange überfällig. Das Framework läuft nun mit den neuesten (Unix) Versionen der IB TWSGW (Version 9493 und höher). Dies allein verlangte ein teilweises Re-Schreiben von mehreren Funktionen aus dem großen, aber jetzt etwas veralteten IBrokers R-Paket von Jeff Ryan. Auch die Default-Konfiguration für den Handel EURUSD wurde aktualisiert, so dass es jetzt ein Stück Kuchen ist, um die Beispiel-Dummy-Strategie zu führen. Klone einfach den Git Repo auf deine lokale Maschine. GithubcensixINTRADAY-PartAB und folgen dem README. Etwas über Hardware Ich bin immer noch ein Fan von meinem eigenen Metall zu besitzen. Sicher, die Dinge mit konfigurierbaren Maschinenbildern in der Wolke zu machen, ist beliebt, weil man nicht durch den Ärger der Verwaltung Ihrer eigenen Hardware gehen muss, aber das ist nicht so ein Problem für große Organisationen, wo hunderttausende von Benutzern glücklich sein müssen Minimale kosten So ist die Wolke nicht nur eine Lösung für ein Problem von Menschen, die Skala zu bewältigen haben, sondern gleichzeitig zu versuchen, diese Lösung an die einzelnen Joe zu verkaufen, die sich dort ansetzt, braucht es nicht wirklich. Jedenfalls, wie ich schon sagte, ich bin ein Fan von meinem eigenen Metall zu besitzen. Preisgünstige Hardware können Sie einen langen Weg finden, wenn Sie sich die Zeit nehmen, es richtig zu konfigurieren. Ein 16-64Gb RAM-Desktop mit einem oder sogar zwei GPUs wird so ziemlich alles tun, was Sie brauchen. Es scheint, dass Backtesting-Strategien verwendet viel mehr Computing-Ressourcen als tatsächlichen Live-Trading, weshalb in diesen Tagen können Sie einrichten und führen eine Intraday-Strategie von jedem anständigen Laptop mit Vertrauen, während für die Backtesting und Forschung Sie wirklich wollen, dass die RAM-CPU-GPU-Monster Oben oder eine kleine kleine Supercomputing-Cluster von Ihnen, wie ich hier vor kurzem beschrieben habe. Pure R Intraday Trading Framework Voller Download verfügbar Ich habe INTRADAY-PartA. tar. gz und INTRADAY-PartB. tgz zum Download zur Verfügung gestellt. Censixdownloads. html Finden von Beziehungen zwischen Assets, die für statistische Arbitrage verwendet werden können Statt sich auf die Vorhersage der Preisrichtung und Preisvolatilität mit nichtlinearen Modellen, die mit maschinellen Lernmethoden abgeleitet sind, zu orientieren, wäre eine Alternative, um zu versuchen, ausbeutbare Preisverhältnisse zwischen Vermögenswerten derselben Klasse zu entdecken Und reagiere (Handel), wenn Missbrauch geschieht, mit anderen Worten, statistische Arbitrage. In gewissem Sinne ist das irgendwie leichter als der Versuch, die Preise zu prognostizieren, denn das einzige, was man tun muss, ist, eine relativ stabile, lineare oder nichtlineare Beziehung zwischen einer Gruppe von mindestens zwei Vermögenswerten zu finden und davon auszugehen, dass von der Zeit an Seine Erkennung, diese Beziehung wird für einige Zeit in die Zukunft weiterführen. Der Handel unter dieser Annahme ist dann sehr viel ein reaktiver Prozess, der durch Preisbewegungen ausgelöst wird, die deutlich von der modellierten Beziehung abweichen. Traditionelle Paar-Handel und Handel von assetts in einem VECM (Vector Error Correction Model) Beziehung sind gute Beispiele für Statarb mit linearen Modellen. Also warum nicht ein einfaches einschichtiges neuronales Netzwerk oder sogar ein RBM verwenden, um eine nicht-lineare Preisbeziehung zwischen zwei nicht-kointegrierten Vermögenswerten zu entdecken und wenn dieser Entdeckungsprozess erfolgreich ist, handeln Sie es in ähnlicher Weise wie ein klassisches Paar. Die Dinge werden noch interessanter, wenn Gruppen mit mehr als nur zwei Vermögenswerten berücksichtigt werden. Dies wäre dann das nichtlineare Äquivalent eines VECM. Feature Selection Breadth vs Depth Lets sagen, wir haben eine univariate Maleries Vorhersage Ziel, das entweder von Typ Regression oder Klassifizierung sein kann, und wir müssen entscheiden, welche Eingabe-Features zu wählen. Konkreter haben wir ein großes Universum von Zeiträumen, die wir als Inputs nutzen können und wir würden gerne wissen, wie viele wir wählen sollten (Breite) und auch wie weit zurück in der Zeit wollen wir für jeden (Tiefe) suchen. Es gibt einen zweidimensionalen Raum von Entscheidungen, der durch die folgenden vier Extremfälle begrenzt wird, unter der Annahme, dass wir insgesamt N Serien haben und wir können höchstens Rückblick auf K timesteps: (1) nur eine Serie und einen Rückblick auswählen (2) holt nur eine Serie und Rückblick K timesteps, (3) N N Serie und Rückblick einmal, pp, (4) N N und Rückblick K timesteps. Die optimale Wahl wird wahrscheinlich nicht von denen sein, da (1) und (2) möglicherweise nicht genügend Vorhersageinformationen enthalten und (3) und insbesondere (4) entweder nicht durch die Berechnung von Kontrahierungen oder zu viel zufälliges Rauschen möglich sind. Der vorgeschlagene Weg, sich zu nähern, ist, bei (1) zu beginnen, zu sehen, welche Leistung du bekommst und dann die Größe des Eingaberaums vergrößert, entweder breit oder tiefe, bis du eine zufriedenstellende Vorhersageleistung erreicht hast oder bis du erschöpft bist Ihre IT-Ressourcen benötigen und entweder auf den gesamten Ansatz verlassen :( oder eine neue (Farm) Desktop (s) :) mit Stacked Autoencoder und Restricted Boltzmann-Maschinen in R 12. Februar 2014 Stacked Autoencoder (SAS) und Restricted Boltzmann-Maschinen kaufen ( RBMs) sind sehr leistungsfähige Modelle für unbeaufsichtigtes Lernen. Leider sieht es zum Zeitpunkt des Schreibens so aus, als ob es keine direkten R-Implementierungen gibt, was überraschend ist, da beide Modelltypen schon seit einer Weile herum sind und R Implementierungen für viele andere maschinelle Lernmodelltypen hat. Als Workaround konnten SAs mit einem von mehreren neuronalen Netzwerkpaketen von R ziemlich schnell implementiert werden (nnet, AMORE) und RBMs, gut, jemand müsste eine gute R-Implementierung für sie schreiben. Aber angesichts dieser Schulung benötigen beide Modelltypen viele rechnerische Ressourcen, wir wollen auch eine Implementierung, die GPUs nutzen kann. Also im Moment die einfachste Lösung, die wir zu haben scheinen, ist, Theano zu benutzen. Es kann GPUs verwenden und es bietet Implementierungen von gestapelten (Denoising) Autoencodern und RBMs. Darüber hinaus schwebt PythonTheano-Code für mehrere weitere exotische Boltzmann-Maschinenvarianten auch im Netz. Wir können rPython verwenden, um diese Python-Funktionen von R aufzurufen, aber die Herausforderung ist die Daten. Erste große Datensätze zwischen R und Python hin und her, ohne die ascii Serialisierung zu verwenden, die rPython implementiert (zu langsam) muss gelöst werden. Eine mindestens gleichermaßen leistungsfähige Implementierung von Autoencodern, die GPU-Nutzung unterstützt, ist über das Torch7-Framework (Demo) verfügbar. Allerdings werden Torch7-Funktionen mit Lua aufgerufen und rufen sie von innerhalb R stattdessen erfordert einige Arbeit auf C-Ebene. Abschließend: Verwenden Sie Theano (Python) oder Torch7 (lua) für Trainingsmodelle mit GPU-Unterstützung und schreiben Sie die trainierten Modelle in Datei. In R importiere das ausgebildete Modell aus der Datei und verwende die Vorhersage. Update 25. April 2014: Die folgende schöne Lösung Rufen Sie Python von R bis Rcpp an, um uns einen Schritt näher zu bringen, mit Theano direkt von R. Was Frequenzen zu handeln. 13. Januar 2014 Beim Versuch verwertbaren Marktmuster zu finden, die man als Einzelhändler handeln könnte, eine der ersten Fragen ist: Was den Handel Frequenzen schauen, um auf monatlich wöchentlich täglich oder intraday irgendwo zwischen 5 Sekunden bis 1 Stunde begrenzte Zeit zur Verfügung für Die Forschung an allen dieser Zeitskalen, dies wird eine wichtige Frage zu beantworten. Ich und andere haben beobachtet, dass es scheint, eine einfache Beziehung zwischen Handelsfrequenz und Menge an Aufwand zu sein, um eine rentable Strategie zu finden, die rein quantitativ ist und ein akzeptables Risiko hat. Kurz gesagt: Je niedriger (langsamer) die Häufigkeit, die Sie handeln möchten, desto schlauer muss Ihre profitable Strategie sein. tradefreqvssmartnessAs ein Beispiel, könnte man auf der (sehr) hohen Frequenz Ende des Spektrums sehen, wo marketmaking Strategien auf wirklich sehr einfache Mathematik basieren kann sehr profitabel sein, wenn Sie auf den Markt Zentrum nahe genug zu verwalten sein. Wenn wir einen großen Sprung in den täglichen Frequenzbereich nehmen, wird es immer schwieriger, quantitative Strategien zu finden, die rentabel sind, während sie immer noch auf einer einfachen Mathematik basieren. Der Handel in wöchentlichen und monatlichen Intervallen, mit einfachen quantitativen Methoden oder technischen Indikatoren ist nur ein sehr gutes Rezept für Katastrophe. Also, für einen Moment, dass diese Beziehung in der Tat wahr ist und auch in Erwägung zieht, dass wir in unseren Handelsstrategien anspruchsvolle maschinelle Lerntechniken einsetzen können und wollen, könnten wir mit einem wöchentlichen Frequenzfenster beginnen und unseren Weg zu höheren Frequenzen arbeiten. Der wöchentliche Handel muss nicht automatisiert werden und kann von jedem webbasierten Brokerage-Interface aus durchgeführt werden. Wir konnten eine Tasche mit Strategien entwickeln, indem wir öffentlich verfügbare historische Daten in Kombination mit unserem bevorzugten Lernalgorithmus verwenden, um handelsfähige Marktmuster zu finden und dann die Strategie manuell auszuführen. Auf dieser Skala sollte die ganze Anstrengung in die Suche und Feinabstimmung der quantitativen Strategie gehen und sehr wenig Gedanken müssen in die Ausführung des Handels gestellt werden. Handel Automatisierungsaufwand: 0. Strategie Intelligenz erforderlich: 100 Täglicher Handel sollte automatisiert werden, es sei denn, Sie können wirklich einen festen Teil Ihres Tages für die Überwachung der Märkte und die Durchführung von Trades widmen. Die Integration von maschinellen Lernalgorithmen mit automatisiertem täglichen Handel ist keine triviale Aufgabe, aber es kann getan werden. Handelsautomatisierung Aufwand: 20, Pfiffigkeit Strategie erforderlich: 80 Am Intraday-Zeitskalen, die von Minuten und Sekunden bis Unter Sekunden, die Mühe werden Sie unternehmen müssen, um Ihre Trades zu automatisieren kann irgendwo im Bereich zwischen 20 und 90. Zum Glück ist die kleinere liegen Die Zeitskala wird zum Doll Ihre Strategie kann sein, aber dumm ist natürlich ein relatives Konzept hier. Handel Automatisierungsaufwand: 80, Strategie Intelligenz erforderlich: 20 Welche Funktionen zu verwenden. Handgefertigt vs. gelernt 10. Dezember 2013 An einem Punkt in der Gestaltung eines (Maschinen-) Lernsystems werden Sie unvermeidlich fragen, welche Funktionen in Ihr Modell eingegeben werden. Es gibt mindestens zwei Möglichkeiten. Die erste ist, handgefertigte Funktionen zu verwenden. Diese Option gibt Ihnen in der Regel gute Ergebnisse, wenn die Features gut entworfen sind (das ist natürlich eine Tautologie, da man sie nur so gut anrufen würde, wenn sie dir gute Ergebnisse gaben.). Das Entwerfen von handgefertigten Funktionen erfordert Fachwissen über das Feld, auf das das Lernsystem angewendet wird, d. h. Audioklassifizierung, Bilderkennung oder in unserem Fallhandel. Das Problem hier ist, dass Sie vielleicht nicht von diesem Expertenwissen (noch) und es wird sehr schwer zu kommen oder nehmen Sie eine Menge Zeit oder höchstwahrscheinlich beide. Also die Alternative ist, die Features aus den Daten zu lernen, oder mit anderen Worten, verwenden Sie unbeaufsichtigtes Lernen, um sie zu erhalten. Eine Anforderung hier ist, dass Sie wirklich viele Daten benötigen. Viel mehr davon, als du für handgefertigte Features brauchst, aber dann muss es noch nicht beschriftet werden. Der Nutzen ist jedoch klar. Sie müssen nicht wirklich ein Experte in dem spezifischen Feld sein, das Sie das System entwerfen, d. h. Handel und Finanzierung. Also, während Sie noch herausfinden müssen, welche Teilmenge der gelernten Features am besten für Ihr Lernsystem ist, das ist auch etwas, das Sie mit den handgefertigten Features machen müssten. Mein Vorschlag: Versuchen Sie, einige handgefertigte Funktionen selbst zu entwerfen. Wenn sie nicht durchführen und Sie haben gute Gründe zu glauben, dass es möglich ist, bessere Ergebnisse zu erzielen als die, die Sie bekommen, verwenden Sie unbeaufsichtigte Lernmethoden, um Funktionen zu lernen. Sie können sogar ein Hybrid-System, das entworfen und gelernte Funktionen zusammen verwendet. Warum habe ich Open Source-Tools für den Aufbau von Handelsanwendungen verwendet 19. November 2013 Als ich anfing, in meinen eigenen automatisierten Handel zu suchen, hatte ich drei Anforderungen an die Menge der Werkzeuge, die ich verwenden wollte. 1) Sie sollten so wenig wie möglich kosten, um mich zu starten, auch wenn das bedeutete, dass ich eine Menge Programmierung und Anpassungen selbst machen musste (es würde Zeit kosten) 2) Es sollte eine Gemeinschaft von Gleichgesinnten da draußen geben Mit den gleichen Werkzeugen für einen ähnlichen Zweck. 3) Die Werkzeuge sollen mir erlauben, so tief in die Eingeweide des Systems zu gehen, wie es notwendig ist, auch wenn ich anfangs mein Ziel mehr war, die Grundlagen zu entdecken. Ich wollte mich nicht in einer Situation finden, in der ich zwei Jahre die Linie hinuntersteigen müsste, die ich zu einem anderen Satz von Werkzeugen wechseln musste, nur weil die, mit denen ich begonnen hatte, mir erlaubte, das zu tun, was ich wegen Problemen wollte Geschlossene Quellen und restriktive Lizenzen. Als Ergebnis kam ich zu wählen R als meine Sprache der Wahl für die Entwicklung von Handel Algortihms und ich begann mit Interactive Brokers, da sie eine API für die Anbindung an ihre Brokerage-System. Während es viele nette Trading-Tools gibt, die mit der IB Trader Workstation verbunden sind und einige für den automatisierten Handel verwendet werden können, bietet keiner von ihnen die gleiche Leistung, Flexibilität und Community-Unterstützung, die das R-Projekt hat. Darüber hinaus hat R wirklich ein erstaunliches Repository von freien und sehr adavanced statistische und maschinelle Lernpakete, etwas, das wichtig ist, wenn Sie Handelsalgorithmen erstellen möchten. Copyright Kopie Censix 2013 - 2015Better Strategien 5: Ein kurzfristiges Maschinelles Lernsystem It8217s Zeit für den 5. und letzten Teil der Build Better Strategies Serie. In Teil 3 haben wir den Entwicklungsprozess eines modellbasierten Systems erörtert und folglich die Serie mit der Entwicklung eines Data-Mining-Systems abzuschließen. Die Grundsätze des Data Mining und des maschinellen Lernens sind das Thema Teil 4. Für unser kurzfristiges Handelsbeispiel verwenden wir einen tiefen Lernalgorithmus. Ein gestapeltes Autoencoder, aber es wird auf die gleiche Weise mit vielen anderen maschinellen Lernalgorithmen arbeiten. Mit today8217s Software-Tools sind nur etwa 20 Zeilen Code für eine maschinelle Lernstrategie erforderlich. Ich versuche, alle Schritte im Detail zu erklären. Unser Beispiel ist ein Forschungsprojekt 8211 ein maschinelles Lernversuch zur Beantwortung von zwei Fragen. Gibt es einen komplexeren Algorithmus 8211 wie etwa Neuronen und tieferes Lernen 8211 eine bessere Vorhersage und sind kurzfristige Preisbewegungen vorhersehbar durch kurzfristige Preisgeschichte Die letzte Frage kam aufgrund meiner Skepsis über Preisaktionen Handel im vorherigen Teil Dieser Serie. Ich habe mehrere E-Mails fragen über die 8220trading System generators8221 oder ähnliche Preis Action-Tools, die auf einigen Websites gelobt werden. Es gibt keinen harten Beweis dafür, dass solche Werkzeuge jemals einen Gewinn produziert haben (außer ihren Anbietern) 8211 aber bedeutet dies, dass sie alle Müll sind, die wir sehen werden. Unser Experiment ist einfach: Wir sammeln Informationen von den letzten Kerzen einer Preiskurve, füttern sie in ein tiefes Neuronales Netz und verwenden es, um die nächsten Kerzen vorherzusagen. Meine Hypothese ist, dass ein paar Kerzen keine nützlichen prädiktiven Informationen enthalten. Natürlich hat ein nicht-pädagogisches Ergebnis des Experiments gewollt, dass I8217m richtig ist, da ich falsche Parameter benutzt oder die Daten schlecht vorbereitet haben könnte. Aber ein prädiktives Ergebnis wäre ein Hinweis, dass I8217m falsch und Preis Aktion Handel kann in der Tat profitabel sein. Maschinelle Lernstrategie Entwicklung Schritt 1: Die Zielvariable Um den vorherigen Teil wiederzugeben. Ein überwachter Lernalgorithmus wird mit einem Satz von Merkmalen trainiert, um eine Zielvariable vorherzusagen. Also das erste, was zu bestimmen ist, was diese Zielvariable sein soll. Ein beliebtes Ziel, das in den meisten Beiträgen verwendet wird, ist das Zeichen der Preisrendite an der nächsten Bar. Besser für die Vorhersage geeignet, da weniger anfällig für Zufälligkeit, ist der Preisunterschied zu einem entfernteren Vorhersagehorizont. Wie 3 Bars ab jetzt oder am selben Tag nächste Woche. Wie fast alles in Handelssystemen ist der Vorhersagehorizont ein Kompromiss zwischen den Auswirkungen der Zufälligkeit (weniger Stäbe sind schlechter) und Vorhersagbarkeit (weniger Stäbe sind besser). Manchmal sind Sie nicht daran interessiert, den Preis direkt vorherzusagen, sondern bei der Vorhersage eines anderen Parameters 8211 wie dem aktuellen Bein eines Zickzack-Indikators 8211, der sonst nur im Nachhinein bestimmt werden könnte. Oder Sie wollen wissen, ob ein gewisser Markt Ineffizienz in der nächsten Zeit vorhanden sein wird, vor allem, wenn you8217re mit Maschinen lernen nicht direkt für den Handel, sondern für die Filterung Trades in einem modellbasierten System. Oder Sie wollen etwas ganz anderes vorhersagen, zum Beispiel die Wahrscheinlichkeit eines Marktumschlags morgen. All dies ist oft einfacher zu prognostizieren als die beliebte morgen8217s zurück. In unserem Preisaktionsexperiment verwenden wir die Rückgabe eines kurzfristigen Preishandels als Zielvariable. Sobald das Ziel bestimmt ist, wählt der nächste Schritt die Features aus. Schritt 2: Die Features Eine Preiskurve ist der schlechteste Fall für jeden maschinellen Lernalgorithmus. Nicht nur, dass es wenig Signal und meistens Lärm trägt. Es ist auch nichtstationär und das Signalnoise-Verhältnis ändert sich die ganze Zeit. Das genaue Verhältnis von Signal und Rauschen hängt davon ab, was mit 8220signal8221 gemeint ist, aber es ist normalerweise zu niedrig für jeden bekannten maschinellen Lernalgorithmus, um etwas Nützliches zu produzieren. So müssen wir Merkmale aus der Preiskurve ableiten, die mehr Signal und weniger Lärm enthalten. Signal, in diesem Zusammenhang, ist jede Information, die verwendet werden kann, um das Ziel vorherzusagen, was auch immer es ist. Der ganze Rest ist Lärm. So ist die Auswahl der Features entscheidend für den Erfolg 8211 viel kritischer als die Entscheidung, welche Maschine Lernalgorithmus you8217re verwenden wird. Es gibt zwei Ansätze zur Auswahl von Features. Die erste und häufigste ist, so viel Informationen aus der Preiskurve wie möglich zu extrahieren. Da Sie nicht wissen, wo die Informationen verborgen sind, generieren Sie einfach eine wilde Sammlung von Indikatoren mit einer breiten Palette von Parametern und hoffen, dass zumindest einige von ihnen die Informationen enthalten, die der Algorithmus braucht. Das ist der Ansatz, den man normalerweise in der Literatur findet. Das Problem dieser Methode: Jeder maschinelle Lernalgorithmus wird leicht durch nichtpictictive Prädiktoren verwirrt. So ist es gewohnt, nur 150 Indikatoren zu werfen. Sie benötigen einen Vorwahlalgorithmus, der bestimmt, welche von ihnen nützliche Informationen tragen und welche weggelassen werden können. Ohne die Funktionen auf diese Weise zu verkleinern, um vielleicht acht oder zehn, sogar der tiefste Lernalgorithmus gewann. Der andere Ansatz, in der Regel für Experimente und Forschung, verwendet nur begrenzte Informationen aus der Preiskurve. Dies ist der Fall hier: Da wir den Preishandelshandel untersuchen wollen, verwenden wir nur die letzten Preise als Inputs und müssen den Rest der Kurve verwerfen. Dies hat den Vorteil, dass wir keinen Vorwahlalgorithmus benötigen, da die Anzahl der Features ohnehin begrenzt ist. Hier sind die beiden einfachen Prädiktorfunktionen, die wir in unserem Experiment verwenden (in C): Die beiden Funktionen sollen die notwendigen Informationen für die Preisgestaltung tragen: per-bar Bewegung und Volatilität. Die Änderungsfunktion ist die Differenz des aktuellen Preises zum Preis von n Stäben vor, in Bezug auf den aktuellen Preis. Die Reichweite Funktion ist die gesamte High-Low-Distanz der letzten n Kerzen, auch in Bezug auf den aktuellen Preis. Und die Skalenfunktion zentriert und komprimiert die Werte auf den Bereich -100, so dass wir sie mit 100 teilen, damit sie auf -1 normalisiert werden können. Wir erinnern uns, dass die Normalisierung für maschinelle Lernalgorithmen erforderlich ist. Schritt 3: Vorwählen von Vorverzerrungsprädiktoren Wenn Sie eine große Anzahl von Indikatoren oder anderen Signalen als Funktionen für Ihren Algorithmus ausgewählt haben, müssen Sie festlegen, welche davon nützlich ist und welche nicht. Es gibt viele Methoden zur Reduzierung der Anzahl der Features, zum Beispiel: Bestimmen Sie die Korrelationen zwischen den Signalen. Entfernen Sie diese mit einer starken Korrelation zu anderen Signalen, da sie nicht zu den Informationen beitragen. Vergleichen Sie den Informationsinhalt der Signale direkt mit Algorithmen wie Informationsentropie oder Entscheidungsbäumen. Bestimmen Sie den Informationsinhalt indirekt durch Vergleich der Signale mit randomisierten Signalen gibt es einige Software-Bibliotheken für diese, wie die R Boruta-Paket. Verwenden Sie einen Algorithmus wie Principal Components Analysis (PCA), um einen neuen Signalsatz mit reduzierter Dimensionalität zu erzeugen. Verwenden Sie die genetische Optimierung für die Bestimmung der wichtigsten Signale nur durch die profitabelsten Ergebnisse aus dem Vorhersageprozess. Ideal für Kurvenanpassung, wenn Sie beeindruckende Ergebnisse in einer Forschungsarbeit veröffentlichen möchten. Für unser Experiment müssen wir die Funktionen nicht vorwählen oder vorverarbeiten, aber hier finden Sie nützliche Informationen zu den Artikeln (1), (2) und (3), die am Ende der Seite aufgeführt sind. Schritt 4: Wählen Sie die Maschine Lernalgorithmus R bietet viele verschiedene ML-Pakete, und jeder von ihnen bietet viele verschiedene Algorithmen mit vielen verschiedenen Parametern. Auch wenn du dich schon über die Methode 8211 entschieden hast, tiefes Lernen 8211 hast du immer noch die Wahl zwischen verschiedenen Ansätzen und verschiedenen R-Paketen. Die meisten sind ganz neu, und man findet nicht viele empirische Informationen, die Ihrer Entscheidung helfen. Sie müssen sie alle ausprobieren und Erfahrungen mit verschiedenen Methoden sammeln. Für unser Experiment wählte wir das Deepnet-Paket, das wohl die einfachste und einfachste, tiefe Lernbibliothek zu verwenden ist. Das hält unseren Code kurz. We8217re mit seinem Stacked Autoencoder (SAE) Algorithmus für Vor-Training des Netzwerks. Deepnet bietet auch eine beschränkte Boltzmann Maschine (RBM) für Vor-Training, aber ich konnte nicht gute Ergebnisse daraus. Es gibt andere und komplexere tiefe Lernpakete für R, also kannst du viel Zeit damit verbringen, sie alle auszuprobieren. Wie Vor-Training funktioniert leicht erklärt, aber warum es funktioniert ist eine andere Sache. Nach meinem Wissen ist noch niemand mit einem soliden mathematischen Beweis aufgetreten, dass es überhaupt funktioniert. Wie auch immer, stellen Sie sich ein großes neuronales Netz mit vielen versteckten Schichten vor: Trainieren Sie das Netz bedeutet, die Verbindungsgewichte zwischen den Neuronen aufzubauen. Die übliche Methode ist Fehler-Backpropagation. Aber es stellt sich heraus, dass die versteckten Schichten Sie haben, desto schlimmer funktioniert es. Die Backpropagated Fehler Begriffe werden kleiner und kleiner von Schicht zu Schicht, so dass die ersten Schichten des Netzes fast nichts zu lernen. Das bedeutet, dass das vorhergesagte Ergebnis mehr und mehr von dem zufälligen Anfangszustand der Gewichte abhängig ist. Dies beschränkte die Komplexität von Schicht-basierten neuronalen Netzen und damit die Aufgaben, die sie lösen können. Zumindest vor 10 Jahren. Im Jahr 2006 veröffentlichten die Wissenschaftler in Toronto erstmals die Idee, die Gewichte mit einem unüberwachten Lernalgorithmus, einer beschränkten Boltzmann-Maschine, vorzureisen. Das war ein revolutionäres Konzept. Es förderte die Entwicklung der künstlichen Intelligenz und erlaubte alle möglichen neuen Anwendungen von Go-Spielmaschinen zu selbstfahrenden Autos. Im Falle eines gestapelten Autoencoders funktioniert es auf diese Weise: Wähle die verborgene Ebene, um mit der ersten versteckten Schicht zu beginnen. Verbinden Sie seine Ausgänge mit einer temporären Ausgabeschicht, die die gleiche Struktur wie die network8217s-Eingangsschicht hat. Füttere das Netzwerk mit den Trainingsmustern, aber ohne die Ziele. Trainieren Sie es so, dass die erste verborgene Schicht das Eingangssignal 8211 die Merkmale 8211 an ihren Ausgängen so genau wie möglich wiedergibt. Der Rest des Netzwerks wird ignoriert. Während des Trainings, wenden Sie eine 8216weight Penalty term8217, so dass so wenig Anschlussgewichte wie möglich für die Wiedergabe des Signals verwendet werden. Füttern Sie nun die Ausgänge der trainierten versteckten Schicht zu den Eingängen der nächsten ungeübten verborgenen Schicht und wiederholen Sie den Trainingsvorgang, so dass das Eingangssignal nun an den Ausgängen der nächsten Schicht wiedergegeben wird. Wiederholen Sie diesen Vorgang, bis alle versteckten Ebenen trainiert sind. Wir haben jetzt ein 8216sparse network8217 mit sehr wenigen Schichtverbindungen, die die Eingangssignale wiedergeben können. Jetzt trainiere das Netzwerk mit Backpropagation zum Lernen der Zielvariablen, indem du die vorgeschulten Gewichte der verborgenen Schichten als Ausgangspunkt verwende. Die Hoffnung ist, dass der unbeaufsichtigte Vor-Trainingsprozess eine interne geräuschreduzierte Abstraktion der Eingangssignale erzeugt, die dann zum leichteren Lernen des Ziels genutzt werden können. Und das scheint zu funktionieren. Niemand weiß wirklich, warum, aber mehrere Theorien 8211 siehe Papier (4) unter 8211 versuchen, dieses Phänomen zu erklären. Schritt 5: Erzeugen eines Testdatensatzes Zuerst müssen wir einen Datensatz mit Merkmalen und Zielen erstellen, damit wir unseren Vorhersageprozess testen und Parameter ausprobieren können. Die Features müssen auf den gleichen Preisdaten basieren wie im Live-Handel, und für das Ziel müssen wir einen kurzfristigen Handel simulieren. So macht es Sinn, die Daten nicht mit R zu generieren, sondern mit unserer Handelsplattform, die sowieso viel schneller ist. Hier ist ein kleines Zorro-Skript dafür, DeepSignals. c: We8217re erzeugt 2 Jahre Daten mit Merkmalen, die durch unsere oben definierten Änderungs - und Bereichsfunktionen berechnet wurden. Unser Ziel ist die Rückkehr eines Handels mit 3 bar Lebensdauer. Die Handelskosten werden auf Null gesetzt, so dass in diesem Fall die Rendite der Preisdifferenz bei 3 bar in der Zukunft entspricht. Die adviseLong-Funktion ist im Zorro-Handbuch beschrieben, es ist eine mächtige Funktion, die automatisch das Training und die Vorhersage verarbeitet und erlaubt, jeden R-basierten Maschinen-Lernalgorithmus zu verwenden, als ob es ein einfacher Indikator wäre. In unserem Code verwendet die Funktion die nächste Trade Return als Ziel und die Preisänderungen und Bereiche der letzten 4 Takte als Features. Die SIGNALS-Flagge sagt, dass sie die Daten nicht ausbilden soll, sondern sie in eine CSV-Datei exportieren soll. Die BALANCED-Fahne stellt sicher, dass wir so viele positive wie negative Renditen bekommen, was für die meisten maschinellen Lernalgorithmen wichtig ist. Führen Sie das Skript im Train-Modus mit unserem üblichen Test Asset EURUSD ausgewählt. Es erzeugt eine Tabellenkalkulation mit dem Namen DeepSignalsEURUSDL. csv, die die Features in den ersten 8 Spalten enthält, und die Handelsrückgabe in der letzten Spalte. Step 6: Calibrate the algorithm Complex machine learning algorithms have many parameters to adjust. Some of them offer great opportunities to curve-fit the algorithm for publications. Still, we must calibrate parameters since the algorithm rarely works well with its default settings. For this, here8217s an R script that reads the previously created data set and processes it with the deep learning algorithm ( DeepSignal. r ): We8217ve defined three functions neural. train . neural. predict . and neural. init for training, predicting, and initializing the neural net. The function names are not arbitrary, but follow the convention used by Zorro8217s advise(NEURAL. ) function. It won8217t matter now, but will matter later when we use the same R script for training and trading the deep learning strategy. A fourth function, TestOOS . is used for out-of-sample testing our setup. The function neural. init seeds the R random generator with a fixed value (365 is my personal lucky number). Otherwise we would get a slightly different result any time, since the neural net is initialized with random weights. It also creates a global R list named 8220Models8221. Most R variable types don8217t need to be created beforehand, some do (don8217t ask me why). The 8216ltlt-8216 operator is for accessing a global variable from within a function. The function neural. train takes as input a model number and the data set to be trained. The model number identifies the trained model in the 8220 Models 8221 list. A list is not really needed for this test, but we8217ll need it for more complex strategies that train more than one model. The matrix containing the features and target is passed to the function as second parameter. If the XY data is not a proper matrix, which frequently happens in R depending on how you generated it, it is converted to one. Then it is split into the features ( X ) and the target ( Y ), and finally the target is converted to 1 for a positive trade outcome and 0 for a negative outcome. The network parameters are then set up. Some are obvious, others are free to play around with: The network structure is given by the hidden vector: c(50,100,50) defines 3 hidden layers, the first with 50, second with 100, and third with 50 neurons. That8217s the parameter that we8217ll later modify for determining whether deeper is better. The activation function converts the sum of neuron input values to the neuron output most often used are sigmoid that saturates to 0 or 1, or tanh that saturates to -1 or 1. We use tanh here since our signals are also in the -1 range. The output of the network is a sigmoid function since we want a prediction in the 0..1 range. But the SAE output must be 8220linear8221 so that the Stacked Autoencoder can reproduce the analog input signals on the outputs. The learning rate controls the step size for the gradient descent in training a lower rate means finer steps and possibly more precise prediction, but longer training time. Momentum adds a fraction of the previous step to the current one. It prevents the gradient descent from getting stuck at a tiny local minimum or saddle point. The learning rate scale is a multiplication factor for changing the learning rate after each iteration (I am not sure for what this is good, but there may be tasks where a lower learning rate on higher epochs improves the training). An epoch is a training iteration over the entire data set. Training will stop once the number of epochs is reached. More epochs mean better prediction, but longer training. The batch size is a number of random samples 8211 a mini batch 8211 taken out of the data set for a single training run. Splitting the data into mini batches speeds up training since the weight gradient is then calculated from fewer samples. The higher the batch size, the better is the training, but the more time it will take. The dropout is a number of randomly selected neurons that are disabled during a mini batch. This way the net learns only with a part of its neurons. This seems a strange idea, but can effectively reduce overfitting. All these parameters are common for neural networks. Play around with them and check their effect on the result and the training time. Properly calibrating a neural net is not trivial and might be the topic of another article. The parameters are stored in the model together with the matrix of trained connection weights. So they need not to be given again in the prediction function, neural. predict . It takes the model and a vector X of features, runs it through the layers, and returns the network output, the predicted target Y . Compared with training, prediction is pretty fast since it only needs a couple thousand multiplications. If X was a row vector, it is transposed and this way converted to a column vector, otherwise the nn. predict function won8217t accept it. Use RStudio or some similar environment for conveniently working with R. Edit the path to the. csv data in the file above, source it, install the required R packages (deepnet, e1071, and caret), then call the TestOOS function from the command line. If everything works, it should print something like that: TestOOS reads first our data set from Zorro8217s Data folder. It splits the data in 80 for training ( XY. tr ) and 20 for out-of-sample testing ( XY. ts ). The training set is trained and the result stored in the Models list at index 1. The test set is further split in features ( X ) and targets ( Y ). Y is converted to binary 0 or 1 and stored in Y. ob . our vector of observed targets. We then predict the targets from the test set, convert them again to binary 0 or 1 and store them in Y. pr . For comparing the observation with the prediction, we use the confusionMatrix function from the caret package. A confusion matrix of a binary classifier is simply a 22152 matrix that tells how many 08217s and how many 18217s had been predicted wrongly and correctly. A lot of metrics are derived from the matrix and printed in the lines above. The most important at the moment is the 62 prediction accuracy . This may hint that I bashed price action trading a little prematurely. But of course the 62 might have been just luck. We8217ll see that later when we run a WFO test. A final advice: R packages are occasionally updated, with the possible consequence that previous R code suddenly might work differently, or not at all. This really happens, so test carefully after any update. Step 7: The strategy Now that we8217ve tested our algorithm and got some prediction accuracy above 50 with a test data set, we can finally code our machine learning strategy. In fact we8217ve already coded most of it, we just must add a few lines to the above Zorro script that exported the data set. This is the final script for training, testing, and (theoretically) trading the system ( DeepLearn. c ): We8217re using a WFO cycle of one year, split in a 90 training and a 10 out-of-sample test period. You might ask why I have earlier used two year8217s data and a different split, 8020, for calibrating the network in step 5. This is for using differently composed data for calibrating and for walk forward testing. If we used exactly the same data, the calibration might overfit it and compromise the test. The selected WFO parameters mean that the system is trained with about 225 days data, followed by a 25 days test or trade period with no training. In the literature you8217ll sometimes find recommendations to retrain a machine learning system after any trade, or at least any day. But this does not make much sense to me. When you used almost 1 year8217s data for training a system, it can obviously not deteriorate after a single day. Or if it did, and only produced positive test results with daily retraining, I would strongly suspect that the results are artifacts by some coding mistake. Training a deep network takes really a long time, in our case about 10 minutes for a network with 3 hidden layers and 200 neurons. Since this is repeated at any WFO cycle, using multiple cores is recommended for training many cycles in parallel. The NumCores variable at -1 activates all CPU cores but one. Multiple cores are only available in Zorro S, so a complete walk forward test with all WFO cycles can take several hours with the free version. In the script we now train both long and short trades. For this we have to allow hedging in Training mode, since long and short positions are open at the same time. Entering a position is now dependent on the return value from the advise function, which in turn calls either the neural. train or the neural. predict function from the R script. So we8217re here entering positions when the neural net predicts a result above 0.5. The R script is now controlled by the Zorro script (for this it must have the same name, NeuralLearn. r . only with different extension). It is identical to our R script above since we8217re using the same network parameters. Only one additional function is needed for supporting a WFO test: The neural. save function stores the Models list 8211 it now contains 2 models for long and for short trades 8211 after every training run in Zorro8217s Data folder. Since the models are stored for later use, we do not need to train them again for repeated test runs. This is the WFO equity curve generated with the script above (EURUSD, without trading costs): Although not all WFO cycles get a positive result, it seems that there is some predictive effect. The curve is equivalent to an annual return of 89, achieved with a 50-100-50 hidden layer structure. We8217ll check in the next step how different network structures affect the result. Since the neural. init . neural. train . neural. predict . and neural. save functions are automatically called by Zorro8217s adviseLongadviseShort functions, there are no R functions directly called in the Zorro script. Thus the script can remain unchanged when using a different machine learning method. Only the DeepLearn. r script must be modified and the neural net, for instance, replaced by a support vector machine. For trading such a machine learning system live on a VPS, make sure that R is also installed on the VPS, the needed R packages are installed, and the path to the R terminal set up in Zorro8217s ini file. Otherwise you8217ll get an error message when starting the strategy. Step 8: The experiment If our goal had been developing a strategy, the next steps would be the reality check, risk and money management, and preparing for live trading just as described under model-based strategy development. But for our experiment we8217ll now run a series of tests, with the number of neurons per layer increased from 10 to 100 in 3 steps, and 1, 2, or 3 hidden layers (deepnet does not support more than 3). So we8217re looking into the following 9 network structures: c(10), c(10,10), c(10,10,10), c(30), c(30,30), c(30,30,30), c(100), c(100,100), c(100,100,100). For this experiment you need an afternoon even with a fast PC and in multiple core mode. Here are the results (SR Sharpe ratio, R2 slope linearity): We see that a simple net with only 10 neurons in a single hidden layer won8217t work well for short-term prediction. Network complexity clearly improves the performance, however only up to a certain point. A good result for our system is already achieved with 3 layers x 30 neurons. Even more neurons won8217t help much and sometimes even produce a worse result. This is no real surprise, since for processing only 8 inputs, 300 neurons can likely not do a better job than 100. Conclusion Our goal was determining if a few candles can have predictive power and how the results are affected by the complexity of the algorithm. The results seem to suggest that short-term price movements can indeed be predicted sometimes by analyzing the changes and ranges of the last 4 candles. The prediction is not very accurate 8211 it8217s in the 58..60 range, and most systems of the test series become unprofitable when trading costs are included. Still, I have to reconsider my opinion about price action trading. The fact that the prediction improves with network complexity is an especially convincing argument for short-term price predictability. It would be interesting to look into the long-term stability of predictive price patterns. For this we had to run another series of experiments and modify the training period ( WFOPeriod in the script above) and the 90 ISOOS split. This takes longer time since we must use more historical data. I have done a few tests and found so far that a year seems to be indeed a good training period. The system deteriorates with periods longer than a few years. Predictive price patterns, at least of EURUSD, have a limited lifetime. Where can we go from here There8217s a plethora of possibilities, for instance: Use inputs from more candles and process them with far bigger networks with thousands of neurons. Use oversampling for expanding the training data. Prediction always improves with more training samples. Compress time series f. i. with spectal analysis and analyze not the candles, but their frequency representation with machine learning methods. Use inputs from many candles 8211 such as, 100 8211 and pre-process adjacent candles with one-dimensional convolutional network layers. Use recurrent networks. Especially LSTM could be very interesting for analyzing time series 8211 and as to my knowledge, they have been rarely used for financial prediction so far. Use an ensemble of neural networks for prediction, such as Aronson8217s 8220oracles8221 and 8220comitees8221. Papers Articles I8217ve added the C and R scripts to the 2016 script repository. You need both in Zorro8217s Strategy folder. Zorro version 1.474, and R version 3.2.5 (64 bit) was used for the experiment, but it should also work with other versions. Results below were generated by revised version of DeepSignals. r 8211 only change was use of LSTM net from the rnn package on CRAN. The authors of the package regard their LSTM implementation as 8220experimental8221 and do not feel it is as yet learning properly, so hopefully more improvement to come there. (Spent ages trying to accomplish the LSTM element using the mxnet package but gave up as couldn8217t figure out the correct input format when using multiple training features.) Will post results of full WFO when I have finished LSTM version of DeepLearn. r Confusion Matrix and Statistics Reference Prediction 0 1 0 1641 1167 1 1225 1701 Accuracy. 0.5828 95 CI. (0.5699, 0.5956) No Information Rate. 0.5002 P-Value Acc gt NIR. lt2e-16 Kappa. 0.1657 Mcnemar039s Test P-Value. 0.2438 Sensitivity. 0.5726 Specificity. 0.5931 Pos Pred Value. 0.5844 Neg Pred Value. 0.5813 Prevalence. 0.4998 Detection Rate. 0.2862 Detection Prevalence. 0.4897 Balanced Accuracy. 0.5828 039Positive039 Class. 0 Results of WFO test below. Again, only change to original files was the use of LSTM in R, rather than DNNSAE. Walk-Forward Test DeepLearnLSTMV4 EURUSD Simulated account AssetsFix Bar period 1 hour (avg 87 min) Simulation period 15.05.2014-07.06.2016 (12486 bars) Test period 04.05.2015-07.06.2016 (6649 bars) Lookback period 100 bars (4 days) WFO test cycles 11 x 604 bars (5 weeks) Training cycles 12 x 5439 bars (46 weeks) Monte Carlo cycles 200 Assumed slippage 0.0 sec Spread 0.0 pips (roll 0.000.00) Contracts per lot 1000.0 Gross winloss 3628 -3235 (5199p) Average profit 360year, 30month, 1.38day Max drawdown -134 34 (MAE -134 34) Total down time 95 (TAE 95) Max down time 5 weeks from Aug 2015 Max open margin 40 Max open risk 35 Trade volume 5710964 (5212652year) Transaction costs 0.00 spr, 0.00 slp, 0.00 rol Capital required 262 Number of trades 6787 (6195year, 120week, 25day) Percent winning 57.6 Max winloss 16 -14 Avg trade profit 0.06 0.8p (12.3p -14.8p) Avg trade slippage 0.00 0.0p (0.0p -0.0p) Avg trade bars 1 (1 -2) Max trade bars 3 (3 hours) Time in market 177 Max open trades 3 Max loss streak 17 (uncorrelated 11) Annual return 137 Profit factor 1.12 (PRR 1.08) Sharpe ratio 1.79 Kelly criterion 2.34 R2 coefficient 0.435 Ulcer index 13.3 Prediction error 152 Confidence level AR DDMax Capital 10 143 128 252 20 129 144 278 30 117 161 306 40 107 179 336 50 101 190 355 60 92 213 392 70 85 232 425 80 77 257 466 90 64 314 559 95 53 383 675 100 42 495 859 Portfolio analysis OptF ProF WinLoss Wgt Cycles EURUSD .219 1.12 39072880 100.0 XXX EURUSD:L .302 1.17 18301658 65.0 EURUSD:S .145 1.08 20771222 35.0 Interesting For a still experimental LSTM implementation that result looks not bad. Could you help me answering some questions I have few question below: 1.I want to test Commission mode. If I use interactive broker, I should set Commission . in normal case. 2.If I press the 8220trade8221 button, I see the log the script will use DeepLearnEURUSD. ml. So real trade it will use DeepLearnEURUSD. ml to get the model to trade And use neural. predict function to trade 3.If I use the slow computer to train the data , I should move DeepLearnEURUSD. ml to the trade computer I test the real trade on my interactive brokers and press the result button. Can I use Commission0.60 to train the neural and get the real result Thank you. Result button will show the message below: Trade Trend EURUSD Bar period 2 min (avg 2 min) Trade period 02.11.2016-02.11.2016 Spread 0.5 pips (roll -0.020.01) Commission 0.60 Contracts per lot 1000.0 Commission should be normally not set up in the script, but entered in the broker specific asset list. Otherwise you had to change the script every time when you want to test it with a different broker or account. IB has different lot sizes and commissions, so you need to add the command to the script when you want to test it for an IB account. Yes, DeepLearnEURUSD. ml is the model for live trading, and you need to copy it to the trade computer. Dear jcl Do I write assetList(AssetsIB. csv) in the right place So below code8217s result includes Commission I test the result with Commission that seems pretty good. Annual 93 3177p function run() StartDate 20140601 BarPeriod 60 1 hour LookBack 100 WFOPeriod 25224 1 year DataSplit 90 NumCores -1 use all CPU cores but one assetList(8220AssetsIB. csv8221) set(RULES) Spread RollLong RollShort Commission Slippage 0 LifeTime 3 if(Train) Hedge 2 if(adviseLong(NEURALBALANCED,0, change(1),change(2),change(3),change(4), range(1),range(2),range(3),range(4)) gt 0.5) enterLong() if(adviseShort() gt 0.5) enterShort() Problem 1: I run the DeepLearn. c in the IB paper trade. The code 8220LifeTime 3 prediction horizon8221 seems to close the position that you open after 3 bars(3 hours). But I can8217t see it close the position on third bar close. I see the logs below: Closing prohibited 8211 check NFA flag EURUSD::L4202 Can8217t close 11.10995 at 09:10:51 Problem 2: In my IB paper trade, it the default order size is 1k on EURUSD. How to change the order size in paper trade Thank you very much. IB is an NFA compliant broker. You can not close trades on NFA accounts. You must set the NFA flag for opening a reverse position instead. And you must enable trading costs, otherwise including the commission has no effect. I don8217t think that you get a positive result with trading costs. Those account issues are not related to machine learning, and are better asked on the Zorro forum. Or even better, read the Zorro manual where all this is explained. Just search for 8220NFA8221. I do some experiment to change the neural8217s parameter with commission. The code is below: function run() StartDate 20140601 BarPeriod 60 1 hour LookBack 100 WFOPeriod 25224 1 year DataSplit 90 NumCores -1 use all CPU cores but one assetList(8220AssetsIB. csv8221) set(RULES) Spread RollLong RollShort Slippage 0 LifeTime 3 if(Train) Hedge 2 if(adviseLong(NEURALBALANCED,0, change(1),change(3),change(5),change(7),change(9), range(1),range(3),range(5),range(7),range(9)) gt 0.7) enterLong() if(adviseShort() gt 0.7) enterShort() I get the result with commission that Annual Return is about 23. But I don8217t complete understand the zorro8217s setting and zorro8217s report. Vielen Dank. The result: Annual 23 661p Walk-Forward Test DeepLearn EURUSD Simulated account AssetsIB. csv Bar period 1 hour (avg 86 min) Simulation period 15.05.2014-09.09.2016 (14075 bars) Test period 23.04.2015-09.09.2016 (8404 bars) Lookback period 100 bars (4 days) WFO test cycles 14 x 600 bars (5 weeks) Training cycles 15 x 5401 bars (46 weeks) Monte Carlo cycles 200 Simulation mode Realistic (slippage 0.0 sec) Spread 0.0 pips (roll 0.000.00) Commission 0.50 Contracts per lot 20000.0 Gross winloss 24331 -22685 (914p) Average profit 1190year, 99month, 4.58day Max drawdown -1871 114 (MAE -1912 116) Total down time 92 (TAE 41) Max down time 18 weeks from Dec 2015 Max open margin 2483 Max open risk 836 Trade volume 26162350 (18916130year) Transaction costs 0.00 spr, 0.00 slp, 0.00 rol, -1306 com Capital required 5239 Number of trades 1306 (945year, 19week, 4day) Percent winning 52.5 Max winloss 375 -535 Avg trade profit 1.26 0.7p (19.7p -20.3p) Avg trade slippage 0.00 0.0p (0.0p -0.0p) Avg trade bars 2 (2 -3) Max trade bars 3 (3 hours) Time in market 46 Max open trades 3 Max loss streak 19 (uncorrelated 10) Annual return 23 Profit factor 1.07 (PRR 0.99) Sharpe ratio 0.56 Kelly criterion 1.39 R2 coefficient 0.000 Ulcer index 20.8 Confidence level AR DDMax Capital 10 29 1134 4153 20 27 1320 4427 30 26 1476 4656 40 24 1649 4911 50 23 1767 5085 60 22 1914 5301 70 21 2245 5789 80 19 2535 6216 90 16 3341 7403 95 15 3690 7917 100 12 4850 9625 Portfolio analysis OptF ProF WinLoss Wgt Cycles EURUSD .256 1.07 685621 100.0 XXXXXXXXXXXX EURUSD:L .476 1.16 294278 94.5 EURUSD:S .026 1.01 391343 5.5

No comments:

Post a Comment