Ich versuche, eine Handelsstrategie mit quantstrat Paket zu testen. Meine Strategie besteht aus 4 Indikatoren, 3 verschiedenen EMAs und 1 verzögerten EMA. Ich möchte gehen, wann: EMA1 EMA2 amp EMA1 EMA3 amp EMA1lag lt EMA1 Ich möchte beenden und gehen flach, wenn: EMA1 lt EMA3 Seine ziemlich einfach, aber ich bin nicht in der Lage, es in quantstrat Umgebung zu schreiben. Heres eine Datenintegritätsprüfung Funktion in beiden Beispielen verwendet: Hier ist der Blotter-Code, was ich will: Ich habe versucht, die oben genannte Strategie mit quantstrat replizieren (mit add. indicator. add. signal. add. rule), aber die Ergebnisse sind Auf jeden Fall anders. Hier der zweite Code mit quantstrat: Könnte jemand mir helfen zu verstehen, warum der zweite Code nicht identische Ergebnisse Ich glaube, meine Fehler sind innerhalb der add. indicator. Add. signal. Add. rule-Setup, aber ich bin nicht in der Lage, es genau herauszufinden. Der Quanstrat-basierte Code wird nicht bieten identische Ergebnisse aus mehreren Gründen. Eins ist, dass Ihre Spalten in Ihren ersten 3 add. signal Anrufen nicht korrekt sind. Alle Spalten benötigen eine EMA. Präfix: Ein weiteres Problem, und wahrscheinlich die größte Ursache für Unterschiede, ist das nächste Signal: Das schafft ein Signal für jede Beobachtung, wo die Formel wahr ist, nicht nur die Beobachtungen, bei denen die Formel von falsch auf true übergeht. Sie wollen nur die Beobachtungen, in denen die Formel kreuzt, also sollten Sie verwenden: Eine andere Quelle der Unterschiede ist, dass Sie immer 100 Ihrer verfügbaren Eigenkapital für Ihre Öffnung lange Transaktion in der Blotter-Version verwenden, aber Sie kaufen immer 900 Aktien in der Quantstrat-Version. Sie können etwas Ähnliches in Quantstrat tun, indem Sie eine benutzerdefinierte Reihenfolge Sizing-Funktion (siehe osNoOp und osMaxPos für Beispiele, wie man eine benutzerdefinierte Reihenfolge Sizing-Funktion schreiben). Die Leute bei Rstudio haben einige erstaunliche Arbeit mit dem glänzenden Paket getan. Von der glänzenden Homepage macht 8220Shiny es super einfach für R-Nutzer wie Sie, um Analysen in interaktive Web-Anwendungen, die jeder verwenden kann.8221 Entwickeln von Web-Anwendungen hat immer an mich appelliert, aber Hosting, lernen Javascript, html, etc. machte mich setzen Dieses ziemlich niedrig auf meiner Prioritätsliste. Mit glänzend kann man Webanwendungen in R schreiben. In diesem Beispiel wird das Manager-Dataset mit Aufrufen von diagrams. PerformanceSummary und table. Stats aus dem PerformanceAnalytics-Paket verwendet, um ein Diagramm und eine Tabelle in der glänzenden Anwendung anzuzeigen. Sie müssen glänzende und Performance Analytics-Pakete installiert haben, um die Anwendung auszuführen. Sobald diese installiert sind, öffnen Sie Ihre R-Aufforderung und laufen: Es gibt eine große glänzende Tutorial von Rstudio sowie Beispiele von SystematicInvestor für diejenigen, die mehr lernen wollen. Die letzten Beiträge auf Impuls mit R konzentrierte sich auf einen relativ einfachen Weg, um Momentum Strategien Backtest. In Teil 4 verwende ich das Quantstrat-Framework, um eine Momentumstrategie rückwärts zu testen. Mit quantstrat öffnet sich die Tür zu mehreren Merkmalen und Optionen sowie ein Orderbuch zur Überprüfung der Trades bei Abschluss des Backtests. Ich führe einige neue Funktionen ein, die benutzt werden, um die Daten vorzubereiten und die Reihen zu berechnen. Ich werde sie im Detail durchgehen, diese Funktionen sind in meinem Github-Repo im Ordner "rank-functions" verfügbar. Dieser erste Codeabschnitt lädt nur die notwendigen Bibliotheken, Daten und wendet die ave3ROC-Funktion an, um die Assets auf der Grundlage der Mittelung der 2, 4 und 6 Monatsrenditen zu klassifizieren. Beachten Sie, dass Sie die Funktionen in Rank. R und monthly-fun. R laden müssen. Der nächste Teil des Codes ist ein kritischer Schritt bei der Vorbereitung der Daten, die in Quantstrat verwendet werden sollen. Mit den berechneten Reihen wird der nächste Schritt sein, die Reihen an die tatsächlichen Marktdaten zu binden, die mit Quantstrat verwendet werden sollen. Es ist auch wichtig, die Spaltennamen auf z. B. XLY. Rank, weil das als Handelszeichen Spalte verwendet wird, wenn Quantstrat verwendet wird. Jetzt kann der Backtest laufen. Die Funktion qstratRank ist nur eine Bequemlichkeitsfunktion, die die Quantstrat-Implementierung für meine Rangstrategie verbirgt. Für diesen ersten Backtest handele ich die Top 2 Assets mit einer Positionsgröße von 1000 Einheiten. Das Ändern des Arguments auf max. levels2 gibt die Flexibilität von 8220scaling8221 in einem Trade. In diesem Beispiel sagen, Asset ABC auf Platz 1 im ersten Monat 8212 Ich kaufe 500 Einheiten. Im Monat 2, Asset ABC ist immer noch auf Platz 1 8212 Ich kaufe weitere 500 Einheiten. In der vorherigen Post zeigte ich einfache Backtests für den Handel eine Reihe von Vermögenswerten auf der Grundlage ihrer 3, 6, 9 oder 12 (i. e Rückblickperioden) Monat einfache Rückkehr. Während es nicht ein erschöpfender Backtest war, zeigten die Ergebnisse, dass beim Trading der Top-8-Ranking-Assets, die auf Ranking basierende 3, 6, 9 und 12 Monate Rückkehr in ähnliche Leistung führte. Wenn die Ergebnisse für die verschiedenen Lookback-Perioden ähnlich waren, welche Look-back-Periode sollte ich für meine Strategie wählen Meine Antwort ist, mehrere Rückblickperioden in der Rangfolge-Methode enthalten. Dies kann erreicht werden, indem man den Durchschnitt der Renditen 6, 9 und 12 Monate oder andere n-Monats-Renditen einnimmt. Dies gibt uns den Vorteil der Diversifizierung über mehrere Rückblickperioden hinweg. Wenn ich glaube, dass die Rückblickperiode von 9 Monatsrenditen besser ist als die des 6 und 12 Monats, kann ich einen gewichteten Durchschnitt verwenden, um dem 9 Monatsrückkehr ein höheres Gewicht zu geben, damit es mehr Einfluss auf die Bestimmung des Ranges hat. Dies kann leicht mit dem implementiert werden, was ich die WeightAve3ROC () - Funktion unten aufrufen. Die Funktion ist ziemlich selbsterklärend, aber fühlen Sie sich frei zu fragen, wenn Sie irgendwelche Fragen haben. Nun zu den Testergebnissen. Die nachstehende Grafik zeigt die Ergebnisse aus 6, 9 und 12 Monatsrenditen sowie durchschnittlich 6, 9 und 12 Monatsrenditen und gewichtetem Durchschnitt von 6, 9 und 12 Monatsrenditen. Fall 1: einfacher Momentumtest basierend auf 6 Monate ROC auf Rang Fall 2: einfacher Impulstest basierend auf 9 Monate ROC auf Rang Fall 3: einfacher Impulstest auf der Basis von 12 Monaten ROC auf Rang Fall 4: einfacher Impulstest basierend auf dem Durchschnitt von 6 , 9 und 12 Monate ROC auf Rang 5: einfacher Momentumtest basierend auf dem gewichteten Durchschnitt von 6, 9 und 12 Monaten ROC auf Rang. Gewichte sind 16, 23, 16 für 6, 9 und 12 Monate Rückkehr. Hier ist eine Tabelle der Renditen und maximalen Drawdowns für den Test. Dieser Test zeigt, wie es möglich ist, bessere risikoadjustierte Renditen (höhere CAGR und niedrigere Drawdowns in diesem Fall) zu erreichen, indem mehrere Rückblickperioden in der Rangfolgemethode berücksichtigt werden. Full R-Code ist unten. Ich habe alle Funktionen in das R-Skript unten, um es einfach für Sie, um die Tests zu reproduzieren und die Dinge aus, aber ich würde empfehlen, setzen Sie die Funktionen in einer separaten Datei und mit Source (), um die Funktionen zu laden, um den Code zu halten Reiniger. Viele der Aufstellungsorte, die ich mit im vorhergehenden Pfosten verbunden habe, haben Artikel oder Papiere auf Impulskosten, die die typischen Klassifizierungsfaktoren 3, 6, 9 und 12 Monatsrückkehr untersuchen. Die meisten (nicht alle) der Artikel suchen zu finden, die die beste Rückblick Zeit, um die Vermögenswerte Rang ist. Sagen, dass das Ergebnis des Artikels ist, dass die 6-Monats-Rückblick hat die höchsten Renditen. Ein Trading eine Strategie, die nur eine 6-Monats-Rückblick Zeitraum, um die Vermögenswerte Rang lässt mich anfällig für Über-Anpassung auf der Grundlage der Backtest-Ergebnisse. Der Backtest erzählt uns nichts weiter, als welche Strategie in der Vergangenheit das Beste geleistet hat, es erzählt uns nichts über die Zukunft8230 duh Wenn ich die Ergebnisse von Backtests überprüfe, stelle ich mir immer sehr viel was bei Fragen. Hier sind 3 was, wenn Fragen, die ich für diesen Backtest fragen würde: Was passiert, wenn die Strategie auf einem 6-Monats-Rückblick unter führt und die 9 Monate oder 3 Monate beginnt zu überschreiten Was passiert, wenn die Strategien auf 3, 6, Und 9 Monate Rückblick haben über das gleiche Rendite - und Risikoprofil, welche Strategie sollte ich handeln Was ist, wenn die Assets mit hoher Volatilität das Ranking dominieren und damit die Renditen steuern Die Backtests, die gezeigt werden, sind einfache Backtests, um die Variabilität in Renditen zu demonstrieren Basierend auf Rückblickperioden und Anzahl der gehandelten Vermögenswerte. Die nachstehenden Grafiken zeigen die Performance einer Impulsstrategie unter Verwendung von 3, 6, 9 und 12 Monatsrenditen und handeln die Top 1, 4 und 8 Rangliste. Sie werden feststellen, dass es erhebliche Volatilität und Variabilität in Renditen nur Handel 1 Vermögenswert. Die Variabilität zwischen Rückblickperioden wird reduziert, aber es gibt immer noch keine eindeutig beste Rückblickperiode. Es gibt Perioden von unter Leistung und über Leistung für alle Rückblickperioden im Test. Hier ist der R-Code für die Backtests und die Plots verwendet. Hinterlassen Sie einen Kommentar, wenn Sie Fragen zum unten stehenden Code haben. Die Zeit ist wirklich fliegt es ist schwer zu glauben, dass es seit mehr als einem Monat seit meiner letzten Post. Arbeit und Leben im Allgemeinen haben viel von meiner Zeit in letzter Zeit verbraucht und ließen wenig Zeit für Forschung und Blog-Posts. Wie auch immer, auf die Post Dieser Beitrag wird die erste in einer Reihe von einer Impulsstrategie mit R. Eine meiner Lieblings-Strategien ist eine Dynamik oder relative Stärke-Strategie zu decken. Hier sind nur einige der Gründe, warum ich Impulse mag: Einfache Implementierung Long - oder Longshort-Portfolios Viele Möglichkeiten, um die Stärke oder Impulsmaßstab zu definieren Es funktioniert einfach Auch eine Impulsstrategie eignet sich gut für das Diversifizierungspotenzial. Das Universum der Instrumente kann unendlich sein, aber die gehandelten Instrumente sind endlich. Denken Sie darüber nach, wie sich Investor A auf 10 Instrumente und investiert 1000 in die Top-5-Instrumente, die von Momentum. Investor B schaut auf 100 Instrumente und investiert 1000 in die Top 5 Instrumente, die von Momentum geordnet sind. Investor A begrenzt sein Potenzial für Diversifikation, indem es nur ein Universum von 10 Instrumenten hat. Investor B hat ein viel größeres Universum von Instrumenten und kann in der Theorie stärker diversifiziert werden. Theoretisch können Sie eine unendliche Anzahl von Instrumenten mit einer begrenzten Menge an Handelskapital mit einer Impuls - oder relativen Stärke-Strategie handeln. Schauen Sie sich diese Links für die weitere Lesung In diesem ersten Beitrag der Serie auf Impuls, werde ich gehen einige der grundlegenden Setup und Funktionen, die wir verwenden werden. Der erste Schritt ist, um Daten von Yahoo zu bekommen. Beachten Sie, dass die for-Schleife die Daten in monatlich umwandelt und die Daten so untergliedert, dass die einzige Spalte, die wir behalten, die angepasste Close-Spalte ist. Wir haben jetzt vier Objekte (XLY, XLP, XLE, XLF), die den Adjusted Close Preis haben. Der nächste Schritt besteht darin, diese vier Objekte zu einem einzigen Objekt zusammenzuführen, das den Wert "Angepasstes Schließen" enthält. Wir können dies in einem einfachen Einzeiler in R tun. Für den Faktor, der rangiert wird, benutze ich die 3 Periodenrate der Änderung (ROC).
Comments
Post a Comment