Sunday 28 May 2017

Quantitative Trading Strategien In R Part 1 Of 3


30. November 2016, 12:34 Uhr Vor ein paar Monaten zeigt mir ein Leser diese neue Art, R und Excel zu verbinden. Ich weiß nicht, wie lange das schon gewesen ist, aber ich habe nie darauf gekommen und ich habe nie einen Blog-Post oder Artikel darüber gesehen. Also habe ich beschlossen, einen Beitrag zu schreiben, da das Tool es wirklich wert ist und bevor jemand fragt, I8217m nicht mit dem Unternehmen in irgendeiner Weise verwandt. BERT steht für Basic Excel R Toolkit. It8217s kostenlos (lizenziert unter der GPL v2) und wurde von Structured Data LLC entwickelt. Zum Zeitpunkt des Schreibens der aktuellen Version von BERT ist 1.07. Weitere Informationen finden Sie hier. Aus technischer Sicht ist BERT entworfen, um laufende R-Funktionen aus Excel-Tabellenkalkulationen zu unterstützen. In Excel-Begriffen, it8217s für das Schreiben von benutzerdefinierten Funktionen (UDFs) in R. In diesem Beitrag I8217m nicht zeigen, wie R und Excel über BERT interagieren. Es gibt hier sehr gute Tutorials. Hier und hier Stattdessen möchte ich dir zeigen, wie ich BERT benutzt habe, um einen 8220control tower8221 für meinen Handel zu bauen. Meine Trading-Signale werden mit einer langen Liste von R-Dateien generiert, aber ich brauche die Flexibilität von Excel, um Ergebnisse schnell und effizient anzuzeigen. Wie oben gezeigt, kann BERT dies für mich tun, aber ich möchte auch die Anwendung auf meine Bedürfnisse anpassen. Durch die Kombination der Power von XML, VBA, R und BERT kann ich eine gut aussehende und dennoch leistungsstarke Anwendung in Form einer Excel-Datei mit minimalem VBA-Code erstellen. Letztlich habe ich eine einzige Excel-Datei, die alle notwendigen Aufgaben sammelt, um mein Portfolio zu verwalten: Datenbank-Update, Signalerzeugung, Auftragsvorlage etc8230 Mein Ansatz könnte in den folgenden 3 Schritten abgebaut werden: Verwenden Sie XML, um benutzerdefinierte Menüs und Schaltflächen in einem Excel zu erstellen Datei. Die oben genannten Menüs und Tasten sind im Wesentlichen Anrufe an VBA-Funktionen. Diese VBA-Funktionen werden um R-Funktionen, die mit BERT definiert sind, umbrochen. Mit diesem Ansatz kann ich eine klare Unterscheidung zwischen dem Kern meines Codes, der in R, SQL und Python gehalten wird, und alles, was verwendet wird, um Ergebnisse anzuzeigen und zu formatieren, die in Excel, VBA amp XML gespeichert sind. In den folgenden Abschnitten stelle ich die Voraussetzung für die Entwicklung eines solchen Ansatzes und eine Schritt für Schritt Anleitung, die erklärt, wie BERT verwendet werden könnte, um einfach Daten von R nach Excel mit minimalem VBA-Code zu übergeben. 1 8211 BERT von diesem Link herunterladen und installieren. Sobald die Installation abgeschlossen ist, sollten Sie ein neues Add-Ins-Menü in Excel mit den Schaltflächen wie unten gezeigt haben. Dies ist, wie BERT in Excel materialisiert. 2 8211 Herunterladen und Installieren des benutzerdefinierten UI-Editors. Der benutzerdefinierte UI-Editor ermöglicht das Erstellen von benutzerdefinierten Menüs und Schaltflächen im Excel-Band. Hier finden Sie eine Schritt-für-Schritt-Prozedur. Schritt für Schritt Anleitung 1 8211 R Code: Die untenstehende R-Funktion ist ein sehr einfaches Stück Code zur Veranschaulichung nur. Es berechnet und gibt die Residuen aus einer linearen Regression zurück. Das wollen wir in Excel abrufen. Speichern Sie diese in einer Datei namens myRCode. R (jeder andere Name ist in Ordnung) in einem Verzeichnis Ihrer Wahl. 2 8211 funktionen. R in BERT. Wählen Sie aus Excel das Add-Ins - gt Home Directory aus und öffnen Sie die Datei function. R. Fügen Sie in dieser Datei den folgenden Code ein. Stellen Sie sicher, dass Sie den richtigen Pfad einfügen. Dies ist nur Sourcing in BERT die R-Datei, die Sie oben erstellt. Dann speichern und schließen Sie die Datei functions. R. Sollten Sie die in Schritt 1 erstellte R-Datei ändern wollen, müssen Sie sie mit dem BERT-Button 8220Reload Startup File8221 aus dem Add-Ins-Menü in Excel 3 8211 in Excel neu laden: Eine Datei mit dem Namen myFile. xslm erstellen und speichern (Jeder andere name ist gut). Dies ist eine Makro-fähige Datei, die Sie im Verzeichnis Ihrer Wahl speichern. Sobald die Datei gespeichert ist, schließen Sie es. 4 8211 Öffnen Sie die oben erstellte Datei im Custom UI Editor: Sobald die Datei geöffnet ist, fügen Sie den folgenden Code ein. Sie sollten so etwas im XML-Editor haben: Im Wesentlichen erstellt dieses Stück XML-Code ein zusätzliches Menü (RTrader), eine neue Gruppe (Meine Gruppe) und eine benutzerdefinierte Schaltfläche (New Button) im Excel-Band. Sobald you8217re getan ist, öffnen Sie myFile. xslm in Excel und schließen Sie den benutzerdefinierten Benutzeroberteil-Editor. Du solltest so etwas sehen 5 8211 VBA-Editor öffnen In myFile. xlsm füge ein neues Modul ein. Fügen Sie den Code unten in das neu erstellte Modul ein. Dadurch werden die bisherigen Ergebnisse im Arbeitsblatt gelöscht. 6 8211 Klicken Sie auf Neue Schaltfläche. Gehen Sie nun wieder in die Kalkulationstabelle und klicken Sie im RTrader-Menü auf die Schaltfläche 8220New Button8221. Du solltest so etwas wie das unten erscheinen sehen. Der Leitfaden oben ist eine sehr grundlegende Version dessen, was mit BERT erreicht werden kann, aber es zeigt Ihnen, wie Sie die Kraft von mehreren spezifischen Werkzeugen kombinieren können, um Ihre eigene benutzerdefinierte Anwendung zu erstellen. Aus meiner Perspektive ist das Interesse eines solchen Ansatzes die Fähigkeit, zusammen R und Excel offensichtlich zusammenzukleben, aber auch über XML (und Batch) Stücke von Code von Python, SQL und mehr einzuschließen. Das ist genau das, was ich brauchte Schließlich wäre ich neugierig zu wissen, ob jemand irgendwelche Erfahrungen mit BERT hat. 19. August 2016, 9:26 Uhr Beim Testen von Handelsstrategien ist ein gemeinsamer Ansatz, den Anfangsdatensatz in die Beispieldaten aufzuteilen: den Teil der Daten, der entworfen ist, um zu kalibrieren Das Modell und aus den Beispieldaten: der Teil der Daten, die verwendet werden, um die Kalibrierung zu validieren und sicherzustellen, dass die Leistung, die in der Probe erstellt wird, in der realen Welt reflektiert wird. Als Faustregel können etwa 70 der Anfangsdaten für die Kalibrierung (d. h. in der Probe) und 30 für die Validierung (d. h. aus der Probe) verwendet werden. Dann hilft ein Vergleich der In und Out von Beispieldaten zu entscheiden, ob das Modell robust genug ist. Dieser Beitrag zielt darauf ab, einen Schritt weiter zu gehen und stellt eine statistische Methode zur Verfügung, um zu entscheiden, ob die aus den Beispieldaten im Einklang mit dem war, was in der Stichprobe erstellt wurde. In der Grafik unterhalb der blauen Bereich stellt die aus der Probe Leistung für eine meiner Strategien. Eine einfache visuelle Inspektion zeigt eine gute Passform zwischen der in und aus der Probe Leistung aber welchen Grad des Vertrauens habe ich in diesem In diesem Stadium nicht viel und das ist das Problem. Was wirklich benötigt wird, ist ein Maß für die Ähnlichkeit zwischen dem In und aus den Beispieldatensätzen. In statistischer Hinsicht könnte dies als die Wahrscheinlichkeit, dass die in und aus der Probe Leistung Zahlen aus der gleichen Verteilung übersetzt werden übersetzt werden. Es gibt einen nicht parametrischen statistischen Test, der genau das tut: der Kruskall-Wallis Test. Eine gute Definition dieses Tests konnte auf R-Tutor gefunden werden 8220A Sammlung von Datenproben sind unabhängig, wenn sie aus nicht verwandten Populationen kommen und die Proben sich nicht gegenseitig beeinflussen. Mit dem Kruskal-Wallis-Test. Können wir entscheiden, ob die Populationsverteilungen identisch sind, ohne davon auszugehen, dass sie der Normalverteilung folgen.8221 Der zusätzliche Vorteil dieses Tests nimmt keine normale Verteilung an. Es gibt andere Tests der gleichen Art, die in diesen Rahmen passen könnte. Der Mann-Whitney-Wilcoxon-Test oder die Kolmogorov-Smirnov-Tests passen perfekt zu dem Rahmen, der hier beschrieben wird, aber das geht über den Rahmen dieses Artikels hinaus, um die Vor - und Nachteile von jedem dieser Tests zu besprechen. Eine gute Beschreibung zusammen mit R-Beispielen finden Sie hier. Hier ist der Code, der verwendet wird, um das obige Diagramm und die Analyse zu erzeugen: Im obigen Beispiel ist die Abtastperiode länger als die aus der Stichprobenperiode, daher habe ich zufällig 1000 Teilmengen der in Beispieldaten erstellt, die jeweils dieselbe Länge haben wie die aus Der Beispieldaten. Dann habe ich jede in Probe Teilmenge gegen die aus der Probe Daten getestet und ich habe die p-Werte aufgezeichnet. Dieser Prozess schafft nicht einen einzigen p-Wert für den Kruskall-Wallis-Test, sondern eine Verteilung, die die Analyse robuster macht. In diesem Beispiel liegt der Mittelwert der p-Werte weit über null (0,478), was anzeigt, dass die Nullhypothese akzeptiert werden sollte: Es gibt starke Hinweise darauf, dass die Ein - und Ausstiegsproben aus derselben Verteilung stammen. Wie üblich, was in diesem Beitrag präsentiert wird, ist ein Spielzeugbeispiel, das nur die Oberfläche des Problems kratzt und auf individuelle Bedürfnisse zugeschnitten werden sollte. Allerdings denke ich, dass es einen interessanten und rationalen statistischen Rahmen vorschlägt, um die Ergebnisse der Ergebnisse zu bewerten. Dieser Beitrag wird von den folgenden zwei Beiträgen inspiriert: Vigier Alexandre, Chmil Swann (2007), Auswirkungen verschiedener Optimierungsfunktionen auf die Out-of-Sample-Performance von genetisch entwickelten Handelsstrategien, Prognose der Finanzmärkte Konferenz Vigier Alexandre, Chmil Swann (2010), An Optimierungsprozess zur Verbesserung der Stichprobenkonsistenz, ein Börsenkoffer, JP Morgan Cazenove Equity Quantitative Konferenz, London Oktober 2010 13. Dezember 2015, 14:03 Uhr Die quantitative Forschung impliziert viel Daten knirscht und man braucht saubere und zuverlässige Daten zu Dies erreichen. Was wirklich benötigt wird, ist saubere Daten, die leicht zugänglich sind (auch ohne Internetverbindung). Der effizienteste Weg, dies für mich zu tun, war, einen Satz von csv-Dateien zu pflegen. Offensichtlich kann dieser Prozess in vielerlei Hinsicht behandelt werden, aber ich fand sehr effiziente und einfache Überstunden, um ein Verzeichnis zu pflegen, in dem ich csv-Dateien speichere und aktualisiere. Ich habe eine csv datei pro instrument und jede datei benannt nach dem instrument es enthält. Der Grund, warum ich das tue, ist zweifach: Zuerst möchte ich keine Daten von Yahoo, Google etc8230 herunterladen, jedes Mal, wenn ich eine neue Idee testen möchte, aber noch wichtiger, sobald ich ein Problem erkannt und behoben habe, muss ich das auch nicht haben Mach das mal wieder das nächste Mal, wenn ich das gleiche Instrument brauche. Einfach und doch sehr effizient. Der Prozess ist in der folgenden Tabelle zusammengefasst. In allem, was folgt, nehme ich an, dass Daten von Yahoo kommen. Der Code muss für Daten von Google, Quandl etc8230 geändert werden. Darüber hinaus stelle ich den Prozess der Aktualisierung der täglichen Preisdaten vor. Das Setup wird für höhere Frequenzdaten und andere Arten von Datensätzen unterschiedlich sein (d. h. abweichend von den Preisen). 1 8211 Erstmaliges Herunterladen (listOfInstruments. R amp historicData. R) Die Datei listOfInstruments. R ist eine Datei, die nur die Liste aller Instrumente enthält. Wenn ein Instrument nicht Teil meiner Liste ist (d. h. keine csv-Datei in meinem Datenordner) oder wenn Sie es zum ersten Mal tun, müssen Sie den ursprünglichen historischen Datensatz herunterladen. Das Beispiel unten lädt eine Reihe von ETFs Tagespreise von Yahoo Finance zurück bis Januar 2000 und speichern Sie die Daten in einer CSV-Datei. 2 8211 Aktualisieren vorhandener Daten (updateData. R) Der untenstehende Code startet von vorhandenen Dateien im dedizierten Ordner und aktualisiert sie alle nacheinander. Ich laufe diesen Prozeß jeden Tag, außer wenn ich im Urlaub bin. Um ein neues Instrument hinzuzufügen, führen Sie einfach Schritt 1 oben für dieses Instrument allein. 3 8211 Erstellen einer Batch-Datei (updateDailyPrices. bat) Ein weiterer wichtiger Teil des Jobs ist die Erstellung einer Batch-Datei, die den Aktualisierungsprozess oben automatisiert (I8217m ein Windows-Benutzer). Dies vermeidet das Öffnen von RRStudio und führt den Code von dort aus. Der Code unten ist auf einer. bat-Datei platziert (der Pfad muss mit dem reader8217s Setup geändert werden). Beachten Sie, dass ich eine Ausgabedatei (updateLog. txt) hinzugefügt habe, um die Ausführung zu verfolgen. Der Prozess oben ist extrem einfach, weil er nur beschreibt, wie man tägliche Preisdaten aktualisiert. Ich habe das schon seit einiger Zeit benutzt und es hat mich schon sehr gut für mich gearbeitet. Für fortgeschrittenere Daten und höhere Frequenzen können die Dinge viel schwieriger werden. Wie üblich alle Kommentare begrüßen 23. März 2015, 20:55 Uhr Wenn es darum geht, ein Portfolio von Aktien zu versichern, ist ein Problem, dass es sich um eine absolute Rückkehrstrategie handelt. In der ehemaligen muss man mehr Aktien halten als in den späteren, wo überhaupt keine Aktien vorhanden sind, wenn es nicht gut genug gibt. Der Grund dafür ist der Tracking Error. Dies ist definiert als die Standardabweichung der Portfolio-Rendite abzüglich der Benchmark-Rendite. Je weniger Bestände gegenüber einem Benchmark gehalten werden, desto höher ist der Tracking-Error (z. B. höheres Risiko). Die nachfolgende Analyse ist weitgehend durch das Buch 8220Active Portfolio Management8221 von Grinold amp Kahn inspiriert. Dies ist die Bibel für alle, die daran interessiert sind, ein Portfolio gegen einen Benchmark zu führen. Ich ermutige jeden mit einem Interesse an dem Thema, das Buch von Anfang bis Ende zu lesen. It8217s sehr gut geschrieben und legt die Grundlagen des systematischen aktiven Portfoliomanagements (ich habe keine Zugehörigkeit zum Redakteur oder den Autoren). 1 8211 Faktoranalyse Hier versuchen wir, die Bestände im Anlageuniversum so genau wie möglich auf eine Forward-Return-Basis zu richten. Viele Menschen kamen mit vielen Werkzeugen und unzählige Varianten dieser Werkzeuge wurden entwickelt, um dies zu erreichen. In diesem Beitrag konzentriere ich mich auf zwei einfache und weit verbreitete Metriken: Information Coefficient (IC) und Quantiles Return (QR). 1.1 8211 Informationskoeffizient Der Horizont für die Forward Return muss vom Analytiker und it8217s eine Funktion der Strategie8217s Umsatz und der Alpha-Zerfall definiert werden (dies wurde Gegenstand umfangreicher Forschung). Offensichtlich müssen ICs in absoluten Zahlen so hoch wie möglich sein Für den scharfen Leser, im Buch von Grinold amp Kahn, wird eine Formel verknüpft Information Ratio (IR) und IC gegeben: mit der Breite ist die Anzahl der unabhängigen Wetten (Trades). Diese Formel ist als Grundgesetz des aktiven Managements bekannt. Das Problem ist, dass oft, definieren Breite genau ist nicht so einfach wie es klingt. 1.2 8211 Quantile Rückkehr Um eine genauere Schätzung der Faktor-Vorhersagekraft zu erhalten, ist es notwendig, einen Schritt weiter zu gehen und Gruppenbestände durch Quantil von Faktorwerten zu analysieren und dann die durchschnittliche Vorwärtsrendite (oder jede andere zentrale Tendenzmetrik) von jedem zu analysieren Quantile Die Nützlichkeit dieses Werkzeuges ist einfach. Ein Faktor kann einen guten IC haben, aber seine prädiktive Kraft könnte auf eine kleine Anzahl von Aktien begrenzt sein. Das ist nicht gut, da ein Portfoliomanager innerhalb des gesamten Universums Aktien auswählen muss, um seinen Tracking-Fehler-Constraint zu erfüllen. Gute Quantile Rückkehr sind durch eine monotone Beziehung zwischen den einzelnen Quantilen und Forward Returns gekennzeichnet. Alle Bestände im SampP500 Index (zum Zeitpunkt des Schreibens). Offensichtlich gibt es eine Überlebensschifffahrt: Die Liste der Bestände im Index hat sich zwischen dem Beginn und dem Ende der Stichprobenperiode deutlich verändert, aber es ist nur für die Veranschaulichung gut genug. Der Code unten lädt einzelne Aktienkurse im SampP500 zwischen Jan 2005 und heute (es dauert eine Weile) und verwandelt die Rohpreise in den letzten 12 Monaten und im letzten Monat. Der erstere ist unser Faktor, dieser wird als Vorwärtsrückmeldung verwendet. Unten ist der Code zur Berechnung von Information Coefficient und Quantiles Return. Beachten Sie, dass ich in diesem Beispiel Quintile verwendet habe, aber jede andere Gruppierungsmethode (Terciles, Deciles etc8230) verwendet werden kann. Es hängt wirklich von der Stichprobengröße ab, was Sie erfassen möchten und ob Sie einen breiten Überblick haben oder sich auf Vertriebsschwänze konzentrieren möchten. Für die Schätzung der Renditen innerhalb jedes Quintils wurde Median als zentraler Tendenzschätzer verwendet. Diese Maßnahme ist viel weniger empfindlich gegenüber Ausreißern als arithmetisches Mittel. Und schließlich der Code, um die Quantiles Return Chart zu produzieren. 3 8211 Wie man die oben genannten Informationen ausnutzt In der Grafik oben Q1 ist die letzte nach 12 Monaten Rückkehr und Q5 am höchsten. Es gibt eine fast monotone Zunahme der Quantile Rückkehr zwischen Q1 und Q5, die deutlich zeigt, dass Aktien, die in Q5 fallen, übertreffen diejenigen, die in Q1 um etwa 1 pro Monat fallen. Dies ist sehr wichtig und mächtig für solch einen einfachen Faktor (nicht wirklich eine Überraschung though8230). Daher gibt es größere Chancen, den Index zu übertreffen, indem sie die Bestände, die in Q5 fallen, überlagern und die im Vergleich zum Benchmark in Q1 fallenden Personen untergewichten. Ein IC von 0,0206 könnte nicht viel in sich selbst bedeuten, aber es8217s signifikant von 0 und zeigt eine gute prädiktive Macht der letzten 12 Monate Rückkehr insgesamt. Formale Signifikanztests können ausgewertet werden, aber das geht über den Rahmen dieses Artikels hinaus. 4 8211 Praktische Einschränkungen Das obige Rahmenwerk eignet sich hervorragend für die Bewertung von Investitionen Faktor8217s Qualität jedoch gibt es eine Reihe von praktischen Einschränkungen, die für die Umsetzung des realen Lebens angegangen werden müssen: Rebalancing. In der obigen Beschreibung hat it8217s davon ausgegangen, dass das Portfolio am Ende eines jeden Monats vollständig ausgeglichen wird. Dies bedeutet, dass alle Aktien, die in Q1 fallen, untergewichtet sind und alle Aktien, die in Q5 fallen, im Vergleich zur Benchmark übergewichtet sind. Dies ist aus praktischen Gründen nicht immer möglich: manche Bestände könnten aus dem Anlageuniversum ausgeschlossen werden, es bestehen Einschränkungen für die Industrie oder das Sektorgewicht, es bestehen Einschränkungen für den Umsatz usw8230 Transaktionskosten. Dies ist bei der obigen Analyse nicht berücksichtigt worden. Dies ist eine ernsthafte Bremse für die Umsetzung des realen Lebens. Umsatzüberlegungen werden in der Regel im realen Leben in Form einer Strafe auf Faktorqualität umgesetzt. Übertragungskoeffizient Dies ist eine Erweiterung des Grundgesetzes des aktiven Managements und es entspannt die Annahme von Grinold8217s Modell, dass Manager keine Einschränkungen, die sie von der Übersetzung ihrer Investitionen Einblicke direkt in Portfolio-Wetten auszuschließen. Und schließlich, ich bin begeistert von dem, was in weniger als 80 Zeilen Code mit R8230 erreicht werden kann. Wie üblich alle Kommentare willkommen 14. März 2014, 13:07 Die Frage sollte man sich immer fragen, wenn man technische Indikatoren verwendet, was wäre ein Ziel Kriterien, um Indikatorparameter auszuwählen (zB warum mit 14 Tagen RSI anstatt 15 oder 20 Tage). Genetische Algorithmen (GA) sind gut geeignet Werkzeuge, um diese Frage zu beantworten. In diesem Beitrag I8217ll zeigen Sie, wie Sie das Problem in R einrichten. Bevor ich die übliche Erinnerung vorangehe: Was ich in diesem Beitrag präsentiere, ist nur ein Spielzeugbeispiel und keine Einladung zu investieren. Es ist auch keine fertige Strategie, sondern eine Forschungsidee, die weiter erforscht, entwickelt und auf individuelle Bedürfnisse zugeschnitten werden muss. Was sind genetische Algorithmen Die beste Beschreibung von GA, auf die ich stieß, kommt von Cybernatic Trading ein Buch von Murray A. Ruggiero. 8220Genetische Algorithmen wurden von John Holland Mitte 1970 erfunden, um harte Optimierungsprobleme zu lösen. Diese Methode verwendet natürliche Auswahl, Überleben der fittest8221. Der allgemeine Prozess folgt den folgenden Schritten: Kodieren Sie das Problem in Chromosomen Verwenden Sie die Codierung, entwickeln Sie eine Fitness-Funktion für die Verwendung bei der Bewertung jedes Chromosomen8217s Wert bei der Lösung eines gegebenen Problems Initialisieren Sie eine Population von Chromosomen Auswerten jedes Chromosom in der Bevölkerung Erstellen Sie neue Chromosomen durch Paarung von zwei Chromosomen Dies geschieht durch Muting und Rekombination von zwei Eltern, um zwei Kinder zu bilden (Eltern werden zufällig ausgewählt, aber durch ihre Fitness vorgespannt) Bewerten Sie das neue Chromosom Löschen Sie ein Mitglied der Bevölkerung, das weniger fit ist als das neue Chromosom und legen Sie das neue Chromosom in die Bevölkerung ein . Wenn die Stop-Kriterien erreicht sind (maximale Anzahl von Generationen, Fitness-Kriterien ist gut genug8230) dann wieder das beste Chromosom alternativ gehen Sie zu Schritt 4 Aus einer Handelsperspektive GA sind sehr nützlich, weil sie gut im Umgang mit hoch nichtlinearen Problemen sind. Allerdings zeigen sie einige böse Features, die erwähnenswert sind: Über Montage: Dies ist das Hauptproblem und it8217s hinunter zum Analytiker, um das Problem in einer Weise einzurichten, die dieses Risiko minimiert. Rechenzeit. Wenn das Problem nicht richtig definiert ist, kann es extrem lang sein, eine anständige Lösung zu erreichen, und die Komplexität steigt exponentiell mit der Anzahl der Variablen an. Daher die Notwendigkeit, die Parameter sorgfältig auszuwählen. Es gibt mehrere R-Pakete, die sich mit GA beschäftigen, ich entschied mich für die häufigsten: rgenoud Tägliche Schlusskurse für die meisten flüssigen ETFs von Yahoo Finanzen gehen zurück bis Januar 2000. Die in der Probe Zeitraum geht von Januar 2000 bis Dezember 2010. Die Out of Die Sample-Periode beginnt im Januar 2011. Die Logik ist wie folgt: Die Fitness-Funktion wird über die im Sample-Zeitraum optimiert, um eine Reihe von optimalen Parametern für die ausgewählten technischen Indikatoren zu erhalten. Die Performance dieser Indikatoren wird dann in der Periodendauer ausgewertet. Aber vorher müssen die technischen Indikatoren ausgewählt werden. Der Aktienmarkt weist zwei Hauptmerkmale auf, die jedem mit einigen Handelserfahrungen bekannt sind. Langfristige Dynamik und kurzfristige Umkehrung. Diese Features können in der Zeit der technischen Indikatoren übersetzt werden durch: gleitende Durchschnitte kreuzen und RSI. Dies stellt einen Satz von 4 Parametern dar: Rückblickperioden für lange und kurzfristige Bewegungsdurchschnitte, Rückblickzeit für RSI und RSI-Schwelle. Die Sätze von Parametern sind die Chromosomen. Das andere Schlüsselelement ist die Fitnessfunktion. Vielleicht möchten wir so etwas wie: maximale Rendite oder Sharpe-Verhältnis oder minimale durchschnittliche Drawdown verwenden. Im folgenden entschied ich mich, das Sharpe-Verhältnis zu maximieren. Die R-Implementierung ist ein Satz von 3 Funktionen: fitnessFunction. Definiert die Fitness-Funktion (z. B. maximale Sharpe-Ratio), die innerhalb der GA-Engine-TradingStatistics verwendet werden soll. Zusammenfassung der Handelsstatistiken für die Ein - und Ausstiegsphasen für Vergleichszwecke genoud. Der GA-Motor aus dem rgenoud-Paket Die genoud-Funktion ist ziemlich komplex, aber ich werde nicht erklären, was jeder Parameter bedeutet, wie ich diesen Beitrag kurz halten will (und die Dokumentation ist wirklich gut). In der nachstehenden Tabelle präsentiere ich für jedes Instrument die optimalen Parameter (RSI Rückblickperiode, RSI Schwelle, Short Term Moving Average und Long Term Moving Average) zusammen mit dem In und Out der Musterhandelsstatistik. Bevor ich die obigen Ergebnisse kommentiere, möchte ich einige wichtige Punkte erklären. Um die oben definierte Logik anzupassen, habe ich die Parameter begrenzt, um sicherzustellen, dass die Rückblickperiode für den langfristig gleitenden Durchschnitt immer länger ist, dass der kürzere gleitende Durchschnitt. Ich habe auch den Optimierer eingeschränkt, nur die Lösungen mit mehr als 50 Trades in der Probeperiode zu wählen (z. B. statistische Signifikanz). Insgesamt sind die Stichproben von weitem nicht beeindruckend. Die Rückkehr ist niedrig, auch wenn die Anzahl der Trades klein ist, um das Ergebnis wirklich bedeutend zu machen. Allerdings gibt es einen erheblichen Verlust an Effizienz zwischen in und außerhalb der Probe Zeitraum für Japan (EWJ), die sehr wahrscheinlich bedeutet, über Montage. Dieser Beitrag soll dem Leser die Werkzeuge geben, um GA in einem quantitativen Handelsrahmen richtig zu nutzen. Noch einmal ist es ein Beispiel, das weiter verfeinert werden muss. Ein paar potenzielle Verbesserung zu erforschen wäre: Fitness-Funktion. Die Maximierung des Sharpe-Verhältnisses ist sehr einfach. Eine Funktion von 8220smarter8221 würde sicherlich das Stichprobenmusterprotokoll verbessern. Wir versuchen, ein sehr einfaches Muster zu erfassen. Eine genauere Musterforschung ist definitiv erforderlich. Optimierung Es gibt viele Möglichkeiten, die Art und Weise, wie die Optimierung durchgeführt wird, zu verbessern. Dies würde sowohl die Berechnungsgeschwindigkeit als auch die Rationalität der Ergebnisse verbessern. Der in diesem Beitrag verwendete Code ist auf einem Gist-Repository verfügbar. Wie üblich alle Kommentare willkommen 28. Februar 2014, 15:52 Uhr Es gibt eine enorme Literatur sowohl akademisch als auch empirisch über die Marktprognose. Die meiste Zeit vermischt es zwei Marktmerkmale: Größe und Richtung. In diesem Artikel möchte ich mich auf die Ermittlung der Marktrichtung konzentrieren. Das Ziel, das ich mich gesetzt habe, ist es, Marktbedingungen zu identifizieren, wenn die Chancen deutlich auf einen Auf - oder Abwärtsmarkt vorgespannt sind. Dieser Beitrag gibt ein Beispiel dafür, wie CART (Klassifikation und Regressionsbäume) in diesem Zusammenhang verwendet werden kann. Bevor ich die übliche Erinnerung vorangehe: Was ich in diesem Beitrag präsentiere, ist nur ein Spielzeugbeispiel und keine Einladung zu investieren. Es ist auch keine fertige Strategie, sondern eine Forschungsidee, die weiter erforscht, entwickelt und auf individuelle Bedürfnisse zugeschnitten werden muss. 1 8211 Was ist CART und warum benutzt es aus Statistiken, CART sind eine Reihe von Techniken für die Klassifizierung und Vorhersage. Die Technik zielt darauf ab, Regeln zu erstellen, die den Wert einer Outcome - (Ziel-) Variablen aus bekannten Werten von Prädiktor - (erläuternden) Variablen vorhersagen. Es gibt viele verschiedene Implementierungen, aber sie sind alle teilen ein allgemeines Merkmal und das ist, was ich interessiert in. Aus Wikipedia, Algorithmen für den Bau von Entscheidungsbäumen in der Regel arbeiten Top-down, indem Sie eine Variable in jedem Schritt, der am besten Splitt der Satz von Elementen. Verschiedene Algorithmen verwenden unterschiedliche Metriken für die Messung von 8220best8221. Diese messen im Allgemeinen die Homogenität der Zielvariablen innerhalb der Teilmengen. Diese Metriken werden auf jede Kandidatensatzmenge angewendet, und die resultierenden Werte werden kombiniert (z. B. gemittelt), um ein Maß für die Qualität des Splits zu liefern. CART-Methodik zeigt einige Eigenschaften, die für die Marktanalyse sehr gut geeignet sind: Nicht parametrisch. CART kann jede Art von statistischen Verteilungen behandeln Nicht linear. CART kann ein großes Spektrum der Abhängigkeit zwischen Variablen verarbeiten (z. B. nicht auf lineare Beziehungen beschränkt) Robust zu Ausreißern Es gibt verschiedene R-Pakete, die sich mit rekursiver Partitionierung beschäftigen, ich benutze hier für die Bäume Schätzung und rpart. plot für Bäume Zeichnung. 2 8211 Datenverstärker Experiment Design Tägliche OHLC Preise für die meisten flüssigen ETFs von Januar 2000 bis Dezember 2013 extrahiert aus Google Finanzen. Die Stichprobenperiode geht von Januar 2000 bis Dezember 2010, der Rest des Datensatzes ist der Stichzeitraum. Vor dem Ausführen einer Art von Analyse muss der Datensatz für die Aufgabe vorbereitet werden. Die Zielvariable ist die ETF-wöchentliche Vorwärtsrendite, die als zwei Zustände des Weltergebnisses (UP oder DOWN) definiert ist. Wenn wöchentlich vorwärts gt 0 dann der Markt im UP-Zustand, DOWN-Staat ansonsten Die erklärenden Variablen sind eine Reihe von technischen Indikatoren aus dem anfänglichen täglichen OHLC-Datensatz abgeleitet. Jeder Indikator stellt ein gut dokumentiertes Marktverhalten dar. Um das Rauschen in den Daten zu reduzieren und zu versuchen, robuste Beziehungen zu identifizieren, wird jede unabhängige Variable als ein binäres Ergebnis betrachtet. Volatilität (VAR1). Hohe Volatilität ist in der Regel mit einem Down-Markt und niedrige Volatilität mit einem up-Markt verbunden. Die Volatilität ist definiert als die 20 Tage rohe ATR (Average True Range) auf ihren gleitenden Durchschnitt (MA) verbreitet. Wenn roh ATR gt MA dann VAR1 1, sonst VAR1 -1. Kurzfristiger Impuls (VAR2). Der Aktienmarkt weist kurzfristiges Impulsverhalten auf, das hier durch eine 5 Tage einfache gleitende Durchschnitte (SMA) erfasst wird. Wenn Preis gt SMA dann VAR2 1 sonst VAR2 -1 Langzeitmoment (VAR3). Der Aktienmarkt zeigt ein langfristiges Impulsverhalten, das hier durch eine 50 Tage einfache gleitende Durchschnitte (LMA) erfasst wird. Wenn Preis gt LMA dann VAR3 1 sonst VAR3 -1 Kurzfristige Umkehr (VAR4). Dies wird von der CRTDR erfasst, die für Close Relative To Daily Range steht und wie folgt berechnet wird:. Wenn CRTDR gt 0,5, dann VAR4 1 sonst VAR4 -1 Autokorrelation Regime (VAR5). Der Aktienmarkt tendiert dazu, durch Perioden negativer und positiver Autokorrelationsregelungen zu gehen. Wenn die Autokorrelation über die letzten 5 Tage gt 0 zurückgekehrt wird, dann VAR5 1 sonst VAR5 -1 stelle ich ein Baumbeispiel mit einigen Erklärungen an. Im obigen Baum ist der Weg zum Knoten 4: VAR3 gt0 (Langzeitmomentum gt 0) und VAR4 Gt 0 (CRTDR gt 0). Das rote Rechteck zeigt an, dass es sich um ein DOWN-Blatt handelt (z. B. Terminalknoten) mit einer Wahrscheinlichkeit von 58 (1 8211 0,42). In Marktbegriffen bedeutet dies, dass, wenn Long Term Momentum ist und CRTDR ist gt 0,5 dann die Wahrscheinlichkeit einer positiven Rendite nächste Woche ist 42 auf der Grundlage der in Beispiel Probe Daten. 18 gibt den Anteil des Datensatzes an, der in diesen Endknoten fällt (z. B. Blatt). Es gibt viele Möglichkeiten, den oben genannten Ansatz zu verwenden, ich entschied mich, alle möglichen Bäume zu schätzen und zu kombinieren. Von den in Beispieldaten sammle ich alle Blätter von allen möglichen Bäumen und ich sammle sie in eine Matrix. Dies ist die 8220rules Matrix8221 geben die Wahrscheinlichkeit der nächsten Woche beeing UP oder DOWN. Ich verwende die Regeln in der obigen Matrix auf die aus Beispieldaten (Januar 2011 8211 Dez 2013) und ich vergleiche die Ergebnisse mit dem realen Ergebnis. Das Problem mit diesem Ansatz ist, dass ein einzelner Punkt (Woche) in mehrere Regeln fallen kann und sogar zu UP - und DOWN-Regeln gleichzeitig gehören kann. Deshalb wende ich ein Abstimmungsverfahren an. Für eine gegebene Woche summiere ich alle Regeln, die für diese Woche gelten, was eine 1 für eine UP-Regel und -1 für eine DOWN-Regel gibt. Wenn die Summe größer als 0 ist, wird die Woche als UP klassifiziert, wenn die Summe negativ ist it8217s eine DOWN-Woche und wenn die Summe gleich 0 ist, wird es in dieser Woche keine Position geben (return 0). Die obige Methodik wird auf a angewendet Satz von sehr flüssigen ETFs. Ich zeichne unterhalb der Stichproben-Equity-Kurven zusammen mit der Buy-and-Hold-Strategie im gleichen Zeitraum. Die anfänglichen Ergebnisse scheinen ermutigend zu sein, auch wenn die Qualität des Ergebnisses durch das Instrument sehr unterschiedlich ist. Allerdings gibt es einen riesigen Raum für Verbesserungen. Ich stelle noch einige Richtungen für weitere Analyse Path Optimalität. Der hier verwendete Algorithmus zur Definition der Bäume ist bei jedem Split optimal, aber er garantiert die Optimalität des Weges. Das Hinzufügen einer Metrik zur Messung der Optimalität des Pfades würde sicherlich die obigen Ergebnisse verbessern. Andere Variablen. Ich wählte die erklärenden Variablen ausschließlich auf Erfahrung. Es ist sehr wahrscheinlich, dass diese Wahl weder gut noch optimal ist. Backtest-Methodik Ich habe eine einfache In und Out der Beispielmethodik verwendet. In einem formelleren Backtest würde ich lieber ein rollenden oder erweiternden Fenster von Ein - und Ausgängen von Beispiel-Subperioden verwenden (zB Walk-Forward-Analyse) Wie üblich, alle Kommentare willkommenSuccessful Backtesting von algorithmischen Trading-Strategien, Teil 1 Dieser Artikel setzt die Serie auf quantitativen Handel fort , Die mit dem Beginner8217s Guide und Strategy Identification begonnen hat. Beide sind länger, mehr involvierte Artikel sind sehr beliebt gewesen, so dass I8217ll in dieser Vene fortsetzen und Details zum Thema Strategie-Backtesting geben. Algorithmische Backtesting erfordert Wissen über viele Bereiche, einschließlich Psychologie, Mathematik, Statistik, Software-Entwicklung und Marketexchange Mikrostruktur. Ich hoffe, alle diese Themen in einem Artikel zu decken, also werde ich sie in zwei oder drei kleinere Stücke teilen. Was werden wir in diesem Abschnitt diskutieren, beginnen wir mit der Definition von Backtesting und dann beschreibe ich die Grundlagen, wie es ausgeführt wird. Dann werde ich auf die Vorurteile aufmerksam machen, die wir im Anfänger8217s Guide zum Quantitative Trading berührt haben. Als nächstes werde ich einen Vergleich der verschiedenen verfügbaren Backtesting-Software-Optionen vorstellen. In nachfolgenden Artikeln werden wir uns die Details der Strategieimplementierungen anschauen, die oft kaum erwähnt oder ignoriert werden. Wir werden auch darüber nachdenken, wie man den Backtesting-Prozess realistischer macht, indem er die Eigenheiten eines Handelsaustausches einbezieht. Dann werden wir die Transaktionskosten besprechen und wie man sie korrekt in einer Backtest-Einstellung modellieren kann. Wir werden mit einer Diskussion über die Leistung unserer Backtests enden und schließlich ein Beispiel für eine gemeinsame Quant-Strategie, bekannt als ein Mittel-revertierenden Paar Handel. Let8217s beginnen mit der Diskussion darüber, was Backtesting ist und warum sollten wir es in unserem algorithmischen Handel durchführen. Was ist Backtesting Algorithmic Trading steht abgesehen von anderen Arten von Investment Klassen, weil wir zuverlässiger liefern können Erwartungen über die zukünftige Leistung aus der Vergangenheit Leistung, als Folge der reichlich Datenverfügbarkeit. Der Prozess, durch den dies durchgeführt wird, wird als Backtesting bezeichnet. In simple terms, backtesting is carried out by exposing your particular strategy algorithm to a stream of historical financial data, which leads to a set of trading signals . Each trade (which we will mean here to be a 8217round-trip8217 of two signals) will have an associated profit or loss. The accumulation of this profitloss over the duration of your strategy backtest will lead to the total profit and loss (also known as the 8216PampL8217 or 8216PnL8217). That is the essence of the idea, although of course the 8220devil is always in the details8221 What are key reasons for backtesting an algorithmic strategy Filtration 8211 If you recall from the article on Strategy Identification. our goal at the initial research stage was to set up a strategy pipeline and then filter out any strategy that did not meet certain criteria. Backtesting provides us with another filtration mechanism, as we can eliminate strategies that do not meet our performance needs. Modelling 8211 Backtesting allows us to (safely) test new models of certain market phenomena, such as transaction costs, order routing, latency, liquidity or other market microstructure issues. Optimisation 8211 Although strategy optimisation is fraught with biases, backtesting allows us to increase the performance of a strategy by modifying the quantity or values of the parameters associated with that strategy and recalculating its performance. Verification 8211 Our strategies are often sourced externally, via our strategy pipeline . Backtesting a strategy ensures that it has not been incorrectly implemented. Although we will rarely have access to the signals generated by external strategies, we will often have access to the performance metrics such as the Sharpe Ratio and Drawdown characteristics. Thus we can compare them with our own implementation. Backtesting provides a host of advantages for algorithmic trading. However, it is not always possible to straightforwardly backtest a strategy. In general, as the frequency of the strategy increases, it becomes harder to correctly model the microstructure effects of the market and exchanges. This leads to less reliable backtests and thus a trickier evaluation of a chosen strategy. This is a particular problem where the execution system is the key to the strategy performance, as with ultra-high frequency algorithms. Unfortunately, backtesting is fraught with biases of all types. We have touched upon some of these issues in previous articles, but we will now discuss them in depth. Biases Affecting Strategy Backtests There are many biases that can affect the performance of a backtested strategy. Unfortunately, these biases have a tendency to inflate the performance rather than detract from it. Thus you should always consider a backtest to be an idealised upper bound on the actual performance of the strategy. It is almost impossible to eliminate biases from algorithmic trading so it is our job to minimise them as best we can in order to make informed decisions about our algorithmic strategies. There are four major biases that I wish to discuss: Optimisation Bias, Look-Ahead Bias, Survivorship Bias and Psychological Tolerance Bias . Optimisation Bias This is probably the most insidious of all backtest biases. It involves adjusting or introducing additional trading parameters until the strategy performance on the backtest data set is very attractive. However, once live the performance of the strategy can be markedly different. Another name for this bias is 8220curve fitting8221 or 8220data-snooping bias8221. Optimisation bias is hard to eliminate as algorithmic strategies often involve many parameters. 8220Parameters8221 in this instance might be the entryexit criteria, look-back periods, averaging periods (i. e the moving average smoothing parameter) or volatility measurement frequency. Optimisation bias can be minimised by keeping the number of parameters to a minimum and increasing the quantity of data points in the training set. In fact, one must also be careful of the latter as older training points can be subject to a prior regime (such as a regulatory environment) and thus may not be relevant to your current strategy. One method to help mitigate this bias is to perform a sensitivity analysis . This means varying the parameters incrementally and plotting a 8220surface8221 of performance. Sound, fundamental reasoning for parameter choices should, with all other factors considered, lead to a smoother parameter surface. If you have a very jumpy performance surface, it often means that a parameter is not reflecting a phenomena and is an artefact of the test data. There is a vast literature on multi-dimensional optimisation algorithms and it is a highly active area of research. I won8217t dwell on it here, but keep it in the back of your mind when you find a strategy with a fantastic backtest Look-Ahead Bias Look-ahead bias is introduced into a backtesting system when future data is accidentally included at a point in the simulation where that data would not have actually been available. If we are running the backtest chronologically and we reach time point N . then look-ahead bias occurs if data is included for any point N k . where k gt 0 . Look-ahead bias errors can be incredibly subtle. Here are three examples of how look-ahead bias can be introduced: Technical Bugs 8211 Arraysvectors in code often have iterators or index variables. Incorrect offsets of these indices can lead to a look-ahead bias by incorporating data at N k for non-zero k . Parameter Calculation 8211 Another common example of look-ahead bias occurs when calculating optimal strategy parameters, such as with linear regressions between two time series. If the whole data set (including future data) is used to calculate the regression coefficients, and thus retroactively applied to a trading strategy for optimisation purposes, then future data is being incorporated and a look-ahead bias exists. MaximaMinima 8211 Certain trading strategies make use of extreme values in any time period, such as incorporating the high or low prices in OHLC data. However, since these maximalminimal values can only be calculated at the end of a time period, a look-ahead bias is introduced if these values are used - during - the current period. It is always necessary to lag highlow values by at least one period in any trading strategy making use of them. Survivorship Bias Survivorship bias is a particularly dangerous phenomenon and can lead to significantly inflated performance for certain strategy types. It occurs when strategies are tested on datasets that do not include the full universe of prior assets that may have been chosen at a particular point in time, but only consider those that have 8220survived8221 to the current time. As an example, consider testing a strategy on a random selection of equities before and after the 2001 market crash. Some technology stocks went bankrupt, while others managed to stay afloat and even prospered. If we had restricted this strategy only to stocks which made it through the market drawdown period, we would be introducing a survivorship bias because they have already demonstrated their success to us. In fact, this is just another specific case of look-ahead bias, as future information is being incorporated into past analysis. There are two main ways to mitigate survivorship bias in your strategy backtests: Survivorship Bias Free Datasets 8211 In the case of equity data it is possible to purchase datasets that include delisted entities, although they are not cheap and only tend to be utilised by institutional firms. In particular, Yahoo Finance data is NOT survivorship bias free, and this is commonly used by many retail algo traders. One can also trade on asset classes that are not prone to survivorship bias, such as certain commodities (and their future derivatives). Use More Recent Data 8211 In the case of equities, utilising a more recent data set mitigates the possibility that the stock selection chosen is weighted to 8220survivors8221, simply as there is less likelihood of overall stock delisting in shorter time periods. One can also start building a personal survivorship-bias free dataset by collecting data from current point onward. After 3-4 years, you will have a solid survivorship-bias free set of equities data with which to backtest further strategies. We will now consider certain psychological phenomena that can influence your trading performance. We will now consider certain psychological phenomena that can influence your trading performance. Psychological Tolerance Bias This particular phenomena is not often discussed in the context of quantitative trading. However, it is discussed extensively in regard to more discretionary trading methods. It has various names, but I8217ve decided to call it 8220psychological tolerance bias8221 because it captures the essence of the problem. When creating backtests over a period of 5 years or more, it is easy to look at an upwardly trending equity curve, calculate the compounded annual return, Sharpe ratio and even drawdown characteristics and be satisfied with the results. As an example, the strategy might possess a maximum relative drawdown of 25 and a maximum drawdown duration of 4 months. This would not be atypical for a momentum strategy. It is straightforward to convince oneself that it is easy to tolerate such periods of losses because the overall picture is rosy. However, in practice, it is far harder If historical drawdowns of 25 or more occur in the backtests, then in all likelihood you will see periods of similar drawdown in live trading. These periods of drawdown are psychologically difficult to endure. I have observed first hand what an extended drawdown can be like, in an institutional setting, and it is not pleasant 8211 even if the backtests suggest such periods will occur. The reason I have termed it a 8220bias8221 is that often a strategy which would otherwise be successful is stopped from trading during times of extended drawdown and thus will lead to significant underperformance compared to a backtest. Thus, even though the strategy is algorithmic in nature, psychological factors can still have a heavy influence on profitability. The takeaway is to ensure that if you see drawdowns of a certain percentage and duration in the backtests, then you should expect them to occur in live trading environments, and will need to persevere in order to reach profitability once more. Software Packages for Backtesting The software landscape for strategy backtesting is vast. Solutions range from fully-integrated institutional grade sophisticated software through to programming languages such as C, Python and R where nearly everything must be written from scratch (or suitable 8216plugins8217 obtained). As quant traders we are interested in the balance of being able to 8220own8221 our trading technology stack versus the speed and reliability of our development methodology. Here are the key considerations for software choice: Programming Skill 8211 The choice of environment will in a large part come down to your ability to program software. I would argue that being in control of the total stack will have a greater effect on your long term PampL than outsourcing as much as possible to vendor software. This is due to the downside risk of having external bugs or idiosyncrasies that you are unable to fix in vendor software, which would otherwise be easily remedied if you had more control over your 8220tech stack8221. You also want an environment that strikes the right balance between productivity, library availability and speed of execution. I make my own personal recommendation below. Execution CapabilityBroker Interaction 8211 Certain backtesting software, such as Tradestation, ties in directly with a brokerage. I am not a fan of this approach as reducing transaction costs are often a big component of getting a higher Sharpe ratio. If you8217re tied into a particular broker (and Tradestation 8220forces8221 you to do this), then you will have a harder time transitioning to new software (or a new broker) if the need arises. Interactive Brokers provide an API which is robust, albeit with a slightly obtuse interface. Customisation 8211 An environment like MATLAB or Python gives you a great deal of flexibility when creating algo strategies as they provide fantastic libraries for nearly any mathematical operation imaginable, but also allow extensive customisation where necessary. Strategy Complexity 8211 Certain software just isn8217t cut out for heavy number crunching or mathematical complexity. Excel is one such piece of software. While it is good for simpler strategies, it cannot really cope with numerous assets or more complicated algorithms, at speed. Bias Minimisation 8211 Does a particular piece of software or data lend itself more to trading biases You need to make sure that if you want to create all the functionality yourself, that you don8217t introduce bugs which can lead to biases. Speed of Development 8211 One shouldn8217t have to spend months and months implementing a backtest engine. Prototyping should only take a few weeks. Make sure that your software is not hindering your progress to any great extent, just to grab a few extra percentage points of execution speed. C is the 8220elephant in the room8221 here Speed of Execution 8211 If your strategy is completely dependent upon execution timeliness (as in HFTUHFT) then a language such as C or C will be necessary. However, you will be verging on Linux kernel optimisation and FPGA usage for these domains, which is outside the scope of this article Cost 8211 Many of the software environments that you can program algorithmic trading strategies with are completely free and open source. In fact, many hedge funds make use of open source software for their entire algo trading stacks. In addition, Excel and MATLAB are both relatively cheap and there are even free alternatives to each. Now that we have listed the criteria with which we need to choose our software infrastructure, I want to run through some of the more popular packages and how they compare: Note: I am only going to include software that is available to most retail practitioners and software developers, as this is the readership of the site. While other software is available such as the more institutional grade tools, I feel these are too expensive to be effectively used in a retail setting and I personally have no experience with them. Description . WYSIWYG (what-you-see-is-what-you-get) spreadsheet software. Extremely widespread in the financial industry. Data and algorithm are tightly coupled. Execution . Yes, Excel can be tied into most brokerages. Customisation . VBA macros allow more advanced functionality at the expense of hiding implementation. Strategy Complexity . More advanced statistical tools are harder to implement as are strategies with many hundreds of assets. Bias Minimisation . Look-ahead bias is easy to detect via cell-highlighting functionality (assuming no VBA). Development Speed . Quick to implement basic strategies. Execution Speed . Slow execution speed 8211 suitable only for lower-frequency strategies. Cost . Cheap or free (depending upon license). Alternatives . OpenOffice Description . Programming environment originally designed for computational mathematics, physics and engineering. Very well suited to vectorised operations and those involving numerical linear algebra. Provides a wide array of plugins for quant trading. In widespread use in quantitative hedge funds. Execution . No native execution capability, MATLAB requires a separate execution system. Customisation . Huge array of community plugins for nearly all areas of computational mathematics. Strategy Complexity . Many advanced statistical methods already available and well-tested. Bias Minimisation . Harder to detect look-ahead bias, requires extensive testing. Development Speed . Short scripts can create sophisticated backtests easily. Execution Speed . Assuming a vectorisedparallelised algorithm, MATLAB is highly optimised. Poor for traditional iterated loops. Cost . Description . High-level language designed for speed of development. Wide array of libraries for nearly any programmatic task imaginable. Gaining wider acceptance in hedge fund and investment bank community. Not quite as fast as CC for execution speed. Execution . Python plugins exist for larger brokers, such as Interactive Brokers. Hence backtest and execution system can all be part of the same 8220tech stack8221. Customisation . Python has a very healthy development community and is a mature language. NumPySciPy provide fast scientific computing and statistical analysis tools relevant for quant trading. Strategy Complexity: Many plugins exist for the main algorithms, but not quite as big a quant community as exists for MATLAB. Bias Minimisation . Same bias minimisation problems exist as for any high level language. Need to be extremely careful about testing. Development Speed . Pythons main advantage is development speed, with robust in built in testing capabilities. Execution Speed . Not quite as fast as C, but scientific computing components are optimised and Python can talk to native C code with certain plugins. Cost . FreeOpen Source Alternatives . Ruby. Erlang. Haskell Description . Environment designed for advanced statistical methods and time series analysis. Wide array of specific statistical, econometric and native graphing toolsets. Large developer community. Execution . R possesses plugins to some brokers, in particular Interactive Brokers. Thus an end-to-end system can written entirely in R. Customisation . R can be customised with any package, but its strengths lie in statisticaleconometric domains. Strategy Complexity . Mostly useful if performing econometric, statistical or machine-learning strategies due to available plugins. Bias Minimisation . Similar level of bias possibility for any high-level language such as Python or C. Thus testing must be carried out. Development Speed . R is rapid for writing strategies based on statistical methods. Execution Speed . R is slower than C, but remains relatively optimised for vectorised operations (as with MATLAB). Cost . FreeOpen Source Alternatives . SPSS. Stata Description . Mature, high-level language designed for speed of execution. Wide array of quantitative finance and numerical libraries. Harder to debug and often takes longer to implement than Python or MATLAB. Extremely prevalent in both the buy - and sell-side. Execution . Most brokerage APIs are written in C and Java. Thus many plugins exist. Customisation . CC allows direct access to underlying memory, hence ultra-high frequency strategies can be implemented. Strategy Complexity . C STL provides wide array of optimised algorithms. Nearly any specialised mathematical algorithm possesses a free, open-source CC implementation on the web. Bias Minimisation . Look-ahead bias can be tricky to eliminate, but no harder than other high-level language. Good debugging tools, but one must be careful when dealing with underlying memory. Development Speed . C is quite verbose compared to Python or MATLAB for the same algorithmm. More lines-of-code (LOC) often leads to greater likelihood of bugs. Execution Speed . CC has extremely fast execution speed and can be well optimised for specific computational architectures. This is the main reason to utilise it. Cost . Various compilers: LinuxGCC is free, MS Visual Studio has differing licenses. Alternatives . C. Java. Scala Different strategies will require different software packages. HFT and UHFT strategies will be written in CC (these days they are often carried out on GPUs and FPGAs ), whereas low-frequency directional equity strategies are easy to implement in TradeStation, due to the 8220all in one8221 nature of the softwarebrokerage. My personal preference is for Python as it provides the right degree of customisation, speed of development, testing capability and execution speed for my needs and strategies. If I need anything faster, I can 8220drop in8221 to C directly from my Python programs. One method favoured by many quant traders is to prototype their strategies in Python and then convert the slower execution sections to C in an iterative manner. Eventually the entire algo is written in C and can be 8220left alone to trade8221 In the next few articles on backtesting we will take a look at some particular issues surrounding the implementation of an algorithmic trading backtesting system, as well as how to incorporate the effects of trading exchanges. We will discuss strategy performance measurement and finally conclude with an example strategy. 8212 By Michael Halls-Moore from QuantStart About the Author Mike Halls-Moore Michael graduated with a MMath in Mathematics from the University of Warwick, gained a PhD from Imperial College London in Fluid Dynamics, and was working in a hedge fund as a quantitative trading developer for the last few years in Mayfair, London. He now spends time on research, development, backtesting and implementation of intraday algorithmic trading strategies. Time really flies it is hard to believe that it has been over a month since my last post. Work and life in general have consumed much of my time lately and left little time for research and blog posts. Anyway, on to the post This post will be the first in a series of to cover a momentum strategy using R. One of my favorite strategies is a momentum or relative strength strategy. Here are just a few of the reasons why I like momentum: Simple to implement Long only or longshort portfolios Many ways to define the strength or momentum measure It just works Also, a momentum strategy lends itself well to potential for diversification. The universe of instruments can be infinite, but the instruments traded are finite. Think about it this way Investor A looks at 10 instruments and invests 1000 in the top 5 instruments ranked by momentum. Investor B looks at 100 instruments and invests 1000 in the top 5 instruments ranked by momentum. Investor A is limiting his potential for diversification by only having a universe of 10 instruments. Investor B has a much larger universe of instruments and can in theory be more diversified. Theoretically speaking, you can trade an infinite number of instruments with a finite amount of trading capital using a momentum or relative strength strategy. Check out these links for further reading In this first post of the series on momentum, I will go over some of the basic setup and functions we will be using. The first step is to get data from yahoo. Note that the for loop converts the data to monthly and subsets the data so that the only column we keep is the adjusted close column. We now have four objects (XLY, XLP, XLE, XLF) that have the Adjusted Close price. The next step is to merge these four objects into a single object holding the Adjusted Close price. We can do this in a simple one-liner in R For the factor that will be ranked, I will use the 3 period rate of change (ROC). Here8217s another way to create the symbolsclose object. create new environment to store data symEnv lt - new. env() getSymbols assigns to new environment getSymbols(symbols, from0392000-01-01039, envsymEnv) function aggregates and returns Adjusted column f lt - function(x) sym lt - sub(quot..quot, quotquot, names(x)1) Ad(to. monthly(x, indexAt039lastof039,drop. timeTRUE, namesym)) use eapply to call f() on each symbol symbolsclose lt - do. call(merge, eapply(symEnv, f)) I have problems replicating this analysis. First of all, the to. monthly(x, indexAt8221lastof8221) does not get me the last day of the month, as I would expect, for example: gt x to. monthly(x, indexAt8221lastof8221) x. Open x. High x. Low x. Close x. Volume 2012-12-29 69.71 71.44 69.57 71.42 16384800 2013-01-29 72.95 78.59 72.00 77.35 195100300 2013-02-26 77.76 79.51 77.16 77.70 128912200 x. Adjusted 2012-12-29 71.42 2013-01-29 77.35 2013-02-26 77.70 If I run the first part of code and type head(XLE) I get the following: gt head(XLE) XLE. Adjusted 2000-01-29 22.67 2000-02-27 21.71 2000-03-29 24.33 2000-04-28 23.96 2000-05-29 26.78 2000-06-28 25.30 as you can see this is totally different from what is shown in the article above, the prices are different and the index is different (not the last day of the month). Can someone explain why this is like that Why is data different Why indexAt8221lastof8221 produces the above results What is the difference between 8220lastof8221 and 8220endof8221 Thank you Oh, 8220x8221 in the above is XLE.

No comments:

Post a Comment