Dies ist ein Python-Wrapper für TA-LIB basierend auf Cython anstelle von SWIG. Von der Homepage: TA-Lib ist weit verbreitet von Handelssoftwareentwicklern, die eine technische Analyse der Finanzmarktdaten durchführen müssen. Enthält 150 Indikatoren wie ADX, MACD, RSI, Stochastik, Bollinger Bands etc. Candlestick Mustererkennung Open-Source-API für CC, Java, Perl, Python und 100 Managed Die ursprünglichen Python-Bindungen verwenden SWIG, die leider schwer zu installieren und zu arent sind So effizient wie sie sein könnten. Deshalb nutzt dieses Projekt Cython und Numpy, um effizient und sauber an TA-Lib zu binden - die Ergebnisse 2-4 mal schneller als die SWIG-Schnittstelle zu produzieren. Installieren Sie TA-Lib oder lesen Sie die Docs Ähnlich wie bei TA-Lib bietet die Funktionsschnittstelle einen leichten Wrapper der exponierten TA-Lib-Indikatoren. Jede Funktion gibt ein Ausgabe-Array zurück und hat Standardwerte für ihre Parameter, sofern nicht als Keyword-Argumente angegeben. Typischerweise haben diese Funktionen eine erste Rückblickperiode (eine erforderliche Anzahl von Beobachtungen, bevor ein Ausgang erzeugt wird), die auf NaN gesetzt ist. Alle folgenden Beispiele verwenden die Funktion API: Berechnen Sie einen einfachen gleitenden Durchschnitt der engen Preise: Berechnen von Bollinger-Bands mit dreifach exponentiellem gleitenden Durchschnitt: Berechnung der Dynamik der engen Preise mit einem Zeitraum von 5: Abstract API Quick Start Wenn youre Bereits vertraut mit der Funktion API, sollten Sie sich wie zu Hause mit der abstrakten API fühlen. Jede Funktion nimmt dieselbe Eingabe ein, die als Wörterbuch von Numpy Arrays übergeben wird: Funktionen können entweder direkt importiert oder mit dem Namen instanziiert werden: Von dort aus ist das Aufrufen von Funktionen grundsätzlich das gleiche wie die Funktion API: Erfahren Sie hier über die erweiterte Nutzung von TA-Lib . Unterstützte Indikatoren Wir können alle TA-Funktionen anzeigen, die von TA-Lib unterstützt werden, entweder als Liste oder als Dikt nach Gruppen sortiert (zB Overlap Studies, Momentum Indicators, etc.): Funktionsgruppen Eine einfache Zeitreihenanalyse des SampP 500 Index In diesem Blog-Post gut untersuchen einige gemeinsame Techniken in Zeitreihen-Analyse verwendet, indem sie sie auf einen Datensatz mit täglichen Schlusswerte für die SampP 500 Börsenindex von 1950 bis zum heutigen Tag. Ziel ist es, einige der grundlegenden Ideen und Konzepte aus der Zeitreihenanalyse zu erforschen und ihre Effekte zu beobachten, wenn sie auf einen realen Weltdatensatz angewendet werden. Obwohl es nicht möglich ist, die Änderungen des Index mit diesen Techniken tatsächlich vorherzusagen, könnten die hier vorgestellten Ideen theoretisch als Teil einer größeren Strategie mit vielen zusätzlichen Variablen verwendet werden, um eine Regression oder einen maschinellen Lernaufwand durchzuführen. Zeitreihenanalyse ist ein Zweig der Statistik, der die Begründung über geordnete Sequenzen von verwandten Werten beinhaltet, um aussagekräftige Statistiken und andere Merkmale der Daten zu extrahieren. Sein verwendet in einer breiten Strecke der Disziplinen einschließlich Ökonometrie, Signalverarbeitung, Wettervorhersage und im Grunde jedes mögliches andere Feld, das Zeitreihendaten beinhaltet. Diese Techniken werden oft verwendet, um Modelle zu entwickeln, die verwendet werden können, um zu versuchen, zukünftige Werte einer Reihe zu prognostizieren, entweder auf eigene oder in Übereinstimmung mit anderen Variablen. Um loszulegen, können Sie zuerst die Daten herunterladen. Ich habe die historische Datensatz von Yahoo Finance. Die einen Link enthält, um das Ganze als. csv-Datei herunterzuladen. Jetzt können wir den Datensatz laden und einen Blick nehmen. Ich benutze mehrere populäre Python-Bibliotheken für die Analyse, so dass alle Code in Python ist. Die Daten sind in umgekehrter chronologischer Reihenfolge, also habe ich sie nach Datum sortiert und dann den Index des Datenrahmens auf die Datumssäule gesetzt. Wenn man sich die Daten anschaut, gibt es mehrere Felder, aber auch nur auf den Schlusskurs. Lets plot die Daten zuerst und sehen, wie es aussieht. Die erste offensichtliche Sache zu beachten, abgesehen von den beiden riesigen Dips am Schwanz Ende entsprechend den Marktstürzen in den Jahren 2002 und 2008 ist, dass die Daten ist eindeutig nicht-stationär. Dies macht Sinn für Marktdaten, da es dazu neigt, auf lange Sicht mehr zu gehen, als es geht. Dies ist ein Problem für die Zeitreihenanalyse, obwohl es sich um nichtstationäre Daten handelt. Das erste, was wir versuchen können, ist ein erster Unterschied der Serie. Mit anderen Worten subtrahieren Sie den vorherigen Wert t-1 vom aktuellen Wert t, um die Differenz d (t) zu erhalten. Die Daten erscheinen nicht mehr im Laufe der Zeit und sind stattdessen um 0 herum zentriert. Theres ein anderes Problem aber. Schauen Sie sich die Varianz an. Seine sehr kleine früh und stetig steigt im Laufe der Zeit. Dies ist ein Zeichen dafür, dass die Daten nicht nur nicht stationär, sondern auch exponentiell zunehmen. Die Größe der täglichen Variationen am heutigen Tag völlig zwerg die Größe der Veränderungen im Jahr 1950. Um dies zu bewältigen, wenden Sie sich gut an eine Log-Transformation an die ursprüngliche Serie. Das gibt uns also den ursprünglichen Schlusskurs mit einer Log-Transformation, die angewendet wird, um die Daten von einer exponentiellen Kurve zu einer linearen Kurve zu glätten. Eine Möglichkeit, den Effekt, den die Log-Transformation hatte, visuell zu sehen, besteht darin, die Varianz über die Zeit zu analysieren. Wir können eine rollende Varianz-Statistik verwenden und sowohl die Original-Serie als auch die Log-Serie vergleichen. Beachten Sie, dass in der oberen Grafik, können wir nicht sehen, jede der Variationen bis in die späten 80er Jahre. In der unteren Grafik aber ist eine andere Geschichte, Änderungen im Wert sind deutlich sichtbar über den gesamten Datensatz. Aus dieser Ansicht ist klar, dass unsere Transformation die Varianz relativ konstant gemacht hat. Jetzt können wir die früheren Variationen im Datensatz schon etwas besser sehen als vorher. Wir müssen noch den ersten Unterschied machen, aber so berechnen wir das aus der angemeldeten Serie. Viel besser Wir haben jetzt ein stationäres Zeitreihenmodell der täglichen Änderungen am SampP 500 Index. Nun können wir einige Verzögerungsvariablen y (t-1), y (t-2) etc. erstellen und ihre Beziehung zu y (t) untersuchen. Nun schauen Sie sich 1 und 2-Tage-Lags zusammen mit wöchentlichen und monatlichen Lags, um saisonale Effekte zu suchen. Ein interessanter visueller Weg, um die Beziehung zwischen den verzögerten Variablen zu bewerten, besteht darin, eine Streuung der ursprünglichen Variablen gegenüber der verzögerten Variablen zu machen und zu sehen, wo die Verteilung liegt. Wir können dies mit einer gemeinsamen Handlung mit dem Seaborn-Paket machen. Beachten Sie, wie dicht gepackt die Masse um 0 ist. Es scheint auch ziemlich gleichmäßig verteilt zu sein - die Randverteilungen auf beiden Achsen sind ungefähr normal. Dies scheint zu zeigen, dass das Erkennen des Indexwertes eines Tages uns nicht viel darüber gibt, was es am nächsten Tag tun wird. Es ist wahrscheinlich nicht überraschend, dass theres sehr wenig Korrelation zwischen der Wertänderung von einem Tag zum nächsten. Obwohl ich sie nicht hier weggelegt habe, zeigen die anderen verzögerten Variablen, die wir oben erstellt haben, ähnliche Ergebnisse. Es könnte eine Beziehung zu anderen Lag-Schritten geben, die wir havent versucht haben, aber es ist unpraktisch, jeden möglichen Lag-Wert manuell zu testen. Glücklicherweise gibt es eine Klasse von Funktionen, die dies systematisch für uns tun können. Die Autokorrelationsfunktion berechnet die Korrelation zwischen einer Variablen und sich bei jedem Verzögerungsschritt bis zu einer gewissen Grenze (in diesem Fall 40). Die partielle Autokorrelationsfunktion berechnet die Korrelation bei jedem Verzögerungsschritt, der NICHT bereits durch vorhergehende Verzögerungsschritte niedrigerer Ordnung erklärt wird. Wir können die Ergebnisse abgeben, um zu sehen, ob es irgendwelche signifikanten Korrelationen gibt. Die Autokorrelations - und Teil-Autokorrelationsergebnisse sind sehr nahe beieinander (ich habe nur die oben beschriebenen Autokorrelationsergebnisse aufgetragen). Was dies zeigt, ist, dass es keine signifikante (0,2) Korrelation zwischen dem Wert zum Zeitpunkt t und zu jeder Zeit vor t bis zu 40 Schritte hinter sich gibt. In der Reihenfolge Worte, die Serie ist ein zufälliger Spaziergang. Eine weitere interessante Technik, die wir versuchen können, ist eine Zersetzung. Dies ist eine Technik, die versucht, eine Zeitreihe in Trend-, Saison - und Restfaktoren zu brechen. Statsmodels kommt mit einer Zerlegungsfunktion aus der Box. Da wir keinen wirklichen Zyklus in den Daten sehen, ist die Visualisierung in diesem Fall nicht so wirksam. Für Daten, wo dies ein starkes saisonales Muster ist, obwohl es sehr nützlich sein kann. Die nachfolgende Instanz ist zum Beispiel ein Beispiel aus der statsmodels Dokumentation, die CO2-Emissionsdaten über die Zeit zeigt. Die Zersetzung ist in diesem Fall viel nützlicher. Es gibt drei deutlich unterschiedliche Komponenten für die Zeitreihe - eine Trendlinie, eine saisonale Anpassung und Restwerte. Jeder von ihnen müsste entsprechend berücksichtigt und modelliert werden. Zurück zu unseren Bestandsdaten, wurde bereits beobachtet, dass es sich um einen zufälligen Spaziergang handelt und dass unsere verzögerten Variablen nicht scheinen, viel Einfluss zu haben, aber wir können immer noch versuchen, einige ARIMA Modelle anzupassen und zu sehen, was wir bekommen. Lasst uns mit einem einfachen gleitenden Durchschnittsmodell beginnen. Also auf den ersten Blick scheint es, dass dieses Modell ziemlich gut geht. Aber obwohl es so aussieht wie die Prognosen sind wirklich nah (die Zeilen sind fast ununterscheidbar, nachdem alle), denken Sie daran, dass wir die un-differenced Serie verwendet Der Index schwankt nur einen kleinen Prozentsatz von Tag zu Tag relativ zum absoluten absoluten Wert. Was wir wirklich wollen, ist, den ersten Unterschied vorherzusagen, oder die täglichen Bewegungen. Wir können das Modell entweder mit der differenzierten Serie neu ausführen oder dem ARIMA-Modell einen I-Term hinzufügen (was zu einem (1, 1, 0) Modell führt), das dasselbe ausführen sollte. Lets versuchen, die differenzierte Serie zu verwenden. Es ist ein wenig schwer zu sagen, aber es scheint, wie unsere prognostizierten Veränderungen sind in der Regel viel kleiner als die tatsächlichen Änderungen. Es lohnt sich, einen Blick auf eine Teilmenge der Daten zu sehen, um zu sehen, was wirklich los ist. So jetzt ist es ziemlich offensichtlich, dass die Prognose weg ist. Wurden kleine kleine Variationen vorausgesagt, was tatsächlich tagtäglich geschieht. Auch dies ist mehr von weniger erwartet mit einem einfachen gleitenden durchschnittlichen Modell einer zufälligen Spaziergang Zeitreihe. Es gibt nicht genug Informationen aus den vergangenen Tagen, um genau zu werben, was am nächsten Tag passieren wird. Ein gleitender Durchschnittsmodell scheint nicht so gut zu sein. Was ist mit einem exponentiellen Glättungsmodell Exponentielle Glättung verbreitet die Auswirkungen der bisherigen Werte mit einer exponentiellen Gewichtung, so dass die Dinge, die in letzter Zeit passiert sind, mehr wirksam sind als die Dinge, die vor langer Zeit passiert sind. Vielleicht ist diese intelligentere Form der Mittelung genauer Sie können vermutlich die Antwort erraten. Wenn die Vorhersage der Börse war dies einfach, würde jeder es tun Wie ich an der Spitze erwähnt, war der Punkt dieser Analyse nicht zu behaupten, dass Sie den Markt mit diesen Techniken vorhersagen können, sondern vielmehr die Arten der Analyse zu demonstrieren, die man könnte Verwendung beim Abbrechen von Zeitreihendaten. Zeitreihenanalyse ist ein sehr reichhaltiges Feld mit viel mehr technischer Analyse als das, was ich hier hineingegangen bin (viel davon im noch lernen). Wenn Sie Interesse haben, einen tieferen Tauchgang zu machen, empfehle ich diese Notizen von einem Professor bei Duke. Vieles, was ich über das Feld gelernt habe, habe ich von dem Lesen von Online-Ressourcen wie dieses abgeholt. Schließlich wird der ursprüngliche Quellcode von diesem Beitrag hier auf GitHub gehostet. Zusammen mit einer Vielzahl von anderen Notebooks. Fühlen Sie sich frei, es zu überprüfen Folgen Sie mir auf Twitter, um neue Post-Updates zu erhalten. Implementing Batch Normalisierung in Tensorflow Di 29 März 2016 Batch Normalisierung, wie in der März 2015 Papier (die BN2015 Papier) von Sergey Ioffe und Christian Szegedy beschrieben, ist eine einfache Und effektiver Weg, um die Leistung eines neuronalen Netzwerks zu verbessern. Im BN2015-Papier zeigen Ioffe und Szegedy, dass die Batch-Normalisierung den Einsatz höherer Lernraten ermöglicht, als Regulierer fungiert und das Training um 14 Mal beschleunigen kann. In diesem Beitrag zeige ich, wie man die Batch-Normalisierung in Tensorflow implementiert. Bearbeiten 071216. Ive aktualisiert diesen Beitrag, um die Berechnung des Populationsmittels und der Varianz zur Testzeit näher zu decken. Bearbeiten 020816. Falls Sie nach einer rezidivierenden Batch-Normalisierung suchen (d. H. Von Cooijmans et al. (2016)), habe ich hier eine funktionierende Tensorflow-Implementierung hochgeladen. Der einzige knifflige Teil der Implementierung, im Vergleich zu der Vorwärts-Batch-Normalisierung, die diesen Beitrag vorstellt, speichert separate Populationsvariablen für verschiedene Zeitstempel. Das Problem Die Batch-Normalisierung soll das folgende Problem lösen: Änderungen der Modellparameter während des Lernens ändern die Verteilungen der Ausgänge jeder versteckten Schicht. Dies bedeutet, dass sich spätere Schichten an diese (oft verrauschten) Veränderungen während des Trainings anpassen müssen. Batch-Normalisierung in Kürze Um dieses Problem zu lösen, projiziert das BN2015-Papier die Batch-Normalisierung des Inputs der Aktivierungsfunktion jedes Nuron (zB jede Sigmoid - oder ReLU-Funktion) während des Trainings, so dass die Eingabe der Aktivierungsfunktion über jede Trainingsreihe erfolgt Ein Mittelwert von 0 und eine Varianz von 1. Beispielsweise würde die Anwendung der Batch-Normalisierung auf die Aktivierung (Sigma (Wx b)) resultieren (Sigma (BN (Wx b))) wobei (BN) die Batch-Normalisierungstransformation ist. Die Batch-Normalisierungstransformation Um einen Wert über einen Batch zu normalisieren (d. h. Batch-Normalisierung des Wertes), subtrahieren wir den Batch-Mittelwert (muB). Und teilen das Ergebnis durch die Batch-Standardabweichung, (sqrt). Beachten Sie, dass eine kleine Konstante (epsilon) zur Varianz hinzugefügt wird, um eine Teilung durch Null zu vermeiden. Somit ist die anfängliche Batch-Normalisierung der Transformation eines gegebenen Wertes (xi). Ist: BN (xi) frac Da die oben angegebene Batch-Normalisierungstransformation die Eingänge auf die Aktivierungsfunktion auf eine vorgeschriebene Normalverteilung beschränkt, kann dies die Darstellungsleistung der Schicht begrenzen. Daher erlauben wir dem Netzwerk, die Batch-Normalisierungstransformation durch Multiplikation mit einem neuen Skalenparameter (Gamma) und Hinzufügen eines neuen Verschiebungsparameters (Beta) rückgängig zu machen. (Gamma) und (beta) sind erlernbare Parameter. Hinzufügen von (Gamma) und (Beta), die die folgende endgültige Batch-Normalisierungstransformation erzeugen: BN (xi) gamma (frac) beta Implementierung der Batch-Normalisierung in Tensorflow Wir werden eine Batch-Normalisierung zu einem grundlegenden, vollständig verbundenen neuronalen Netzwerk hinzufügen, das zwei versteckte Schichten aufweist Je 100 Neuronen und zeigen ein ähnliches Ergebnis wie in Abbildung 1 (b) und (c) des BN2015-Papiers. Beachten Sie, dass dieses Netzwerk für die Testzeit noch nicht allgemein geeignet ist. Siehe den Abschnitt Vorhersagen mit dem Modell belwo aus dem Grund, warum, sowie eine feste Version. Importe, config
No comments:
Post a Comment