Garch Trading System


ARMA Modelle für den Handel In diesem Tutorial werde ich meine R038D und Handelserfahrung mit dem bekannten aus Statistiken Autoregressive Moving Average Model (ARMA) zu teilen. Es gibt viel über diese Modelle geschrieben, aber ich empfehle dringend Introductory Time Series mit R., die ich finde, ist eine perfekte Kombination zwischen Licht theoretischen Hintergrund und praktische Implementierungen in R. Eine weitere gute Lektüre ist die Online-e-Buch Vorhersage: Grundsätze und Praxis von Rob Hyndman geschrieben. Ein Experte in der statistischen Prognose und der Autor der hervorragenden Prognose R Paket. Getting Started In R, ich bin meist mit dem fArma Paket, das ist ein schöner Wrapper mit erweiterten Funktionalität rund um die Arima-Funktion aus dem Statistik-Paket (verwendet in der oben erwähnten Buch). Hier ist eine einfache Sitzung der Anpassung eines ARMA-Modells an die tägliche Rendite des S038P 500: Nähere Details entnehmen Sie bitte der Literatur und den Paketen, ich möchte nur einige Punkte hervorheben: Wir modellieren die täglichen Renditen statt der Preise . Es gibt mehrere Gründe: Auf diese Weise Finanz-Serien werden in der Regel stationär, wir brauchen einen Weg zu 8220normalize8221 eine Reihe, etc. Wir verwenden die diff und log-Funktion, um die täglichen Renditen anstelle von Prozentsätzen zu berechnen. Nicht nur dies ist eine Standard-Praxis in der Statistik, aber es bietet auch eine verdammt gute Annäherung an die diskrete Renditen. Der Ansatz, den ich hier vorstellen wird, ist eine Form von walk-forward Backtesting. Beim Gehen der Serie von Tag zu Tag, werden wir die Geschichte der bestimmten Länge, um das beste Modell zu finden. Dann werden wir dieses Modell verwenden, um die Rückkehr des nächsten Tages vorhersagen zu können. Wenn die Vorhersage negativ ist, nehmen wir die Short-Position an, sonst nehmen wir eine Long-Position an. Ein Beispiel wird die Sache klarer machen: Nach dem Ende des 11. Juni 2012 berechnen wir die letzten 500 Tagesrenditen. Mit diesen Returns durchsuchen wir den Raum der ARMA-Modelle und wählen die passende (in Bezug auf einige metrische und einige Anforderungen) - Modell. Schließlich verwenden wir dieses Modell, um die Vorhersage für die Rückkehr von morgen zu berechnen und das Vorzeichen der Rückkehr zu verwenden, um die geeignete Position zu bestimmen. Die Wahl eines guten Modells Das erste Hindernis für diese Methode, bevor es für uns nützlich sein könnte, ist die Auswahl der Modellparameter. Im Fall von ARMA gibt es zwei Parameter. Mit anderen Worten, es gibt unendlich viele Möglichkeiten: (0,1), (1,0), (1,1), (2,1) usw. Woher wissen wir, welche Parameter zu verwenden sind? Statistiken zur Quantifizierung der Güte der Fit-Test ist die AIC (für Akaike Information Criteria) Statistik. Sobald die Anpassung erfolgt ist, ist der Wert der aic-Statistik zugänglich über: Es gibt andere Statistiken natürlich, aber in der Regel sind die Ergebnisse ziemlich ähnlich. Zusammenfassend brauchen wir nur eine Schleife, die alle Parameterkombinationen durchläuft, die wir für sinnvoll halten, z. B. von (0,0) bis (5,5) inklusive, für jedes Parameterpaar das Modell platzieren und schließlich das Modell auswählen Die niedrigste AIC oder eine andere Statistik. Man beachte, dass manchmal armaFit keine Anpassung findet und einen Fehler zurückgibt, wodurch die Schleife sofort beendet wird. ArmaSearch behandelt dieses Problem, indem es die tryCatch-Funktion verwendet, um irgendwelche Fehler oder Warnungen zu erfassen und einen logischen Wert (FALSE) zurückzugeben anstatt alles zu unterbrechen und mit einem Fehler zu beenden. So können wir eine fehlerhafte und normale Funktion Rückkehr nur durch die Überprüfung der Art des Ergebnisses zu unterscheiden. Ein bisschen unordentlich wahrscheinlich, aber es funktioniert. Einige R-Pakete, Prognose und rugarch zum Beispiel, bieten eine ähnliche, auto. arima-Funktion aus der Box. So kann man seine Infrastruktur aufbauen. Prognose Sobald die Parameter ausgewählt sind, ist es Zeit, die Position am Ende zu bestimmen. Ein Weg, dies zu tun, ist von einer Vorhersage von einem Tag, wenn die Vorhersage negativ ist (erinnern Sie sich an die Reihe, die wir an betreiben, ist die tägliche Rückkehr), dann ist die gewünschte Position kurz, andernfalls es8217s lang. Nun, um einen Indikator für die Back-Testing zu bauen, kann man die tägliche Rückkehr Serie zu gehen und an jedem Punkt führen die Schritte, die wir so weit. Die Hauptschleife sieht wie aus (verkürzt mit Zweck): Wo Geschichte die Rückblickperiode ist, zum an jedem Punkt zu betrachten, verwende ich normalerweise 500, die ungefähr zwei Jahre Daten ist. Mit anderen Worten, um die Position an jedem einzelnen Tag (Vortag nahe dem aktuellen Tag zu schließen bestimmt die Rückkehr) zu bestimmen, verwenden wir Geschichte von 500 Tagen, verzögert von Lags Tag. Sie werden später sehen, wie Lags in der Praxis ins Spiel kommt. Beachten Sie, dass die Vorhersage auch von einem tryCatch-Block umgeben sein muss. ArmaSearch hat auch die nette Eigenschaft, zu bestimmen, ob ein Modell eine Vorhersage hat oder nicht (Vorhersage gelingt oder nicht, dieser Test wird durch den withForecast Parameter gesteuert). Verbesserung der Leistung Die Anzahl der Berechnungen, die wir tun müssen, summiert sich schnell. Zum Beispiel müssen wir für 10 Jahre historische Daten etwa 2.520 Handelstage berechnen. Für jeden Tag werden wir mindestens 35 (3566-1, 0 bis 5 sowohl für die AR und MA Komponente, aber ohne die (0,0) Kombination) passen. Multiplikation der Anzahl der Modelle durch die Anzahl der Tage, und wir sind bereits auf der Suche mehr als 88 Tausend Modell passt 8211 that8217s viele Berechnungen. Eine Möglichkeit, die Leistung dieser notwendigen Berechnungen zu verbessern, kann durch die Nutzung von Multi-Core-CPUs erreicht werden. Mein Ansatz ist es, die Modellauswahl, die armaSearch-Funktion im obigen Code zu parallelisieren. Obwohl dies nicht der effizienteste Ansatz sein kann, ist es sicherlich praktischer, da es auch die Leistung von armaSearch steigern wird, wenn es unabhängig verwendet wird. I won8217t Post die endgültige Version des Codes hier wegen it8217s Länge. Ich gebe Ihnen die GIST-Link statt Modellierung Volatilität mit GARCH Financial Zeitreihen sind zufällig im Allgemeinen. Eine der wenigen Eigenschaften, die sie ausstellen, ist Volatility Clustering. Dies wird typischerweise durch die Erweiterung der ARMA-Prognose mit einem GARCH-Modell erreicht. Klingt komplex, und die theoretischen Details sind zwar kompliziert, aber es erweist sich als ziemlich einfach in R: Natürlich müssen wir auch alle relevanten Funktionen wie armaSearch ändern. Auch Aufrufe von garchFit und Prognosen müssen über tryCatch abgewickelt werden. Beachten Sie auch, dass predict eine Matrix für GARCH-Modelle zurückgibt. Der vollständige Quellcode ist von einem GitHub Gist verfügbar. S038P 500 Leistung Let8217s beginnen mit der Eigenkapitalkurve der Anwendung der ARMAGARCH-Strategie über die vollen 60 Jahre (seit 1950) der S038P 500 historischen Daten. ARMA vs Buy-and-Hold Es sieht fantastisch In der Tat, es beeindruckt mich so sehr, dass ich für Bugs im Code für eine ganze Zeit gesucht. Auch auf einem logarithmischen Chart ist die Leistung dieser Methode atemberaubend 8211 CAGR von 18,87, und die ARMAGARCH-Strategie erreicht diese Leistung mit einem vergleichbaren maximalen Drawdown von 56. Um das Wachstum der ARMA-Strategie zu berechnen, benötigen wir zunächst die Tagesanzeige (dieser Indikator dauert etwa Zwei Tage zu berechnen mit allen Optimierungen, die ich in diesem Beitrag behandelt). Die erste Spalte ist das Datum, die zweite die Position für diesen Tag: 1 für lang, -1 für kurz, 0 für keine. Beachten Sie, dass die Position bereits mit dem Tag der Rückkehr ausgerichtet ist (sie wird am Ende des Vortags berechnet), mit anderen Worten, die Anzeige wird ordnungsgemäß mit den Renditen 8211 überflüssig. Das Kennzeichen, die erste Spalte, muss mit den täglichen Renditen des S038P 500 multipliziert werden. Der Rest der Säulen ist irrelevant und hoffentlich selbsterklärend. Let8217s wrap up der Post mit dem Code, der die Anzeige lädt und zeigt die Grafik: Hallo Nur aus Neugier hier, die Ergebnisse, die Sie gebucht wurden durch die Prüfung der täglichen Renditen über einen bestimmten Lookback-Zeitraum und dann versuchen, den nächsten Tag Rückkehr prognostiziert wurden. Haben Sie ausprobiert Ihre ARMA-Strategie auf wöchentliche Renditen Wie die Ergebnisse stapeln sich gegen die Strategie, wo tägliche Renditen in Ihr Modell gefüttert werden stattdessen Es ist auch interessant, einige andere Zahlen wie zum Beispiel Gewinner zu sehen. Sind Sie derzeit mit diesem Modell, um echtes Geld handeln Great Post und halten Sie die gute Arbeit Hi. Haven8217t versucht wöchentliche Rückkehr, wahrscheinlich lohnt es sich, in sie, obwohl für wöchentliche Rückkehr I8217d bevorzugen, ein Modell unter Berücksichtigung anderer Funktionen neben Renditen verwenden. Für ein SVM oder ein Neuronales Netz geeignet. Ja, ich benutze die ARMAGARCH-Strategie, um ein einziges Finanzinstrument (nicht das SPY) seit mehr als einem Jahr zu handeln. Dies ist der Hauptgrund, warum ich zögern, den Code zu teilen. Letztendlich bin ich in die Aktualisierung der Post mit einigen mehr Trading-Zusammenfassungen und Statistiken suchen, aber haven8217t getan, so weit, weil ich couldn8217t kommen mit einem befriedigenden (Ich bin wählerisch) Format :) Hallo ivannp, ich bin sehr dankbar für Sie Für die Aufstellung solcher nützlichen r-Codes und Informationen für die quantitative Analyse. Ich haven8217t gesehen, wie organisierte Verfahren und Codes für R für die Quant-Analyse irgendwo anders. Ich habe Ihren Blog seit langer Zeit besucht. Ich versuche, die Codes hier zu folgen, aber ich fürchte, ich bin definitiv einige Schritte hier fehlen. Armasearch Funktion gibt mir Arma (5,2) für 8216SPY8217 aber Sie sind mit Arma (0,2) für garchfit. Darf ich wissen, warum. Wenn fehlt etwas bitte führen Sie mich und können Sie bitte mailen Sie mir den vollständigen Code zu prabinsethgmail. Vielen Dank im Voraus Hallo Prabin, immer glücklich zu hören von Menschen, die das Blog genießen, inspiriert mich, es nicht zu vernachlässigen :) Der Code, auf den Sie sich beziehen, ist nur eine Illustration, wie garchFit verwenden. Die (0,2) ist völlig zufällig 8211 Ich wähle nur einige Zahlen. Für das wirkliche Leben braucht man eine garchSearch-Funktion, ähnlich der gezeigten armaSearch. Es ist ähnlich, aber es gibt Unterschiede: Die möglichen Modelle bestehen aus vier Elementen, die ersten beiden sind (AR, MA), aber es gibt auch zwei GARCH-Komponenten, garchFit ersetzt armaFit und auch die Ergebnisse von garchFit sind etwas detaillierter (Ein Array gegen eine Zahl). Der Code ist nicht voll funktionsfähig, wie es ist. Der Grund, warum ich den vollständigen Code posten möchte, ist, dass ich es täglich nutze. Die Ergebnisse der täglichen Ausführung auf dem SPY sind auf der S038P 500 Seite verfügbar. Es hat sowohl die tägliche Position auf ARMAGARCH, als auch die Aktionstabelle für das Ende des Tages. That8217s den Zustand über ARMAGARCH, aber ich verspreche, dass ich das gleiche für neue Sachen mache (SVMs kommen). Ich werde die voll funktionsfähige Version des Codes veröffentlichen, obwohl ich es immer wieder verbessern werde. Hallo, Sehr interessanter Beitrag. Ich habe eine Frage bezüglich der armaComputeForecasts Funktion, die rollende Prognosen produziert. Wenn dies eine Prognose erzeugt, entspricht das Datum des Prognosetasters (dh der Index in der entsprechenden xts-Zeile) dem Erstellungsdatum oder dem Datum, zu dem es prognostiziert wird, dh würde ich die Prognose wie üblich mit einem Indikator verzögern müssen oder Ist dies bereits berücksichtigt. Da die Outperformance der ARMA-Strategie ziemlich zeitabhängig aussieht (die überwiegende Mehrheit der überschüssigen Renditen scheint zwischen 1965 und 1987 zu generieren), wäre es viel nützlicher, ein Diagramm von rollenden kumulativen Renditen zu sehen Strategie (dh über 3 oder 5 Jahre). Auch ARMA Rückkehr sind vermutlich grob von t-Kosten hier, so Strategie Umsatz ist eine weitere sehr wichtige Überlegung (sind Sie in der Lage zu teilen, was es war). Hallo, in meinem alten Blog (theaverageinvestor. wordpress 2011 07), erwähnte ich, dass es einen Handel im Durchschnitt alle 2,35 Tage. Ich erinnere mich, die Trades gezählt und durch die Tage geteilt. Den Indikator für die Serie finden Sie hier: quintuitive wp-content uploads 2012 08 gspcInd3.csv. Es muss gegen die S038P 500 Cash-Index abgestimmt werden, keine Nachlauf, aber dann kann man alle Arten von Statistiken zu bekommen. Ich bin sicher, dass zu tun, dass eines Tages, nur nicht sicher, wann. Mit dieser Strategie mache ich mir keine Sorgen um Transaktionskosten. Mit einem regulären, Retail-Konto auf Interactive Brokers, kann man eine Aktie von SPY für 0,005 handeln. Zum aktuellen Preis von 140, dass8217s vernachlässigbar, wenn nicht getan ein paar Mal am Tag. Hallo, ist Ihr Beitrag nicht nur interessant zu lesen, sondern auch fungiert als Leitfaden für Menschen neu auf dem Gebiet der quantitativen Finanzen. Being ein Anfänger in diesem Bereich, Ihr Blog zu sein scheint eine Goldmine. Ich habe ein paar Fragen, aber , Ich habe Ihre Armasearch-Code auf einem bestimmten Instrument verwendet und festgestellt, dass mit den Indikatoren, es gab keine bessere Leistung als Kauf und halten, so habe ich versucht, in den garchFit-Code mit garch (1,1) als passen Die garch Fehler, könnten Sie mich freundlich führen, so dass ich in der Lage, dies zu tunRelevante Beispiele oder Links wäre sehr hilfreich. Auch habe ich nicht aus Ihrem Code zu verstehen, wie genau, um den Handel ausführen, dh Eintritts-und Ausstiegspunkte, könnten Sie freundlich führen mich in der gleichen Hi, Ihr Blog ist nicht nur interessant, sondern auch informativ für Menschen neu in der Welt der Quantitative finance. Ich habe ein paar Fragen, habe ich die Armasearch-Funktion für ein bestimmtes Instrument verwendet und bei Backtesting gefunden die Ergebnisse als unterlegen zu kaufen und zu halten, so dass ich versuche, garch (1,1) passen, könnten Sie freundlich zu führen Mich in Bezug auf, wie das gleiche zu tun, können Sie mir helfen, über Ein-und Ausstiegspunkte für die Indikator von Ihnen über Hi erzeugt, ist dies meine beste Anstrengung (ohne Bereitstellung der Quellcode selbst) zu erklären, wie man garchFit verwenden. Vielleicht möchten Sie erste andere Arma-Ansätze ausprobieren, würde ich das Prognosepaket und sein author8217s Buch (otexts fpp) oder das rugarch Paket empfehlen. Beide Pakete bieten mehr wissenschaftlichen und erweiterten Ansatz für Arma-Modell Auswahl. Um die Ideen auf diesem Blog in der Praxis bewerben erfordert eine erhebliche Menge an zusätzlichen Arbeiten. Meine einzige beraten, die ich in anderen Beiträgen skizziert habe, ist, über die Anwendung in der Praxis bei jedem Schritt denken. Vielen Dank für die großartigen Einführungen, die Sie für Einsteiger (als mich) in quantitative Finanzen bereitstellen. In Ihrer Arbeit gehen Sie die Zeitreihe Tag für Tag, die Suche nach dem besten ARMA-Modell 8211 ARMA (p, q) und dann mit dem Modell, um die nächste day8217s Richtung vorherzusagen. Dann zur Verbesserung der Leistung, verwenden Sie die besten arma paremers (p, q) für die Zeit mit GARCH (1,1), um ein neues Modell zu erstellen und verwenden Sie es, um die nächste day8217s Richtung vorherzusagen. Sie haben also ein Modell mit 4 Parametern, die in garchFit verwendet werden. Ich bin mit einer anderen GARCH-Bibliothek (nicht in R, ist es in C) und in ihm die Parameter für das Modell sind nur 2 (anstelle von 4): die Anzahl der auto-regressiven (AR) - Parameter und die Anzahl der gleitenden Durchschnitt (MA). Könnten Sie bitte beraten, wie Sie Ihre Methode in meinem Szenario verwenden (wie immer die Schaffung eines GRACH (1,1) ohne Rücksicht auf die ARMA (P, Q) ist anders). Es scheint, dass der Grund, dass Sie nur 2 Parameter für Ihr Modell haben, weil Sie versuchen, Ihr Datum zu einem ARMA-Modell ohne die Heteroskedastizität-Komponente passen Die GarchFit-Methode innerhalb der fGarch-Bibliothek in R erlaubt, auf einem generalisierten autoregressiven Modell passen (daher Die 4 Parameter) Schnelle (verwandte) Frage für Sie: Können Sie mich auf die C-Bibliothek, die Sie beziehen sich auf Ich bin selbst lieber C (wie ich eine ganze Architektur um sie herum gebaut) und ich möchte zu übernehmen Eine Datenanpassungsbibliothek, die es ermöglicht, ein ARMA-Modell aufzurufen. Ihre Beiträge sind wirklich toll und haben eine Menge wertvolle Informationen. Ich versuchte, die Tagesanzeige csv zu betrachten aber it8217s nicht mehr oben. Wäre ich in der Lage, eine Kopie zu Inspektion I8217m derzeit testen den vollständigen Arma-Code zu überprüfen und wollen wissen, wie die Ergebnisse richtig zu bewerten, bevor Sie auf die Umsetzung der GARCH-Komponente zu implementieren. Ich liebte das Lesen Ihres Blogs auf diesem. Ich verwendete die alternative auto. arima () - Funktion anstelle Ihrer (viel langsamer und teurer) ARMAsearch-Funktion, aber dass man drastisch unterschiedliche Backtests gab und schlimmer machte als Buy-and-Hold. Es didn8217t replizieren Ihre Ergebnisse auf der Grundlage Ihrer ARMAsearch, aber es hat jedoch erfassen eine Menge Gewinne um die 821708 Krise, ähnlich wie Ihre ARMAsearch hat, aber es noch doesn8217t wirklich vergleichen. Das war interessant für mich. Im Moment lese ich den auto. arima () Quellcode und vergleicht ihn mit deiner ARMAsearch. Es scheint, Sie haben eine Raster-Suche auto. arima () eine lokale Suche (was die Geschwindigkeit erklärt). Kann ich fragen, welche Art von Hardware verwenden Sie heutzutage Sie tun alle GPU-Berechnungen Hallo, froh, dass Sie wie mein Blog. Für meinen Gebrauch finde ich die Intel CPUs, um genügend Leistung und Parallelisierung zu geben. Die Hardware ich benutze ist Quad-Core i7 mit Hyperthreading, die es 8220almost8221 8-Wege macht. Bei einer solchen Maschine dauert ein ARMAGARCH-Backtest für etwa 50 Jahre Daten weniger als einen Tag (wenn mein Speicher korrekt ist). Es macht die ganze Arbeit für die Prognose von On-Close-Entscheidungen für einen bestimmten Tag (d. h. die Arbeit erforderlich, um für einen Handelstag vorzubereiten) in etwa ein paar Stunden. In der Tat haben Sie Recht, die auto. arima-Funktion verwendet einen anderen Algorithmus, die doesn8217t analysieren alle Ergebnisse. Aus meiner Erfahrung ist es nicht einfach, 100 Ergebnisse zwischen Paketen zu replizieren. Vor allem, wenn man die Verteilung der Residuen einbezieht. Ich bemerkte das gleiche, wenn, irgendwann, versuchte ich kurz die rugarch Paket. Hallo Ivan, ich bin ein Neuling zu mathematischen Finanzen. Ich habe gerade diskutiert mit meinem Professor über die Verwendung von ARMA-Modell in echten Handel letzte Woche. Ich fand Ihr Detailmodell sehr interessant. So versuche ich, es Zeile für Zeile zu studieren. Ich habe versucht, drucken Sie die Standard-Fehler zusammen mit der Vorhersage und festgestellt, dass die Größe der Standard-Fehler weit größer als die Vorhersage. Ich dachte, wenn das wäre viel Risiko auf individuelle Entscheidung Post, die Begrenzung des Modells auf eine große Anzahl von Entscheidungen nur funktionieren, und vielleicht nicht so, wenn mit der Strategie für einen kurzen Zeitraum. Hoffnung kann Ihre Idee erhalten. Vielen Dank. That8217s ein Problem und es wurde bereits in anderen Kommentaren diskutiert. Wenn man diese Methode wegen fehlender statistischer Verdienste nicht gebrauchen will, so sei es. Ein alternativer Ansatz wäre, ein System zu entwickeln, das eine Methode verwendet, während 8220it works8221 arbeitet. Hey ivannp, Großer Blog, danke. Ich habe mit Ihrem Code für einige research8230 würden Sie bereit sein, um den Quellcode für die Schaffung der Indikator-Matrix Danke Post. Mclapply nimmt Modelle, eine Liste aller Modelle (und jedes Modell ist auch eine Liste, also haben wir eine Liste von Listen) wollen wir als ihr erstes Argument zu berechnen, dann ruft es garchAutoTryFit für jedes einzelne Modell aus dieser Liste, vorbei Das Modell als it8217s erste Argument. Die folgende Zeile fügt der Liste in garchAuto ein neues Modell hinzu: modellength (models) 1 list (orderc (p, q, r, s), distdist) Jedes Modell ist auch eine Liste, die die Reihenfolge enthält (auf Bestellung zugegriffen) Verteilung (Zugriff über dist). Nun fühle ich es ein bisschen wie ein hässlicher Weg, um Dinge zu tun, aber es bekommt die Arbeit getan. :) Ok8230 das macht Sinn für mich, aber was ist eigentlich Gebäude der ll garchAutoTryFit und garchAuto können Sie die Parameter für die Vorhersage zu optimieren Sie machen mit garchfit8230 Ich weiß, dass die 8220data8221 oder 8220xx8221 in den Code ist die Rückkehr Serie, aber ich don8217t sehen, wie die Funktionen ohne eine erste ll auszuführen. Thanks ll wird in garchAuto, mit min. order, max. order und ein paar andere Parameter an die Routine durch den Benutzer übergeben gebaut. Wenn min. order ist (0,0,1,1) und max. order ist (5,5,1,1), konstruiert garchAuto eine ll, die alle möglichen Variationen innerhalb dieser Grenzen enthält, zum Beispiel wird sie enthalten (0 , 0,1,1), (0,1,1,1) usw. Standardmäßig wählt die Routine das beste Modell innerhalb (0,0,1,1) und (5,5,1,1). Ok8230 Danke. Ich habe versucht, garchAuto mit einer Rückkehr-Serie als die xx-Eingang, sondern nur erhalten NULL Sehr informative Blog Ich plane eine ähnliche Strategie mit auto. arima () verwenden, ohne Erfolg so weit 8211 nur starten. 8211 Was war Ihre approximative CAGR mit nur ARIMA-Modellen ohne Garch 8211 Wie entscheiden Sie, welche Position zu nehmen: Sie kaufen, sobald die Prognose auf die Rendite ist positiv und verkaufen, wenn 8211 negativ, oder führen Sie minimale Schwellenwerte (zu vermeiden Verkauf oder Kauf, wenn der Unterschied zu klein ist) Wenn ja, wie definieren Sie diese Grenzwerte 8211 Könnten Sie bitte zitieren einige der Gründe, warum Sie don8217t Prognose auf der ursprünglichen Serie Ist es eine kritische Bedingung IYO 8211 Können Sie beraten, wie ich könnte Gehen Sie mit meiner (derzeit) erfolglosen auto. arima () Strategie ARIMA ohne GARCH ist nicht sehr gut auf der SPY. Weder auf andere ETFs. Auch bei GARCH braucht es zusätzliche Arbeit, um etwas Handelsfähiges zu finden. Ich gehe davon aus, dass ich die Geschäfte am Ende ausführen kann, was im wirklichen Leben erreichbar ist. Am einfachsten ist es, die Futures zu handeln (open 24 7) aber man muss es richtig backtest. ARMA GARCH werden in stationären Zeitreihen eingesetzt. Die Retouren sind stationär, die Schlusskurse liegen nicht vor. Ich bin ein Anfänger Trader suchen, um einen Grad in Stats auf die Welt der Finanzmärkte anzuwenden. Ich sah, dass Sie didn8217t wollen, um den Code ein paar Jahre zurück zu teilen, aber wenn es irgendein Formular-Skript könnte ich durchschauen und verwenden, um besser lernen, R, dann wäre ich mehr als dankbar, wenn Sie senden könnte es meinen Weg. Nochmals vielen Dank für die Post, es war ausgezeichnet. Leave a Reply Hier klicken, um die Antwort abzubrechen ReplyARIMAGARCH Handelsstrategie auf dem SampP500 Börsenindex unter Verwendung von R In diesem Artikel möchte ich Ihnen zeigen, wie Sie das gesamte Wissen nutzen, das in den früheren Zeitreihenanalyseposten zu einer Handelsstrategie auf dem SampP500 US Aktienmarktindex gewonnen wurde. Wir werden sehen, dass wir durch die Kombination der ARIMA - und GARCH-Modelle langfristig einen Buy-and-Hold-Ansatz deutlich übertreffen können. Strategie-Überblick Die Idee der Strategie ist relativ einfach, aber wenn du mit ihm experimentieren willst, schlage ich vor, die vorherigen Beiträge auf Zeitreihenanalyse zu lesen, um zu verstehen, was Sie ändern würden. Die Strategie wird auf einer rollenden Grundlage durchgeführt: Für jedes Tag, n werden die vorangegangenen k Tage der differenzierten logarithmischen Renditen eines Börsenindex als Fenster für die Anpassung eines optimalen ARIMA - und GARCH-Modells verwendet. Das kombinierte Modell wird verwendet, um eine Vorhersage für den nächsten Tag Rückkehr zu machen. Wenn die Vorhersage negativ ist, wird die Aktie beim vorigen Schließen kurzgeschlossen, wenn sie positiv ist, ist sie sehnlich. Wenn die Vorhersage die gleiche Richtung wie der Vortag ist, dann wird nichts geändert. Für diese Strategie habe ich die maximal verfügbaren Daten von Yahoo Finance für den SampP500 verwendet. Ich habe k500 genommen, aber dies ist ein Parameter, der optimiert werden kann, um die Leistung zu verbessern oder reduzieren Drawdown. Der Backtest wird in einer geradlinigen vektorisierten Weise unter Verwendung von R durchgeführt. Es wurde noch nicht in dem Python-ereignisgesteuerten Backtester implementiert. Daher würde die Performance, die in einem echten Handelssystem erzielt wird, wahrscheinlich etwas geringer sein, als Sie hier erreichen könnten, aufgrund von Provisionen und Schlupf. Strategie Umsetzung Zur Umsetzung der Strategie werden wir einige der Code, den wir zuvor in der Zeitreihe Analyse Artikel-Serie sowie einige neue Bibliotheken einschließlich Rugarch erstellt haben. Die mir von Ilya Kipnis bei QuantStrat Trader vorgeschlagen wurde. Ich gehe die Syntax Schritt für Schritt durch und präsentiere dann die vollständige Implementierung am Ende sowie einen Link zu meinem Datensatz für den ARIMAGARCH-Indikator. Ive eingeschlossen das Letztere, weil es mich ein paar Tage auf meinem dekstop PC genommen hat, um die Signale zu erzeugen Sie sollten in der Lage sein, meine Resultate in der Gesamtheit zu replizieren, da der Code selbst nicht zu komplex ist, obwohl es einige Zeit dauert, zu simulieren, wenn Sie Führen Sie es in voller Höhe. Die erste Aufgabe besteht darin, die notwendigen Bibliotheken in R zu installieren und zu importieren: Wenn Sie bereits die Bibliotheken installiert haben, können Sie sie einfach importieren: Damit werden die Strategien für den SampP500 angewendet. Wir können quantmod verwenden, um Daten ab 1950 für den Index zu erhalten. Yahoo Finance nutzt das Symbol GPSC. Wir können dann die differenzierten logarithmischen Renditen des Schlusskurses des SampP500 erstellen und den anfänglichen NA-Wert ausstreifen: Wir müssen einen Vektor erstellen, um unsere Prognosewerte zu bestimmten Terminen zu speichern. Wir setzen die Länge foreLength gleich der Länge der Handelsdaten, die wir minus k haben, die Fensterlänge: In diesem Stadium müssen wir jeden Tag in den Handelsdaten durchlaufen und ein passendes ARIMA - und GARCH - Modell in das Rollfenster von Länge k. Angesichts der Tatsache, dass wir versuchen, 24 separate ARIMA passt und passen ein GARCH-Modell, für jeden Tag kann die Indikator kann eine lange Zeit zu generieren. Wir verwenden den Index d als Schleifenvariable und Schleife von k auf die Länge der Handelsdaten: Wir erstellen dann das Rollfenster, indem wir die SampP500-Renditen nehmen und die Werte zwischen 1d und kd wählen, wobei k500 für diese Strategie gilt: Wir verwenden die Dieselbe Prozedur wie im ARIMA-Artikel, um alle ARMA-Modelle mit p in und q in, mit Ausnahme von p, q0, zu durchsuchen. Wir wickeln den arimaFit-Aufruf in einem R tryCatch-Ausnahmebehandlungsblock um sicherzustellen, dass, wenn wir keine Anpassung für einen bestimmten Wert von p und q erhalten, wir ihn ignorieren und zur nächsten Kombination von p und q übergehen. Beachten Sie, dass wir den integrierten Wert von d0 setzen (dies ist ein anderer d zu unserem Indexierungsparameter) und als solche passen wir wirklich zu einem ARMA-Modell. Eher als ein ARIMA. Das Looping-Verfahren wird uns das am besten passende ARMA-Modell im Sinne des Akaike-Informationskriteriums liefern, das wir dann für unser GARCH-Modell einsetzen können: Im nächsten Codeblock werden wir die Rugarch-Bibliothek verwenden GARCH (1,1) - Modell. Die Syntax dafür erfordert, dass wir ein ugarchspec Spezifikationsobjekt aufbauen, das ein Modell für die Varianz und den Mittelwert annimmt. Die Varianz empfängt das GARCH (1,1) - Modell, während der Mittelwert ein ARMA (p, q) - Modell annimmt, wobei p und q oben gewählt sind. Wir wählen auch die gesendete Verteilung für die Fehler. Sobald wir die Spezifikation ausgewählt haben, führen wir die eigentliche Anpassung von ARMAGARCH mit dem Befehl ugarchfit aus, der das Spezifikationsobjekt, die k Rückkehr des SampP500 und einen numerischen Optimierungslöser übernimmt. Wir haben uns für Hybrid entschieden. Die verschiedene Löser versucht, um die Wahrscheinlichkeit der Konvergenz zu erhöhen: Wenn das GARCH-Modell nicht konvergiert, dann setzen wir einfach den Tag, um eine lange Vorhersage zu erzeugen, was eindeutig eine Vermutung ist. Wenn jedoch das Modell konvergiert, geben wir die Datums - und Morgenvorhersagerichtung (1 oder -1) als String aus, an welchem ​​Punkt die Schleife geschlossen ist. Um die Ausgabe für die CSV-Datei vorzubereiten, habe ich einen String erstellt, der die Daten durch ein Komma getrennt mit der Prognose-Richtung für den folgenden Tag enthält: Der vorletzte Schritt ist die Ausgabe der CSV-Datei auf den Datenträger. Dies ermöglicht es uns, die Indikator zu nehmen und es in alternative Backtesting-Software für die weitere Analyse verwenden, wenn dies gewünscht: Es gibt jedoch ein kleines Problem mit der CSV-Datei, wie es jetzt steht. Die Datei enthält eine Liste von Daten und eine Vorhersage für die Richtung von morgen. Wenn wir diese in den darunter liegenden Backtest-Code laden würden, würden wir tatsächlich eine Vorausschau-Bias einführen, da der Vorhersagewert Daten darstellen würde, die zum Zeitpunkt der Vorhersage nicht bekannt waren. Um dies zu berücksichtigen, müssen wir einfach den vorhergesagten Wert um einen Tag verschieben. Ich habe dies mit Python einfacher gefunden. Da ich nicht annehmen möchte, dass du irgendwelche speziellen Bibliotheken (wie Pandas) installiert hast, hielt Ive es zu reinem Python. Hier ist das kurze Skript, das dieses Verfahren ausführt. Stellen Sie sicher, dass es im gleichen Verzeichnis wie die Datei "forecasts. csv" ausgeführt wird: An dieser Stelle haben wir nun die korrigierte Indikatordatei gespeichert, die in forecastsnew. csv gespeichert ist. Da dies eine beträchtliche Menge an Zeit zur Berechnung benötigt, stellte Ive die vollständige Datei hier zur Verfügung, damit Sie sich herunterladen können: Strategieergebnisse Nachdem wir unsere CSV-Indikator-Datei generiert haben, müssen wir ihre Performance mit Buy amp Hold vergleichen. Zuerst lesen wir das Kennzeichen aus der CSV-Datei und speichern es als spArimaGarch: Wir erstellen dann einen Schnittpunkt der Daten für die ARIMAGARCH-Prognosen und den ursprünglichen Satz von Renditen aus dem SampP500. Wir können dann die Rendite für die ARIMAGARCH-Strategie berechnen, indem wir das Prognosezeichen (oder -) mit der Rendite selbst multiplizieren: Wenn wir die Renditen aus der ARIMAGARCH-Strategie haben, können wir Eigenkapitalkurven sowohl für das ARIMAGARCH-Modell als auch für Buy amp Hold erstellen. Schließlich kombinieren wir sie zu einer einzigen Datenstruktur: Schließlich können wir den Xyplot-Befehl verwenden, um beide Eigenkapitalkurven auf demselben Grundstück darzustellen: Die Eigenkapitalkurve bis zum 6. Oktober 2015 ist wie folgt: Wie Sie sehen können, über 65 Jahre Periode hat die ARIMAGARCH-Strategie den Buy amp Hold deutlich übertroffen. Allerdings können Sie auch sehen, dass die Mehrheit der Gewinn zwischen 1970 und 1980. Beachten Sie, dass die Volatilität der Kurve ist sehr minimal bis Anfang der 80er Jahre, an welcher Stelle die Volatilität steigt deutlich und die durchschnittlichen Renditen sind weniger beeindruckend. Die Eigenkapitalkurve verspricht für die gesamte Periode eine sehr gute Performance. Allerdings wäre diese Strategie wirklich handelbar Zunächst einmal können wir die Tatsache, dass die ARMA-Modell wurde nur im Jahr 1951 veröffentlicht. Es war nicht wirklich weit verbreitet, bis die 1970er Jahre, wenn Box amp Jenkins diskutiert es in ihrem Buch. Zweitens wurde das ARCH-Modell bis Anfang der 80er Jahre von Engle nicht entdeckt und GARCH selbst wurde 1986 von Bollerslev veröffentlicht. Drittens wurde dieser Backtest tatsächlich an einem Börsenindex durchgeführt und ist kein physisch handelbares Instrument. Um Zugang zu einem solchen Index zu erhalten, wäre es notwendig gewesen, SampP500-Futures oder einen replizierten Exchange Traded Fund (ETF) wie SPDR zu handeln. Daher ist es wirklich so angebracht, solche Modelle auf eine historische Serie vor ihrer Erfindung anzuwenden. Eine Alternative ist, die Anwendung der Modelle auf neuere Daten zu beginnen. In der Tat können wir die Performance in den letzten zehn Jahren betrachten, vom 1. Januar 2005 bis heute: Wie Sie sehen können, bleibt die Eigenkapitalkurve unter einem Buy amp Hold Strategie für fast 3 Jahre, aber während der Börsencrash von 2008 2009 it Tut außerordentlich gut. Dies macht Sinn, weil es wahrscheinlich ist, eine signifikante serielle Korrelation in diesem Zeitraum und es wird gut durch die ARIMA und GARCH Modelle erfasst werden. Sobald sich der Markt nach dem Jahr 2009 wieder erholt hat und in den scheinbar stochastischeren Trend eintritt, beginnt die Modellleistung wieder zu leiden. Beachten Sie, dass diese Strategie leicht auf verschiedene Börsenindizes, Aktien oder andere Anlageklassen angewendet werden kann. Ich ermutige Sie dringend, die Erforschung anderer Instrumente auszuprobieren, da Sie wesentliche Verbesserungen der hier präsentierten Ergebnisse erhalten können. Nächste Schritte Nachdem wir nun über die ARIMA - und GARCH-Modellfamilie diskutiert haben, möchte ich die Analyse der Zeitreihenanalyse fortsetzen, indem ich Langzeitgedächtnisprozesse, Zustandsraummodelle und kointegrierte Zeitreihen betrachte. Diese nachfolgenden Bereiche der Zeitreihen werden uns Modelle vorstellen, die unsere Prognosen über jene Ive, die hier präsentiert werden, verbessern können, die unsere Handels-Rentabilität signifikant erhöhen oder das Risiko reduzieren werden. Hier ist die vollständige Liste für die Indikatorgenerierung, Backtesting und Plotten: Und der Python-Code auf prognosen. csv vor dem Reimporting gelten:

Comments