Saturday 25 February 2017

Svm Handelssystem

Eine einzelne SVM Trading-Strategie unterstützen Vector Machines (SVM) gewinnen an Popularität in Maschinen lernen Handelssysteme. Sie haben Vorteile Neural Networks (NN), da sie garantiert die optimale Lösung finden. NN kann in einer lokalen Minima gefangen werden, so dass, während Sie ein Ergebnis mit NN erhalten Sie nie sicher sein, dass es optimal ist. Auch wenn NN mit zufälligen Gewichten gestartet werden, erhalten Sie wahrscheinlich einen anderen Satz von Gewichten, wenn Sie Backpropagation auf demselben Satz von Daten ausführen. SVMs haben ihre Nachteile zu. Speziell die Auswahl der Parameter 8216hyper8217. Dies sind die Straf - (C), gaußsche Breite (g) bei Verwendung eines RBF-Kernels und epsilon-Unempfindlichkeit (e) bei Verwendung der Unterstützungsvektorregression (SVR). Meine Verwendung von SVMs bisher war, um sie in der Klassifizierung verwenden, so dass ich nur die C-und g-Parameter 8211 wählen Ich benutze den Standard-RBF-Kernel. It8217s hart genug versuchen zu prognostizieren, ob der Markt nach oben oder unten gehen, geschweige denn, wie viel. Wir können diese Parameter über eine Rastersuche auswählen. Dies bedeutet, dass wir einfach versuchen, jede Kombination von Parametern und sehen, die am besten funktionierte. Die Bewertung der Parameter erfolgt über eine n-fache Kreuzvalidierung. Cross Validation Dies ist am besten mit einem Beispiel erklärt. Wenn wir 1000 beschriftete Trainings-Instanzen haben und wir 10-fache Kreuzvalidierung verwenden, dann machen wir für jede Kombination von C, g folgendes: Nehmen Sie zufällig 10 der Proben heraus. Das ist unser Holdout-Set aus 100 Trainingseinheiten. Trainieren Sie die SVM auf den verbleibenden 90 und erstellen Sie ein Modell. Verwenden Sie das Modell, um die Genauigkeit des Hold-out-Sets zu testen. Wiederholen Sie die Übung 10 mal und nehmen Sie die durchschnittliche Genauigkeit. Das oben genannte ist 10-fach Kreuz-Validierung. Wir könnten dies auf die logische Schlussfolgerung und haben nur eine einzige Instanz in aus Hold-out 8216set8217. Dies ist eine Cross-Validierung. Es würde uns die genaueste Bewertung der Parameter-Kombination, aber in der Praxis 10-fach oder sogar 5-fach ist gut genug. Also, wie tun wir tatsächlich eine Kreuz-Validierung Das libSVM-Paket bei csie. ntu. edu. tw cjlinlibsvm enthält einige Python-Skripte im Tools-Verzeichnis. You8217ll müssen Python und Gnuplot installieren. Sie können auch DeepThought von deep-thought. co. In den Beispielen unten I8217ll verwenden DeepThought. Das erste, was wir brauchen, sind einige Daten. I8217ll verwenden ein Trainingsset mit den folgenden Merkmalen Stunde des Tages Durchschnittliche Schlusskursdifferenz zwischen den vorherigen 30 Balken Gleitende Durchschnittsdifferenzen zwischen den vorherigen 1,2,3,4,5,7,9,13,16,20,25,31 , 45,55,70,100 Balken mit MA-Perioden von 5, 10, 20, 50 und 100 Das Ziel ist -1 für den Preis wird am Ende der nächsten Bar fallen, 1 für den Preis steigen am Ende der Die nächste Leiste. Sobald I8217ve diese in der Konfiguration gesetzt habe, laufe ich den Befehl, um das Trainingsset zu extrahieren. I8217ve auch Min-Max Skalierung verwenden. I8217ll diskutieren Feature Vorbereitung und Skalierung in einem anderen Artikel. Der obige Befehl erstellt Trainingsdateien aus allen Modellen, die in der DeepThought-Konfiguration definiert sind. Nachdem der Befehl eine Datei h4-features. training. data abgeschlossen hat, wird das gleiche Verzeichnis erstellt, dem ich den Befehl ausführte. Dies ist im libSVM-Format, so dass wir die libSVM-Tools verwenden können, um die Raster-Suche auszuführen, oder verwenden Sie Raster-Suche in DeepThought gebaut. Auch die Datei h4-features. training. data. csv, die die gleichen Daten enthält, aber im CSV-Format, so können Sie mit ihm spielen in anderen Werkzeugen wie R, Python, Excel etc. Um die Raster-Suche in DeepThought Ich benutze Der Befehl: Die Ergebnisse befinden sich in der Protokolldatei, wobei Ergebnis: die prozentuale Genauigkeit ist: Die (uninteressanten) Ergebnisse in der Mitte wurden zur Kürze entfernt. Wir können sehen, dass die SVM scheint zu Gunsten kleiner Gammas und die C sieht zu einem vernünftigen Wert. Wir sollten besorgt sein, wenn das beste Gamma groß war und das C klein, da es wahrscheinlich irgendeine Art von Datenfehler bedeutet. Die nächsthöheren Werte sind ungefähr der gleiche Bereich wie die besten Parameter, was anzeigt, daß die Parameterauswahl relativ unempfindlich ist. Wir sollten besorgt sein, wenn die Werte, die das beste Ergebnis liefern, Ausreißer waren. Backtesting der einzelnen SVM-Strategie Der letzte Schritt ist zu bewerten, wie eine einzelne SVM führt in einem Backtest. In diesem Backtest kaufen wir einfach mit einer 1 Prognose und verkaufen mit einer -1 Prognose. Wenn wir lang sind und wir ein Kaufsignal erhalten, fügen wir eine weitere Position zu einer maximalen Positionsgröße von 10 hinzu. Umgekehrt für Verkaufssignale. Unter Verwendung der besten C von 128 und Gamma von 0,00195313 können wir das folgende XML-Snippet aus der Raster-Suchprotokolldatei in die DeepThought-Konfigurationsdatei schneiden: Der Backtest wird mit dem folgenden Befehl ausgeführt: Der DeepThought-Backtest wird durch Erstellen eines Trainingssatzes ausgeführt Dem Schließen jedes Balkens, dem EURUSD H4 in diesem Fall. Wenn das Schließen der nächsten Leiste erreicht ist, wird eine Prognose gemacht und Trades eingegeben und oder geschlossen, dann wird das Modell wieder für die nächste Leiste umgeschult. Damit passt es sich kontinuierlich an die neusten Bedingungen an und alle Tests sind out-of-sample, so dass keine Überanpassung möglich ist. Die Ergebnisse des Backtests waren: und ein Plot der PnL (aufgetragen mit R): Es sieht aussieht ok, aber wahrscheinlich nicht etwas, was wir tun, wie es ist. Der nächste Artikel wird Ensembles zu diskutieren, um zu sehen, wenn wir dieses Ergebnis verbessern können. Training mit Support Vector Machines (SVM) Schließlich haben alle Sterne ausgerichtet und ich kann sicherlich einige Zeit für Back-Testing von neuen Handelssystemen und Support Vector Machines SVM) sind die neuen 8220toy8221, die mich beschäftigt für eine Weile halten wird. SVMs sind ein bekanntes Werkzeug aus dem Bereich der überwachten Machine Learning. Und sie werden sowohl für die Klassifizierung als auch für die Regression verwendet. Weitere Einzelheiten entnehmen Sie bitte der Literatur. Es scheint mir, dass die intuitive Anwendung für den Handel Regression ist, so let8217s durch den Aufbau eines SVM-Regressionsmodell zu starten. Nach unseren Erfahrungen mit ARMAGARCH-Modellen werden wir zunächst versuchen, die Rendite anstatt der Preise zu prognostizieren. Ebenso verwenden wir in unseren ersten Tests nur die Renditen der letzten 5 Tage als Merkmale, die die Rückkehr eines bestimmten Tages bestimmen. Wir beginnen mit der Geschichte von 500 Tagen als Trainingsset. In mathematischer Hinsicht haben wir für das Trainingsset N Merkmale, für jedes haben wir M Proben. Wir haben auch M Antworten. Bei einer Reihe von Merkmalswerten, der linken Matrix, wird das SVM trainiert, um den Antwortwert zu erzeugen. In unserem spezifischen Beispiel haben wir fünf Spalten (Merkmale), wobei jede Spalte den Rückgaben mit einer unterschiedlichen Verzögerung (von 1 bis 5) entspricht. Wir haben 500 Proben und die entsprechenden Antworten. Sobald das SVM auf diesem Set trainiert ist, können wir es mit Sätzen von fünf Funktionen, entsprechend den Renditen für die fünf vorherigen Tage, und die SVM wird uns mit der Antwort, die die prognostizierte Rendite wird. Nach dem Training des SVM auf den letzten 500 Tagen werden wir die Renditen für die Tage 500, 499, 498, 497 und 496 verwenden (diese sind die Eingabe, um die prognostizierte Rendite für Tag 501 zu erhalten.) Aus allen verfügbaren Paketen In R, entschied ich mich für die e1071-Paket zu wählen. Eine zweite Wahl war die kernlab-Paket, das ich noch planen, in der Zukunft zu versuchen. So habe ich versucht, ein paar Strategien. Ich habe versucht etwas sehr ähnlich dem ARMAGARCH Ansatz 8211 der Ich war ziemlich überrascht, diese Strategie besser als die ARMAGARCH (dies ist das Heimatland der ARMAGARCH und ich wäre sehr glücklich gewesen, nur mit vergleichbarer Leistung) zu sehen. Als nächstes versuchte ich, die gleichen fünf Funktionen, sondern versuchen, die beste Teilmenge zu wählen. Die Auswahl wurde mit einem gierigen Ansatz, beginnend mit 0-Funktionen, und interaktive Hinzufügen der Funktion, die den Fehler minimiert minimiert. Dieser Ansatz verbessert die Dinge weiter. Endlich habe ich versucht, einen anderen Ansatz mit etwa Ein Dutzend Funktionen. Die Funktionen enthalten Rückkehr über verschiedene Zeit (1 Tag, 2 Tage, 5 Tage, etc.), einige Statistiken (Mittelwert, Median, sd, etc.) und Volumen. Ich habe die gleiche gierige Ansatz, um Funktionen zu wählen. Dieses endgültige System zeigte auch eine sehr gute Leistung, aber es dauerte eine Hölle von einer Zeit zu laufen. Zeit, diesen Beitrag zu beenden, müssen die Back-Testergebnisse warten. Bis dahin können Sie mit dem vollständigen Quellcode selbst spielen. Hier ist ein Beispiel für die Verwendung: Hi In Windows doesn8217t Arbeit wegen Multicore-Problem. Eine weitere Sache, die ich don8217t verstehen, ist in diesen Zeilen der Code rets reflektiert retsindex (data) data dataindex (rets) Meiner Meinung nach ist es8217s effektiver, serie smth wie mydtret lt-aa. exclude (merge (rets, data) Und habe nur ein Argumentobjekt zu funktionieren Aufruf anstelle von 2 Interessante Arbeit, danke Mike Argh, Windows 8211 Ich benutze es selten in letzter Zeit. Er überrascht noch, da die parallele Paket ist Teil der Basis R Verteilung jetzt. Hoffentlich wird es bald adressiert werden In der Zwischenzeit, wie über nicht mit parallelen Ausführung Auch gibt es andere Pakete, die parallele Ausführung, aber das wäre mehr Arbeit. Sie ​​haben Recht über die Merge 8211 Ich frage mich immer noch, warum ich es auf diese Weise dieses Mal getan :) I8217m Empfangen von Fehlern. Nun ist der Fehler gt data svmFeatures (tt), c (1,2) Fehler in match. fun (FUN). Objekt 8216skewness8217 nicht gefunden Aber wenn ich manuelles Datenobjekt mache, bekomme ich Fehler in der Vorhersage svmComputeOneForecast lt - Funktion im Zusammenhang mit Dimensionen und samplingquotcrossquot It039s schwierig für mich, Schief zu debuggen kommt aus dem PerformanceAnalytics-Paket, das Sie von CRAN installieren müssen. Das Hinzufügen von Anforderungen (PerformanceAnalytics) als erste Zeile von svmFeatures sollte das erste Problem ansprechen. Jetzt ist ein Fehler in merge. xts (res, xts (naztrim (lag (rolmean, k 21, align 8220right8221) Länge von 8216dimnames8217 2 nicht gleich Array-Umfang scheint es, dass in Windows-Code braucht eine Menge von Änderungen Mike, ich habe nie gemeint, der Code direkt verwendet werden (bis jetzt war ich Bereitstellung nur Snippets), aber ich bin überrascht, dass R auf Windows so hässlich ist. Nicht sicher what8217s Ihr Ziel, sondern um die Strategien Leistung zu analysieren, können Sie die Indikator-Serie, die bereits berechnet. It8217s nur reine akademische Interesse an SVM. Ich arbeitete mit Clustern, PCA und ich bin gespannt, wie SVM tut die gleiche Arbeit. Fenster eine Menge Fehler sind auf Objekte mit Daten wie xts ist verwandt Oder Daten-Frames. Unix ist besser, aber alle Broker geben API für Fenster. Einige von ihnen in Java und nur das können wir von UNIX. I don8217t wie win Architektur aber it8217s eine Gewohnheit bereits und ich don8217t haben Zeit, OS zu ändern Ich habe eine Warnung von svmFeatures, die ich weiß, wie zu beheben (calling sd auf einem xtszoo-Objekt interessante Umwandlung in eine Matrix), aber keine Probleme. Läuft: Danke I8217ll versuchen. Eine Frage, wenn Sie don8217t Meinung Warum verwenden Sie mit der Funktion cetSymbols aus quantmod Paket Ich benutze CallVer Beispiel SPY lt-getSymbols (039SPY039, auto. assign FALSE) Sie haben viel zu berechnen und erhalten Sie verbrauchen Gedächtnis und braucht Zeit, um Objekte zu erhalten Name als String var Der gleiche Fehler I8217m mit R 2.15.1 Aber I8217m überrascht mit diesem Ergebnis vor Anruf gt head (data) 1 Funktion (8230, list character (), Paket NULL, lib. loc NULL, 2 verbose getOption (8220verbose8221 ), Envir. GlobalEnv) 3 4 fileExt lt - Funktion (x) 5 db lt - grepl (quot ... (gzbz2xz) quot, x) 6 ans lt - sub (quot, quotquot, x) Es scheint, dass Daten ist reserviert Wort Und jetzt weiß ich nicht, was los ist Features Funktionieren mit Support Vector Machines (SVM) Schließlich haben alle Sterne ausgerichtet und ich kann sicherlich einige Zeit für Back-Testing neuer Trading-Systeme und Support Vector Machines (SVM ) Sind das neue Spielzeug, das mich für eine Weile beschäftigen wird. SVMs sind ein bekanntes Werkzeug aus dem Bereich der überwachten Machine Learning. Und sie werden sowohl für die Klassifizierung als auch für die Regression verwendet. Weitere Einzelheiten entnehmen Sie bitte der Literatur. Es scheint mir, dass die intuitivste Anwendung für den Handel Regression ist, so beginnen wir mit dem Aufbau eines SVM-Regressionsmodell. Nach unseren Erfahrungen mit ARMAGARCH-Modellen werden wir zunächst versuchen, die Rendite anstatt der Preise zu prognostizieren. Ebenso verwenden wir in unseren ersten Tests nur die Renditen der letzten 5 Tage als Merkmale, die die Rückkehr eines bestimmten Tages bestimmen. Wir beginnen mit der Geschichte von 500 Tagen als Trainingsset. In mathematischer Hinsicht haben wir für das Trainingsset N Merkmale, für jedes haben wir M Proben. Wir haben auch M Antworten. Bei einer Reihe von Merkmalswerten, der linken Matrix, wird das SVM trainiert, um den Antwortwert zu erzeugen. In unserem spezifischen Beispiel haben wir fünf Spalten (Merkmale), wobei jede Spalte den Rückgaben mit einer unterschiedlichen Verzögerung (von 1 bis 5) entspricht. Wir haben 500 Proben und die entsprechenden Antworten. Sobald das SVM auf diesem Set trainiert ist, können wir es mit Sätzen von fünf Funktionen, entsprechend den Renditen für die fünf vorherigen Tage, und die SVM wird uns mit der Antwort, die die prognostizierte Rendite wird. Nach dem Training des SVM auf den letzten 500 Tagen werden wir die Renditen für die Tage 500, 499, 498, 497 und 496 verwenden (diese sind die Eingabe, um die prognostizierte Rendite für Tag 501 zu erhalten.) Aus allen verfügbaren Paketen In R, entschied ich mich für die e1071-Paket zu wählen. Eine zweite Wahl war die kernlab Paket, das ich noch planen, in der Zukunft zu versuchen. So habe ich versucht, ein paar Strategien. Ich habe versucht, etwas sehr ähnlich dem ARMAGARCH Ansatz der verzögerte Ich war ziemlich überrascht, diese Strategie besser als die ARMAGARCH (das ist das Heimatland der ARMAGARCH und ich wäre ziemlich glücklich gewesen, nur mit vergleichbarer Leistung) zu sehen Als nächstes habe ich versucht, die gleichen fünf Funktionen , Aber versuchen, die beste Teilmenge auszuwählen. Die Auswahl wurde mit einem gierigen Ansatz, beginnend mit 0-Funktionen, und interaktive Hinzufügen der Funktion, die den Fehler minimiert minimiert. Dieser Ansatz verbessert die Dinge weiter. Schließlich habe ich versucht, einen anderen Ansatz mit etwa ein Dutzend Funktionen. Die Funktionen enthalten Rückkehr über verschiedene Zeit (1 Tag, 2 Tage, 5 Tage, etc.), einige Statistiken (Mittelwert, Median, sd, etc.) und Volumen. Ich habe die gleiche gierige Ansatz, um Funktionen zu wählen. Dieses endgültige System zeigte auch eine sehr gute Leistung, aber es dauerte eine Hölle von einer Zeit zu laufen. Zeit, diesen Beitrag zu beenden, müssen die Back-Testergebnisse warten. Bis dahin können Sie mit dem vollständigen Quellcode selbst spielen. Hier ist ein Beispiel für die Verwendung:


No comments:

Post a Comment