Friday 13 January 2017

Echtzeit Forex Python

Python Algorithmic Trading-Bibliothek PyAlgoTrade ist eine Python-Algorithmic Trading-Bibliothek mit Schwerpunkt auf Backtesting und Unterstützung für Papier-Trading und Live-Trading. Lets sagen, Sie haben eine Idee für eine Handelsstrategie und youd wie es mit historischen Daten zu bewerten und sehen, wie es sich verhält. PyAlgoTrade ermöglicht es Ihnen, dies mit minimalem Aufwand zu tun. Hauptmerkmale Vollständig dokumentiert. Ereignisgesteuert . Unterstützt Markt-, Limit-, Stop - und StopLimit-Aufträge. Unterstützt Yahoo Finanzen, Google Finanzen und NinjaTrader CSV-Dateien. Unterstützt alle Arten von Zeitreihen-Daten im CSV-Format, zB Quandl. Bitcoin-Trading-Unterstützung durch Bitstamp. Technische Indikatoren und Filter wie SMA, WMA, EMA, RSI, Bollinger Bands, Hurst Exponent und andere. Leistungsmesswerte wie Sharpe-Ratio und Drawdown-Analyse. Handling Twitter-Ereignisse in Echtzeit. Ereigniserfassung. TA-Lib-Integration. Sehr einfach skalierbar horizontal, das heißt, mit einem oder mehreren Computern zu Backtest einer Strategie. PyAlgoTrade ist kostenlos, Open Source, und es ist lizenziert unter der Apache Lizenz, Version 2.0.Das Ziel dieses Tutorials ist es, Ihnen eine kurze Einführung in PyAlgoTrade. Wie in der Einleitung beschrieben, ist das Ziel von PyAlgoTrade, Ihnen zu helfen Backtest Aktienhandel Strategien. Let8217s sagen, Sie haben eine Idee für eine Handelsstrategie und you8217d wie es mit historischen Daten zu bewerten und sehen, wie es sich verhält, dann PyAlgoTrade sollten Sie dies mit minimalem Aufwand ermöglichen. Bevor ich weiter gehe, möchte ich Pablo Jorge danken, der bei der Überprüfung des ursprünglichen Entwurfs und der Dokumentation mitgeholfen hat. Dieses Tutorial wurde in einer UNIX-Umgebung entwickelt, aber die Schritte, es an eine Windows-Umgebung anzupassen, sollten einfach sein. PyAlgoTrade hat 6 Hauptkomponenten: Strategien Dies sind die Klassen, die Sie definieren, die die Handelslogik implementieren. Wenn zu kaufen, wann zu verkaufen, etc. Feeds Dies sind Daten, die Abstraktionen. Beispielsweise verwenden Sie einen CSV-Feed, der Balken aus einer CSV-Datei (kommagetrennte Werte) lädt, um die Daten einer Strategie zuzuführen. Feeds sind nicht auf Bars beschränkt. Zum Beispiel gibt es eine Twitter-Feed, mit dem Twitter-Ereignisse in den Handel Entscheidungen ermöglicht. Brokers Brokers sind verantwortlich für die Ausführung von Aufträgen. DataSeries Eine Datenreihe ist eine Abstraktion, die zum Verwalten von Zeitreihendaten verwendet wird. Technische Daten Hierbei handelt es sich um eine Reihe von Filtern, mit denen Sie Berechnungen an DataSeries vornehmen. Zum Beispiel SMA (Simple Moving Average), RSI (Relative Strength Index) usw. Diese Filter sind als DataSeries Dekorateure modelliert. Optimizer Dies sind eine Reihe von Klassen, mit denen Sie Backtesting zwischen verschiedenen Computern oder unterschiedlichen Prozessen, die auf demselben Computer ausgeführt werden, oder eine Kombination aus beiden verteilen können. Sie machen horizontale Skalierung einfach. Nachdem wir alles gesagt haben, ist das erste, was wir brauchen, um unsere Strategien zu testen, einige Daten. Let8217s verwenden Oracle8217s Aktienkurse für das Jahr 2000, die wir8217ll mit dem folgenden Befehl herunterladen: Das Paket pyalgotrade. tools. yahoofinance lädt CSV formatierte Daten von Yahoo Finance. Die Datei orcl-2000.csv sollte wie folgt aussehen: Let8217s beginnen mit einer einfachen Strategie, dh einer, die nur die Schlusspreise druckt, während sie verarbeitet werden: Der Code macht 3 Hauptsachen: Eine neue Strategie zu deklarieren. Es gibt nur eine Methode, die definiert werden muss, onBars. Die für jeden Stab im Futter aufgerufen wird. Laden des Feeds aus einer CSV-Datei. Ausführung der Strategie mit den vom Feed gelieferten Balken. Wenn Sie das Skript ausführen, sollten Sie die Schlusskurse in der Reihenfolge sehen: Let8217s verschieben mit einer Strategie, die geschlossene SMA-Preise druckt, um zu verdeutlichen, wie Techniken verwendet werden: Dies ist sehr ähnlich dem vorherigen Beispiel, außer dass: We8217re Initialisierung eines SMA-Filters Über die Schlusskursdatenreihe. We8217re Drucken der aktuellen SMA-Wert zusammen mit dem Schlusskurs. Wenn Sie das Skript ausführen, sollten Sie die Schlusspreise und die entsprechenden SMA-Werte sehen, aber in diesem Fall sind die ersten 14 SMA-Werte keine. Das ist, weil wir mindestens 15 Werte brauchen, um etwas aus der SMA zu bekommen: Alle technischen Rückgabewerte None, wenn der Wert can8217t zu einem bestimmten Zeitpunkt berechnet werden kann. Eine wichtige Sache über technische ist, dass sie kombiniert werden können. Das liegt daran, dass sie auch als DataSeries modelliert werden. Zum Beispiel, immer ein SMA über den RSI über die Schlusskurse ist so einfach wie dies: Wenn Sie das Skript ausführen, sollten Sie eine Reihe von Werten auf dem Bildschirm, wo: Die ersten 14 RSI-Werte sind Keine. Das ist, weil wir mindestens 15 Werte benötigen, um einen RSI-Wert zu erhalten. Die ersten 28 SMA-Werte sind Keine. Das liegt daran, dass die ersten 14 RSI-Werte "None" und "15." der erste nicht None-Wert sind, den der SMA-Filter erhält. Wir können die SMA (15) nur dann berechnen, wenn wir keine 15 Werte haben. Let8217s bewegen sich mit einer einfachen Strategie, diesmal Simulation tatsächlichen Handel. Die Idee ist ganz einfach: Wenn der bereinigte Schlusskurs über dem SMA liegt (15), geben wir eine Long-Position ein (wir legen eine Kaufmarkt-Order). Wenn eine Long-Position vorhanden ist und der eingestellte Short-Preis unter die SMA fällt (15), verlassen wir die Long-Position (wir vergeben einen Market Market Order). Wenn Sie das Skript ausführen, sollten Sie so etwas wie dieses sehen: Aber was ist, wenn wir 30 als SMA-Periode statt 15 verwendet haben. Wäre das Ergebnis besser oder schlechter. Wir könnten sicherlich so etwas tun: und wir würden herausfinden, dass wir mit einem SMA (20) bessere Ergebnisse erzielen können: Das ist ok, wenn wir nur einen begrenzten Satz von Parameterwerten ausprobieren müssen. Aber wenn wir eine Strategie mit mehreren Parametern testen müssen, dann wird der serielle Ansatz definitiv nicht skalieren, wenn Strategien komplexer werden. Optimierung Treffen Sie die Optimierer-Komponente. Die Idee ist sehr einfach: Es ist ein Server verantwortlich für: Bereitstellung der Bars, um die Strategie laufen. Bereitstellung der Parameter, um die Strategie auszuführen. Erfassen der Strategieergebnisse von jedem der Arbeiter. Es gibt mehrere Mitarbeiter, die dafür verantwortlich sind: Die Strategie mit den vom Server bereitgestellten Balken und Parametern ausführen. Um dies zu verdeutlichen, verwenden wir eine Strategie, die als RSI2 (stockchartsschooldoku. phpidchartschool: tradingstrategies: rsi2) bekannt ist und folgende Parameter erfordert: Eine SMA-Periode für Trendidentifizierung. We8217ll nennen diesen EintragSMA und wird zwischen 150 und 250 liegen. Ein kleinerer SMA-Zeitraum für den Ausgangspunkt. We8217ll nennen diese exitSMA und wird zwischen 5 und 15 liegen. Eine RSI-Periode für die Eingabe von beiden Shortlong-Positionen. We8217ll rufen diese rsiPeriod und wird zwischen 2 und 10 liegen. Eine RSI Oversold Schwelle für Long Position Eintrag. We8217ll nennen dies overSoldThreshold und wird zwischen 5 und 25 liegen. Ein RSI overbought Schwelle für Short Position Eintrag. We8217ll nennen dies overBoughtThreshold und wird zwischen 75 und 95 liegen. Wenn meine Mathe ist ok, das sind 4409559 verschiedene Kombinationen. Das Testen dieser Strategie für einen Satz von Parametern dauerte etwa 0,16 Sekunden. Wenn ich alle Kombinationen seriell it8217ll nehmen Sie mir etwa 8,5 Tage, um alle zu bewerten und finden Sie die besten Satz von Parametern. Das ist eine lange Zeit, aber wenn ich zehn 8-Core-Computer bekommen können, um den Job zu machen, dann die Gesamtzeit geht auf etwa 2,5 Stunden. Lange Geschichte kurz, wir müssen parallel gehen. Let8217s starten durch das Herunterladen von 3 Jahren täglich Bars für 8216Dow Jones Industrial Average8217: Diesen Code als rsi2.py speichern:


No comments:

Post a Comment