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.): Function GroupsRelease Notes 8. September 2016 Erweiterungen fügt Vorwärts-Füll-Checkpoint-Tabellen hinzu Für den Blaze Kernlader. Dies ermöglicht es dem Lader, die Daten effizienter zu füllen, indem er das niedrigere Datum kapselt, das es bei der Abfrage von Daten suchen muss. Die Checkpoints sollten neuartige Deltas angewendet haben (1276). VagrantFile aktualisiert, um alle dev-Anforderungen einzubeziehen und ein neues Bild zu verwenden (1310). Erlaube Korrelationen und Regressionen zwischen zwei 2D-Faktoren zu berechnen, indem sie Berechnungen asset-weise (1307) durchführen. Filter wurden standardmäßig Windowsafe hergestellt. Jetzt können sie als Argumente an andere Filter, Faktoren und Klassifikatoren (1338) weitergegeben werden. Es wurde ein optionaler groupby-Parameter hinzugefügt. oben(). Und unten (). (1349). Neue Pipeline-Filter hinzugefügt, alle und alle. Die einen anderen Filter aufnimmt und True zurückgibt, wenn ein Asset für alle Tage in den vorherigen Fensterlängestagen (1358) einen True erzeugt hat. Neue Pipeline Filter hinzugefügt AtLeastN. Die einen anderen Filter und einen int N nimmt und True zurückgibt, wenn ein Asset ein True on N oder mehr Tage in den vorherigen windowlennth Tagen (1367) produziert hat. Verwenden Sie externe Bibliothek empyrisch für Risikoberechnungen. Empyrisch vereinheitlicht die Risiko-Metrik-Berechnungen zwischen pyfolio und zipline. Empyrisch fügt benutzerdefinierte Jahresoptionsoptionen für die Rückgabe von benutzerdefinierten Frequenzen hinzu. (855) Aroonfaktor hinzufügen (1258) Schnellstochastischer Oszillatorfaktor hinzufügen. (1255) Dockerfile hinzufügen. (1254) Neuer Handelskalender, der Sitzungen unterstützt, die sich über Mitternacht erstrecken, z. B. 24 Stunden 6:01 PM-6:00PM Sitzungen für Futures-Handel. Zipline. utils. tradingcalendar ist jetzt veraltet. (1138) (1312) Erlaube das Slicing einer einzelnen Spalte aus einem FactorFilterClassifier. (1267) Denimoku-Cloud-Faktor bereitstellen (1263) Standardparameter auf Pipeline-Terme zulassen. (1263) Geben Sie die Änderungsrate an. (1324) Geben Sie einen linear gewichteten gleitenden Mittelfaktor an. (1325) NotNullFilter hinzufügen. (1345) Erlaube Kapitaländerungen durch einen Zielwert zu definieren. (1337) TrueRange Faktor hinzufügen. (1348) Fügen Sie Punkt in der Zeit-Lookups zu assets. db hinzu. (1361) Machen Sie Cantrade bewusst der Asset8217s Austausch. (1346) Add-Sample-Methode auf alle berechenbaren Begriffe. (1394) QuantopianUSFuturesCalendar hinzufügen. (1414) Freigeben der Veröffentlichung von alten assets. db Versionen. (1430) Zeitplan für Futures-Handelskalender aktivieren. (1442) Demonstration von Regressionen der Länge 1. (1466) Experimentell Fügen Sie Unterstützung für kommende Future - und Equity-History-Fenster hinzu und aktivieren Sie den zukünftigen Datenzugriff über das Datenportal. (1435) (1432) Bug Fixes Änderungen AverageDollarVolume Eingebauter Faktor, um fehlende Nah - oder Volumenwerte als 0 zu behandeln. Bisher wurden NaNs einfach vor der Mittelung weggeworfen, wobei die restlichen Werte zu viel Gewicht (1309) gegeben wurden. Entfernen Sie die risikofreie Rate aus der Berechnung des Sharpe-Verhältnisses. Das Verhältnis ist nun der Durchschnitt der risikoadjustierten Renditen über die Vorträglichkeit der bereinigten Renditen. (853) Sortino-Verhältnis wird die Berechnung anstelle von np. nan zurückgeben, wenn die Rückgabe gleich Null ist. Das Verhältnis gibt nun den Durchschnitt der risikoadjustierten Renditen über das Abwärtsrisiko zurück. Fixed falsch markierte API durch Umwandlung von Mar zu Downsiderisk. (747) Das Downside-Risiko gibt nun die Quadratwurzel des Mittelwerts der Downside-Differenzquadrate zurück. (747) Informationsquote aktualisiert, um Mittelwert der risikoadjustierten Renditen über die Standardabweichung der risikoadjustierten Renditen zurückzugeben. (1322) Alpha und Sharpe Ratio sind nun annualisiert. (1322) Fix-Einheiten beim Lesen und Schreiben der täglichen Bar firsttradingday Attribut. (1245) Optionale Versandmodule, wenn sie fehlen, verursachen nicht mehr einen NameError. (1246) Behandlungsplan-Argument als Zeitregel, wenn eine Zeitregel, aber keine Datumsregel geliefert wird. (1221) Schützen Sie sich vor den Grenze Bedingungen am Anfang und Ende Handelstag in Zeitplan Funktion. (1226) Anwenden von Anpassungen auf den vorherigen Tag bei der Verwendung von Verlauf mit einer Frequenz von 1d. (1256) Fail schnell auf ungültige Pipeline-Spalten, anstatt zu versuchen, die nicht vorhandene Spalte zugreifen. (1280) Fix AverageDollarVolume NaN Handhabung. (1309) Leistungsverbesserungen zum Bohren von Kernlader. (1227) Gleichzeitige Blaze-Abfragen zulassen (1323) Vermeiden Sie fehlende führende bcolz-Minuten-Daten aus wiederholten unnötigen Lookups. (1451) Cache zukünftige Ketten-Lookups. (1455) Instandhaltung und Refactorings Entfernt verbleibende Erwähnungen der Zusatzgeschichte. (1287) Dokumentation Fügen Sie Testbefestigung hinzu, welche Quellen täglich Preisdatumsdaten von den kleinsten Preisfaktoren belegen. (1243) Datenformatänderungen BcolzDailyBarReader und BcolzDailyBarWriter verwenden Handelskalenderinstanz anstelle von Handelstagen, die an JSON serialisiert sind. (1330) Ändern Sie das Format von assets. db, um Point-of-Time-Lookups zu unterstützen. (1361) Ändern Sie BcolzMinuteBarReaderand BcolzMinuteBarWriter, um verschiedene Tick-Größen zu unterstützen. (1428) Release 1.0.1 Dies ist eine kleine Bug-Fix-Version von 1.0.0 und enthält eine kleine Anzahl von Bug-Fixes und Dokumentations-Verbesserungen. Erweiterungen Unterstützung für benutzerdefinierte Provisionsmodelle hinzugefügt. Weitere Informationen zur Implementierung eines Provisionsmodells finden Sie in der zipline. financemissionmissionModel-Klasse. (1213) Unterstützung für Nicht-Float-Spalten zu Blaze-backed Pipeline-Datensätzen (1201) hinzugefügt. Zipline. pipeline. slice. Slice hinzugefügt. Ein neuer Pipeline-Begriff, der entworfen ist, um eine einzelne Spalte aus einem anderen Begriff zu extrahieren. Scheiben können durch Indizierung in einen Begriff erstellt werden. (1267) Fehlerkorrekturen Ein Fehler wurde behoben, bei dem Pipeline-Lader nicht ordnungsgemäß von zipline. runalgorithm () initialisiert wurden. Dies trifft auch auf die Aufruf von Zipline aus der CLI zu. Es wurde ein Fehler behoben, der dazu führte, dass die Zipline-IPython-Zelle Magie versagte (533233fae43c7ff74abfb0044f046978817cb4e4). Ein Fehler im ProTrade-Provisionsmodell wurde behoben, bei dem Provisionen bei jeder Teilfüllung eines Auftrags falsch angewendet wurden, anstatt auf den Auftrag selbst, was dazu führte, dass Algorithmen bei der Bestellung großer Aufträge zu viel in Provisionen aufgeladen wurden. PerTrade beantragt nun Provisionen auf Auftragsebene (1213). Attributzugriffe auf CustomFactors, die mehrere Ausgänge definieren, geben nun korrekt ein Ausgabe-Slice zurück, wenn die Ausgabe auch der Name einer Factor-Methode (1214) ist. Ersetzte veraltete Verwendung von pandas. io. data mit pandasdatareader (1218). Es wurde ein Problem behoben, bei dem pyi stub-Dateien für zipline. api versehentlich von der PyPI-Quellverteilung ausgeschlossen wurden. Conda-Nutzer sollten nicht betroffen sein (1230). Dokumentation Ein neues Beispiel hinzugefügt, zipline. examples. momentpipeline. Die die Pipeline API (1230) ausübt. Highlights Zipline 1.0 Rewrite (1105) Wir haben viel Zipline und seine Grundkonzepte umgeschrieben, um die Laufzeitperformance zu verbessern. Gleichzeitig haben wir mehrere neue APIs eingeführt. Auf einem hohen Niveau zogen frühere Versionen von Zipline-Simulationen aus einem gemultiplexten Strom von Datenquellen, die über Heapq zusammengeführt wurden. Dieser Stream wurde der Haupt-Simulationsschleife zugeführt und fuhr die Uhr vorwärts. Diese starke Abhängigkeit vom Lesen aller Daten machte es schwierig, die Simulationsleistung zu optimieren, da es keine Verbindung zwischen der Menge der Daten, die wir abgerufen haben, und der Menge der Daten, die tatsächlich von dem Algorithmus verwendet wurden, gab. Jetzt holen wir nur Daten, wenn der Algorithmus es braucht. Eine neue Klasse, DataPortal. Sendet Datenanforderungen an verschiedene Datenquellen und gibt die angeforderten Werte zurück. Dies macht die Laufzeit einer Simulationsskala viel stärker mit der Komplexität des Algorithmus und nicht mit der Anzahl der von den Datenquellen bereitgestellten Assets. Statt des Datenstroms, der die Uhr treibt, werden nun Simulationen durch einen vorberechneten Satz von Tag - oder Minuten-Zeitstempeln durchgelesen. Die Zeitstempel werden von MinuteSimulationClock und DailySimulationClock ausgegeben. Und verbraucht von der Hauptschleife in transform (). Wir haben die Datasid (N) und die Verlaufs-APIs zurückgezogen und sie durch mehrere Methoden auf dem BarData-Objekt ersetzt: current (). Geschichte(). können handeln(). Und isstale (). Alte APIs werden weiterhin für die Arbeit arbeiten, aber werden Ablehnungswarnungen ausgeben. Sie können nun eine Anpassungsquelle an das DataPortal übergeben. Und wir werden bei der Rücksendung der Daten Anpassungen der Preisdaten vornehmen. Preise und Volumen für die Ausführung und präsentiert dem Algorithmus in data. current sind die as-gehandelten Wert des Vermögenswertes. Neue Eintrittspunkte (1173 und 1178) Um die Zipline einfacher zu machen, haben wir die Einstiegspunkte für einen Backtest aktualisiert. Die drei unterstützten Wege, um einen Backtest laufen zu lassen, sind jetzt: zipline. runalgo () zipline run zipline (IPython magic) Datenbündel (1173 und 1178) 1.0.0 führt Datenbündel ein. Datenbündel sind Gruppen von Daten, die vorinstalliert und verwendet werden sollten, um Backtests später auszuführen. Dies ermöglicht es Benutzern, nicht zu spezifizieren, welche Tickers sie interessiert sind, jedes Mal, wenn sie einen Algorithmus ausführen. Damit können wir auch die Daten zwischen den Läufen zwischenspeichern. Standardmäßig wird das Quantopian-Quandl-Bündel verwendet, das Daten vom Quantopian8217s Spiegel des Quandl WIKI-Datensatzes zieht. Neue Bündel können mit zipline. data. bundles. register () wie folgt registriert werden: Diese Funktion sollte die benötigten Daten abrufen und dann die Schreiber verwenden, die übergeben wurden, um diese Daten an eine Stelle zu schreiben, die Zipline später finden kann. Diese Daten können in Backtests verwendet werden, indem sie den Namen als das - b - bundle-Argument an zipline run oder als bundle-Argument an zipline. runalgorithm () übergeben. Weitere Informationen finden Sie unter Datenbündel für weitere Informationen. String-Unterstützung in Pipeline (1174) Unterstützung für String-Daten in Pipeline hinzugefügt. Zipline. pipeline. data. Column akzeptiert nun das Objekt als dtype, was bedeutet, dass Loader für diese Spalte Fenster-Iteratoren über die experimentelle neue LabelArray-Klasse aussenden sollten. Mehrere neue Classifier-Methoden wurden auch hinzugefügt, um Filter-Instanzen basierend auf String-Operationen zu erstellen. Die neuen Methoden sind: elementof ist für alle Klassifikatoren definiert. Die restlichen Methoden sind nur für String-Dtype-Klassifikatoren definiert. Erweiterungen Die Datenladeklassen haben mehr konsistente Schnittstellen. Dazu gehören die Equity Bar Schriftsteller, Anpassung Schriftsteller und Asset DB Schriftsteller. Die neue Schnittstelle ist, dass die zu schreibende Ressource zur Bauzeit übergeben wird und die zu schreibenden Daten später der Schreibmethode als Dataframes oder einem Iterator von Dataframes zur Verfügung gestellt werden. Dieses Modell erlaubt uns, diese Schriftsteller Objekte als eine Ressource für andere Klassen und Funktionen zu verbrauchen (1109 und 1149) zu übergeben. Maskierung zu zipline. pipeline. CustomFactor hinzugefügt. Kundenspezifische Faktoren können nun bei der Instanziierung einen Filter übergeben werden. Dies sagt, dass der Faktor nur über Aktien berechnen muss, für die der Filter True zurückgibt, anstatt immer über das gesamte Universum der Aktien zu rechnen. (1095) Zipline. utils. cache. ExpiringCache hinzugefügt. Ein Cache, der Einträge in einem zipline. utils. cache. CachedObject einpackt. Die das Auslaufen der Einträge auf der Grundlage der dt, die an die get-Methode geliefert wird, verwaltet. (1130) implementiert zipline. pipeline. factors. RecarrayField. Ein neuer Pipeline-Begriff, der als Ausgangstyp eines CustomFactor mit mehreren Ausgängen ausgelegt ist. (1119) Added optionale Ausgänge Parameter an zipline. pipeline. CustomFactor. Kundenspezifische Faktoren sind nun in der Lage, mehrere Ausgänge zu berechnen und zurückzugeben, von denen jeder selbst ein Faktor ist. (1119) Unterstützung für String-Dtype-Pipeline-Spalten hinzugefügt. Lader für die Spalten sollten Instanzen von zipline. lib. labelarray. LabelArray erzeugen, wenn sie durchlaufen werden. Latest () auf String-Spalten erzeugt einen String-dtype zipline. pipeline. Classifier. (1174) Mehrere Methoden zum Konvertieren von Klassifikatoren in Filter hinzugefügt. Die neuen Methoden sind: - elementof () - startswith () - endwith () - hassubstring () - matches () elementof ist für alle Klassifikatoren definiert. Die restlichen Methoden sind nur für Strings definiert. (1174) Fetcher wurde von Quantopian internem Code in Zipline (1105) verschoben. Experimentelle Merkmale Die experimentellen Merkmale sind freibleibend. Hat eine neue zipline. lib. labelarray. LabelArray-Klasse hinzugefügt, um die String-Daten effizient zu repräsentieren und zu komprimieren. Diese Klasse ist konzeptionell ähnlich wie pandas. Kategorisch. Da es String-Arrays als Arrays von Indizes in ein (kleineres) Array von eindeutigen String-Werten darstellt. (1174) Bug Fixes Highlights Ein neues EarningsCalendar-Dataset für den Einsatz in der Pipeline API hinzugefügt. (905). AssetFinder Beschleunigungen (830 und 817). Verbesserte Unterstützung für Nicht-Float-Dtypen in Pipeline. Vor allem unterstützen wir jetzt datetime64 und int64 dtypes für Factor. Und BoundColumn. latest gibt nun ein richtiges Filterobjekt zurück, wenn die Spalte von dtype bool ist. Zipline unterstützt jetzt numpy 1.10, Pandas 0.17 und scipy 0.16 (969). Batch-Transformationen wurden veraltet und werden in einer zukünftigen Version entfernt. Die Verwendung von Geschichte wird als Alternative empfohlen. Erweiterungen Fügt den Benutzern einen Weg hinzu, der bei der Ausführung der geplanten Funktionen (einschließlich Handledata) einen Kontextmanager zur Verfügung stellt. Dieser Kontext-Manager wird das BarData-Objekt für die Leiste übergeben und wird für die Dauer aller geplanten Funktionen verwendet. Dies kann an TradingAlgorithm über das Keyword-Argument createEventcontext (828) übergeben werden. Unterstützung für zipline. pipeline. factors. Factor-Instanzen mit datetime64ns dtypes hinzugefügt. (905) Ein neues EarningsCalendar-Dataset zur Verwendung in der Pipeline-API hinzugefügt. Dieser Datensatz bietet eine abstrakte Schnittstelle für das Hinzufügen von Gewinnanweisungsdaten zu einem neuen Algorithmus. Eine pandasbasierte Referenzimplementierung für diesen Datensatz finden Sie in zipline. pipeline. loaders. earnings. Und eine experimentelle Blaze-basierte Implementierung finden Sie in zipline. pipeline. loaders. blaze. earnings. (905). Neue eingebaute Faktoren hinzugefügt, zipline. pipeline. factors. BusinessDaysUntilNextEarnings und zipline. pipeline. factors. BusinessDaysSincePreviousEarnings. Diese Faktoren verwenden den neuen EarningsCalendar-Datensatz. (905). Isnan () hinzugefügt. Notnan () und isfinite () Methoden zu zipline. pipeline. factors. Factor (861). Zipline. pipeline. factors. Returns hinzugefügt. Ein eingebauter Faktor, der die prozentuale Veränderung des nahe Preises über die vorgegebene Fensterlänge berechnet. (884). Ein neuer eingebauter Faktor hinzugefügt: AverageDollarVolume. (927). Added ExponentialWeightedMovingAverage und ExponentialWeightedMovingStdDev Faktoren. (910). Ermöglichen, dass DataSet-Klassen subklassen werden, wenn Unterklassen alle Spalten vom übergeordneten übernehmen. Diese Spalten werden neue Sentinels, so dass Sie sie einen benutzerdefinierten Loader (924) registrieren können. Hinzugefügt coerce (), um Eingaben von einem Typ in einen anderen zu zwingen, bevor er sie an die Funktion (948) übergibt. Zusätzlich hinzugefügt (), um andere Präprozessorfunktionen zu verpacken, um explizit keine (947) zuzulassen. Sende timezone () hinzugefügt, damit String-Argumente in datetime. tzinfo-Objekte konvertiert werden können. Damit können auch tzinfo-Objekte direkt weitergegeben werden (947). Es wurden zwei optionale Argumente, dataquerytime und dataquerytz zu BlazeLoader und BlazeEarningsCalendarLoader hinzugefügt. Diese Argumente erlauben es dem Benutzer, bei der Beladung aus der Ressource eine Begrenzungszeit für Daten anzugeben. Zum Beispiel, wenn ich die Ausführung meiner beforetradingstart Funktion um 8:45 USEastern simulieren möchte, dann könnte ich datetime. time (8, 45) und USEastern zum Loader passieren. Dies bedeutet, dass Daten, die am oder nach 8:45 Zeitstempel sind, an diesem Tag in der Simulation nicht gesehen werden. Die Daten werden am nächsten Tag (947) zur Verfügung gestellt. BoundColumn. latest gibt nun einen Filter für Spalten von dtype bool (962) zurück. Unterstützung für Faktorinstanzen mit int64 dtype hinzugefügt. Spalte benötigt jetzt einen fehlenden Wert, wenn dtype integral ist. (962) Es ist auch möglich, benutzerdefinierte fehlwertwerte für float anzugeben. Terminzeit. Und bool Pipeline Begriffe. (962) Zusätzliche Auto-Close-Unterstützung für Aktien. Alle Positionen, die in einem Eigenkapital gehalten werden, das ihre Autoclosedate erreicht, werden nach dem Equity8217s letzten Verkaufspreis für Bargeld liquidiert. Darüber hinaus werden alle offenen Aufträge für dieses Eigenkapital annulliert. Beide Futures und Aktien werden nun am Morgen ihres Autoclosedates automatisch geschlossen. Unmittelbar vor dem Vorgang. (982) Experimentelle Merkmale Experimentelle Merkmale sind freibleibend. Unterstützung für parametrisierte Faktor-Subklassen hinzugefügt. Faktoren können params als Klassenebenenattribut mit einem Tupel von Parameternamen angeben. Diese Werte werden dann vom Konstruktor akzeptiert und per Namen an die Faktor8217s Berechnungsfunktion weitergeleitet. Diese API ist experimentell und kann sich in zukünftigen Releases ändern. Bug-Fixes Behebt ein Problem, das dazu führen würde, dass das Dailyminuly-Methoden-Caching das Len eines SIDData-Objekts ändert. Das würde uns dazu bringen zu denken, dass das Objekt nicht leer war, auch wenn es war (826). Behebt einen Fehler bei der Berechnung der Beta, wenn die Benchmark-Daten spärlich waren. Statt numpy. nan wird zurückgegeben (859). Ein Problem beendet, das Sentinel () Objekte (872) platziert. Feste falsche Warnungen beim ersten Download von Treasury-Daten (: Ausgabe 922). Korrigiert die Fehlermeldungen für setcommission () und setslippage () bei Verwendung außerhalb der Initialisierungsfunktion. Diese Fehler, die die Funktionen genannt werden, überschreiben statt Satz. Dies hat auch die Ausnahmetypen umbenannt, die von OverrideSlippagePostInit und OverrideCommissionPostInit auf SetSlippagePostInit und SetCommissionPostInit (923) angehoben wurden. Es wurde ein Problem in der CLI behoben, das dazu führen würde, dass Vermögenswerte zweimal hinzugefügt werden. Dies würde das gleiche Symbol auf zwei verschiedene Seiten (942) abbilden. Es wurde ein Problem behoben, bei dem die PerformancePeriod bei der Erstellung eines Kontos (950) den Totalpositionswert falsch gemeldet hat. Fixed Fragen rund um KeyErrors aus der Geschichte und BarData auf 32-Bit-Python, wo Assets nicht richtig verglichen mit int64s (959). Ein Fehler wurde behoben, bei dem Boolesche Operatoren bei Filter (991) nicht ordnungsgemäß implementiert wurden. Die Installation der Zipline wird nicht mehr heruntergeladen auf 1.9.2 still und bedingungslos (969). Leistung beschleunigt das Lookupsymbol () durch Hinzufügen einer Erweiterung, AssetFinderCachedEquities. Das lädt Aktien in Wörterbücher und leitet dann lookupsymbol () zu diesen Wörterbüchern, um passende Aktien zu finden (830). Verbesserte Leistung von lookupsymbol () durch die Durchführung von gebundenen Abfragen. (817). Instandhaltung und Refactorings Asset-Datenbanken enthalten nun Versionsinformationen, um die Kompatibilität mit der aktuellen Zipline-Version (815) zu gewährleisten. Upgrade-Anfragen Version auf 2.9.1 (2ee40db) Upgrade Logbuch-Version auf 0.12.5 (11465d9). Upgrade Cython Version auf 0.23.4 (5f49fa2). Macht die Zipline-Installationsanforderungen flexibler (825). Verwenden Sie versioneer, um die Projektversion und die setup. py Version (829) zu verwalten. Fixed Overalls Integration auf Travis Build (840). Fixed conda build, die jetzt Git-Quelle als Quelle verwendet und liest Anforderungen mit setup. py, anstatt sie zu kopieren und lassen sie aus der Synchronisierung (937). Requiretools verwenden gt 18.0 (951). Dokumentation Dokument der Freigabeprozess für Entwickler (835). Zusätzliche Referenzdokumente für die Pipeline-API hinzugefügt. (864). Zusätzliche Referenzdokumente für Asset Metadata APIs hinzugefügt. (864). Generierte Dokumentation enthält jetzt Links zu Quellcode für viele Klassen und Funktionen. (864). Zusätzliche plattformspezifische Dokumentation, die beschreibt, wie man binäre Abhängigkeiten findet. (883). Sonstiges Eine Showgraph () - Methode hinzugefügt, um eine Pipeline als Bild zu rendern (836). Füge den Subtest () Dekorator zum Erstellen von Subtests ohne noseparameterized. expand () hinzu, der den Testausgang aufbläht (833). Begrenzt den Timer-Report in der Testausgabe auf 15 längste Tests (838). Treasury - und Benchmark-Downloads werden nun bis zu einer Stunde warten, um es erneut herunterzuladen, wenn Daten, die von einer entfernten Quelle zurückgegeben werden, nicht auf das erwartete Datum reichen. (841). Ein Tool hinzugefügt, um die Assets db auf vorherige Versionen (941) herunterzusetzen. Release 0.8.3 Highlights Neues Dokumentations-System mit einer neuen Website bei zipline. io Wichtige Leistungsverbesserungen. Dynamische Geschichte. Neue benutzerdefinierte Methode: beforetradingstart. Neue api-Funktion: Zeitplanfunktion (). Neue api-Funktion: getenvironment (). Neue api-Funktion: setmaxleverage (). Neue api-Funktion: setdonotorderlist (). Pipeline API. Unterstützung für Handels-Futures. Erweiterungen Kontoobjekt: Fügt dem Kontext ein Kontoobjekt hinzu, um Informationen über das Handelskonto zu verfolgen. Beispiel: Gibt den abgerechneten Barwert zurück, der auf dem Kontoobjekt gespeichert ist. Dieser Wert wird entsprechend aktualisiert, wenn der Algorithmus ausgeführt wird (396). HistoryContainer kann nun dynamisch wachsen Anrufe in die Historie () werden nun in der Lage sein, die Größe zu vergrößern oder die Form des History-Containers zu ändern, um den Anruf bedienen zu können. Addhistory () fungiert nun als Preformance-Hinweis, um genügend Platz im Container zuzuordnen. Diese Änderung ist rückwärts kompatibel mit der Geschichte. Alle vorhandenen Algorithmen sollten weiterhin wie beabsichtigt arbeiten (412). Einfache Transformationen von Quantopian und Gebrauchsverlauf. SIDData verfügt nun über Methoden für: Diese Methoden, mit Ausnahme von Retouren. Akzeptiere eine Anzahl von Tagen. Wenn Sie mit Minute Daten laufen, dann wird dies berechnen die Anzahl der Minuten in diesen Tagen, die Früherkennung und die aktuelle Zeit und gelten die Transformation über die Menge der Minuten. Rückkehr nimmt keine Parameter und gibt die täglichen Renditen des gegebenen Vermögenswertes zurück. Beispiel: Neue Felder im Leistungszeitraum. Leistungsperiode hat neue Felder im Rückgabewert von todict zugänglich. - Brutto Hebelwirkung - Netto-Hebelwirkung - kurze Exposition - Langzeitbelichtung - Shorts zählen - Longs zählen (464). Erlaube Orderpercent (), mit verschiedenen Marktwerten zu arbeiten (von Jeremiah Lowin). Derzeit sind Orderpercent () und Ordertargetpercent () beide als Prozentsatz von self. portfolio. portfoliovalue. Diese PR lässt sie als Prozentsatz anderer wichtiger MVs betreiben. Fügt auch context. getmarketvalue () hinzu. Was diese Funktionalität ermöglicht. Zum Beispiel: Befehlszeilenoption zum Drucken von algo to stdout (von Andrea D8217Amore) (545). Neue benutzerdefinierte Funktion beforetradingstart. Diese Funktion kann durch den Benutzer, der einmal vor dem Börsengang des Tages geöffnet werden soll, überschrieben werden (389). Neue api Funktion Zeitplanfunktion (). Diese Funktion ermöglicht es dem Benutzer, eine Funktion aufzurufen, die auf komplizierteren Regeln über Datum und Uhrzeit aufgerufen wird. Zum Beispiel, rufen Sie die Funktion 15 Minuten vor Markt schließen respektieren früh schließt (411). Neue api-Funktion setdonotorderlist (). Diese Funktion akzeptiert eine Liste von Assets und fügt einen Handelswächter hinzu, der den Algorithmus daran hindert, sie zu handeln. Fügen Sie einen Listenpunkt in der Zeitliste der gehebelten ETFs hinzu, die Leute mögen möchten, um zu markieren als 8216 nicht Handel8217 (478). Fügt eine Klasse für die Darstellung von Wertpapieren hinzu. Order () und andere Orderfunktionen benötigen nun eine Instanz von Security anstelle eines int oder string (520). Verallgemeinern Sie die Sicherheitsklasse zu Asset. Dies ist in Vorbereitung der Hinzufügung von Unterstützung für andere Asset-Typen (535). Neue api Funktion getenvironment (). Diese Funktion gibt standardmäßig die String-Zipline zurück. Dies wird so verwendet, dass Algorithmen unterschiedliche Verhaltensweisen auf Quantopian und lokaler Zipline haben können (384). Verlängert getenvironment (), um mehr der Umgebung dem Algorithmus auszusetzen. Die Funktion akzeptiert nun ein Argument, das das Feld zurückgibt. Standardmäßig ist dies eine Plattform, die den alten Wert von Zipline zurückgibt, aber die folgenden neuen Felder können angefordert werden: arena. Ist dieser Live-Handel oder Backtesting Datafrequenz. Ist dieser Minutenmodus oder der Tagesmodus gestartet. Simulationsstartdatum. Ende. Simulationsenddatum. Kapitalbasis Das Startkapital für die Simulation. Plattform. Die Plattform, auf der der Algorithmus läuft. . Ein Wörterbuch mit all diesen Feldern. Neue api-Funktion setmaxleveraged (). Diese Methode fügt einen Handelswächter hinzu, der verhindert, dass Ihr Algorithmus von sich selbst hemmt (552). Experimentelle Merkmale Die experimentellen Merkmale sind freibleibend. Fügt eine neue Pipeline-API hinzu. Die Pipeline-API ist eine hochrangige deklarative API zur Darstellung von Schleppfensterberechnungen auf großen Datensätzen (630). Fügt Unterstützung für Futures-Handel hinzu (637). Fügt Pipeline-Loader für Blaze-Ausdrücke hinzu. Dies ermöglicht es Benutzern, Daten aus irgendeinem Format zu löschen, das man versteht und es in der Pipeline-API verwendet. (775). Fehlerbehebungen Beheben Sie einen Fehler, bei dem die gemeldeten Renditen für zufällige Zeiträume (378) scharf abfallen könnten. Fix einen Fehler, der verhindert, dass Debugger die Algorithmus-Datei (431) auflösen. Richtig vorwärts Argumente an Benutzerdefinierte Initialisierungsfunktion (687). Beheben Sie einen Fehler, der dazu führen würde, dass die Schatzdaten Daten zwischen dem Mitternacht-EST und dem Zeitpunkt, an dem die Schatzdaten verfügbar waren, neu heruntergeladen werden konnten (793). Fix einen Fehler, der dazu führen würde, dass die benutzerdefinierte Analysefunktion nicht aufgerufen wird, wenn sie als Keyword-Argument an TradingAlgorithm (819) übergeben wurde. Leistung Wichtige Leistungsverbesserungen zur Geschichte (von Dale Jung) (488). Wartung und Refactorings Entfernen Sie den einfachen Code. Diese sind als Methoden von SIDData (550) verfügbar. Highlights Kommandozeilenschnittstelle, um Algorithmen direkt auszuführen. IPython Magic Zipline, die Algorithmus in einer IPython Notebook-Zelle definiert. API-Methoden für den Aufbau von Schutzmaßnahmen gegen Ausreißer-Bestellung und unerwünschte Short-Positionen. Neue History () - Funktion, um ein bewegliches DataFrame von vergangenen Marktdaten zu erhalten (ersetzt BatchTransform). Ein neues Anfänger-Tutorium. Erweiterungen CLI: Fügt eine CLI - und IPython-Magie für Zipline hinzu. Beispiel: Ergreift die Daten von yahoo Finanzen, führt die Datei dualmovingavg. py (und sucht nach dualmovingavganalyze. py, die, falls gefunden, nach dem Algorithmus ausgeführt wird) und gibt die perf DataFrame zu dma. pickle (325) . IPython Magic Command (an der Spitze einer IPython Notebook Zelle). Beispiel: Gibt es das gleiche wie oben, außer anstelle der Ausführung der Datei sucht nach dem Algorithmus in der Zelle und anstatt die Perf df in eine Datei auszugeben, erzeugt eine Variable im Namensraum namens perf (325). Fügt dem Algorithmus API Trading Controls hinzu. Die folgenden Funktionen stehen nun auf TradingAlgorithm und für algo-Skripte zur Verfügung: setmaxordersize (self, sidNone, maxsharesNone, maxnotionalNone) Setzt eine Begrenzung auf die absolute Größe, in Aktien und Gesamtdollwert eines einzelnen Auftrags, der von diesem Algorithmus für eine gegebene Sid platziert wird . Wenn sid keine ist, dann wird die Regel auf irgendeine Reihenfolge angewendet, die durch den Algorithmus platziert wird. Beispiel: setmaxpositionsize (self, sidNone, maxsharesNone, maxnotionalNone) - Set eine Grenze für die absolute Größe, entweder in Aktien oder Dollar-Wert, von jeder Position, die durch den Algorithmus für eine gegebene Sid gehalten wird. Wenn sid keine ist, dann wird die Regel auf jede Position angewendet, die vom Algorithmus gehalten wird. Beispiel: setlongonly (self) Legt eine Regel fest, die angibt, dass der Algorithmus keine Short-Positionen enthält. Beispiel: Fügt eine allapimethods classmethod auf TradingAlgorithm hinzu, die eine Liste aller TradingAlgorithm API Methoden (333) zurückgibt. Erweiterte Aufzeichnung () Funktionalität für dynamische Benennung. Die record () - Funktion kann nun vor dem kwargs Positionszeichen setzen. Alle ursprünglichen Gebrauch und Funktionalität ist die gleiche, aber jetzt werden diese zusätzlichen Verwendungen funktionieren: Die Anforderungen sind einfach, dass die poritional args nur vor den kwargs (355) auftreten. Geschichte () wurde von Quantopian zu Zipline portiert und bietet bewegte Fenster von Marktdaten. Geschichte () ersetzt BatchTransform. Es ist schneller, arbeitet für Minute-Level-Daten und hat eine überlegene Schnittstelle. Um es zu benutzen, rufen Sie addhistory () innerhalb von initialize () an und erhalten dann einen pandas DataFrame durch Aufruf von history () von inside handledata (). Schauen Sie sich das Tutorial und ein Beispiel an. (345 und 357). Geschichte () unterstützt nun 1m Fensterlängen (345). Bug Fixes Fix Ausrichtung der Handelstage und offen und schließt im Handelsumfeld (331). RollingPanel fix beim Hinzufügen von neuen Feldern (349). Performance Maintenance und Refactorings Entfernt undokumentierte und ungetestete HDF5- und CSV-Datenquellen (267). Refactor simparams (352). Refactoring der Geschichte (340). Die folgenden Abhängigkeiten wurden aktualisiert (zipline kann auch mit anderen Versionen funktionieren): Highlights Größere Fehlerbehebungen zur Risikoberechnung finden Sie unter Bug Fixes. Port of History () - Funktion, siehe Erweiterungsbereich Starten der Unterstützung für die Quantopian-Algorithmus-Skript-Syntax, siehe ENH-Abschnitt. Conda-Paket-Manager-Unterstützung, siehe Build-Bereich. Erweiterungen Immer neue Aufträge verarbeiten, z. B. auf Stäben, in denen Handledata isn8217t aufgerufen wird, aber es gibt 8216clock8217 Daten z. B. Eine konsequente Benchmark, Prozessaufträge. Leere Positionen werden nun aus dem Portfolio-Container gefiltert. Um zu verhindern, dass Algorithmen auf Positionen arbeiten, die sich nicht im bestehenden Universum von Aktien befinden. Früher würde die Iteration über Positionen Positionen für Aktien zurückgeben, die null Aktien gehalten haben. (Wenn ein expliziter Check-in-Algorithmus-Code für pos. amount 0 verhindern könnte, dass eine nicht vorhandene Position verwendet wird.) Fügen Sie Handelskalender für BMFampBovespa hinzu. Füge den Anfang der algo-Skriptunterstützung hinzu. Startet auf dem Pfad der Parität mit der Skript-Syntax in Quantopian8217s IDE auf dem Quantopian Beispiel: Füge HDF5- und CSV-Quellen hinzu. Begrenzt Handledata auf Zeiten mit Marktdaten. Um Fälle zu verhindern, in denen benutzerdefinierte Datentypen freigegebene Zeitstempel hatten, rufen Sie nur Handledata an, wenn die Marktdaten durchlaufen. Kundendaten, die vor Marktdaten kommen, werden die Datenleiste noch aktualisieren. Aber die Handhabung dieser Daten erfolgt nur, wenn es umsetzbare Marktdaten gibt. Extended Provision PerShare-Methode, um eine minimale Kosten pro Handel zu ermöglichen. Add symbol api function Ein Symbol () Lookup Feature wurde zu Quantopian hinzugefügt. Durch das Hinzufügen der gleichen API-Funktion zu zipline können wir das Kopieren eines Zipline algo an Quantopian einfacher machen. Fügen Sie simulierte zufällige Handelsquelle hinzu. Eine neue Datenquelle hinzugefügt, die Ereignisse mit einer bestimmten benutzerdefinierten Frequenz (Minute oder täglich) ausgibt. Dies ermöglicht es Benutzern, einen Algorithmus im Minutenmodus zu testen und zu debuggen, um einen saubereren Weg zu Quantopian zu schaffen. Entfernen Sie die Abhängigkeit vom Benchmark für den Handelstagkalender. Anstelle des Benchmarks8217-Index wird nun der Trading-Kalender verwendet, um die Tage des Umfelds zu erfassen. Remove extradate field, since unlike the benchmarks list, the trading calendar can generate future dates, so dates for current day trading do not need to be appended. Motivations: The source for the open and closeearly close calendar and the trading day calendar is now the same, which should help prevent potential issues due to misalignment. Allows configurations where the benchmark is provided as a generator based data source to need to supply a second benchmark list just to populate dates. Port history() API method from Quantopian. Opens the core of the history() function that was previously only available on the Quantopian platform. The history method is analoguous to the batchtransform functiondecorator, but with a hopefully more precise specification of the frequency and period of the previous bar data that is captured. Example usage: N. B. this version of history lacks the backfilling capability that allows the return a full DataFrame on the first bar. Bug Fixes Adjust benchmark events to match market hours (241 ). Previously benchmark events were emitted at 0:00 on the day the benchmark related to: in 8216minute8217 emission mode this meant that the benchmarks were emitted before any intra-day trades were processed. Ensure perf stats are generated for all days When running with minutely emissions the simulator would report to the user that it simulated 8216n - 18217 days (where n is the number of days specified in the simulation params). Now the correct number of trading days are reported as being simulated. Fix repr for cumulative risk metrics. The repr for RiskMetricsCumulative was referring to an older structure of the class, causing an exception when printed. Also, now prints the last values in the metrics DataFrame. Prevent minute emission from crashing at end of available data. The next day calculation was causing an error when a minute emission algorithm reached the end of available data. Instead of a generic exception when available data is reached, raise and catch a named exception so that the tradesimulation loop can skip over, since the next market close is not needed at the end. Fix pandas indexing in trading calendar. This could alternatively be filed under Performance. Index using loc instead of the inefficient index-ing of day, then time. Prevent crash in vwap transform due to non-existent member. The WrongDataForTransform was referencing a self. fields member, which did not exist. Add a self. fields member set to price and volume and use it to iterate over during the check. Fix max drawdown calculation. The input into max drawdown was incorrect, causing the bad results. i. e. the compoundedlogreturns were not values representative of the algorithms total return at a given time, though calculatemaxdrawdown was treating the values as if they were. Instead, the algorithmperiodreturns series is now used, which does provide the total return. Fix cost basis calculation. Cost basis calculation now takes direction of txn into account. Closing a long position or covering a short shouldn8217t affect the cost basis. Fix floating point error in order(). Where order amounts that were near an integer could accidentally be floored or ceilinged (depending on being postive or negative) to the wrong integer. e. g. an amount stored internally as -27.99999 was converted to -27 instead of -28. Update perf period state when positions are changed by splits. Otherwise, self. positionamounts will be out of sync with position. amount, etc. Fix misalignment of downside series calc when using exact dates. An oddity that was exposed while working on making the return series passed to the risk module more exact, the series comparison between the returns and mean returns was unbalanced, because the mean returns were not masked down to the downside data points however, in most, if not all cases this was papered over by the call to. valid() which was removed in this change set. Check that self. logger exists before using it. self. logger is initialized as None and there is no guarantee that users have set it, so check that it exists before trying to pass messages to it. Prevent out of sync market closes in performance tracker. In situations where the performance tracker has been reset or patched to handle state juggling with warming up live data, the marketclose member of the performance tracker could end up out of sync with the current algo time as determined by the performance tracker. The symptom was dividends never triggering, because the end of day checks would not match the current time. Fix by having the tradesimulation loop be responsible, in minuteminute mode, for advancing the market close and passing that value to the performance tracker, instead of having the market close advanced by the performance tracker as well. Fix numerous cumulative and period risk calculations. The calculations that are expected to change are: cumulative. beta cumulative. alpha cumulative. information cumulative. sharpe period. sortino How Risk Calculations Are Changing Risk Fixes for Both Period and Cumulative Use sample instead of population for standard deviation. Add a rounding factor, so that if the two values are close for a given dt, that they do not count as a downside value, which would throw off the denominator of the standard deviation of the downside diffs. Standard Deviation Type Across the board the standard deviation has been standardized to using a 8216sample8217 calculation, whereas before cumulative risk was mostly using 8216population8217. Using ddof1 with np. std calculates as if the values are a sample. Cumulative Risk Fixes Use the daily algorithm returns and benchmarks instead of annualized mean returns. Use sample instead of population with standard deviation. The volatility is an input to other calculations so this change affects Sharpe and Information ratio calculations. The benchmark returns input is changed from annualized benchmark returns to the annualized mean returns. The benchmark returns input is changed from annualized benchmark returns to the annualized mean returns. Period Risk Fixes Now uses the downside risk of the daily return vs. the mean algorithm returns for the minimum acceptable return instead of the treasury return. The above required adding the calculation of the mean algorithm returns for period risk. Also, uses algorithmperiodreturns and tresauryperiodreturn as the cumulative Sortino does, instead of using algorithm returns for both inputs into the Sortino calculation. Performance Removed aliasdt transform in favor of property on SIDData. Adding a copy of the Event8217s dt field as datetime via the aliasdt generator, so that the API was forgiving and allowed both datetime and dt on a SIDData object, was creating noticeable overhead, even on an noop algorithms. Instead of incurring the cost of copying the datetime value and assigning it to the Event object on every event that is passed through the system, add a property to SIDData which acts as an alias datetime to dt. Eventually support for datafoo. datetime may be removed, and could be considered deprecated. Remove the drop of 8216null return8217 from cumulative returns. The check of existence of the null return key, and the drop of said return on every single bar was adding unneeded CPU time when an algorithm was run with minute emissions. Instead, add the 0.0 return with an index of the trading day before the start date. The removal of the null return was mainly in place so that the period calculation was not crashing on a non-date index value with the index as a date, the period return can also approximate volatility (even though the that volatility has high noise-to-signal strength because it uses only two values as an input.) Maintenance and Refactorings Allow simparams to provide data frequency for the algorithm. In the case that datafrequency of the algorithm is None, allow the simparams to provide the datafrequency . Also, defer to the algorithms data frequency, if provided. Added support for building and releasing via conda For those who prefer building with conda. pydata. org to compiling locally with pip. The following should install Zipline on many systems. Meet the Bots That Let You Trade Bitcoin in Your Sleep With all the allegations of Mt. Goxs automated trading bot, which has been dubbed Willy, algorithmic trading is getting a bad rap. However, using bots to trade on the financial markets is a long-established and legitimate activity and its easier than anywhere in the cryptocurrency markets. So, how do these bots work, and can they really make you money Trading bots are software programs that talk directly to financial exchanges, and place buy and sell orders on your behalf. They make those decisions by watching the markets price movements, and reacting according to a set of predefined rules. Joseph Lee is living proof that they can make money. Lee, who founded derivatives exchange BTC. sx, based its trading engine on algorithmic trading bots that he wrote himself, and used between 2011 and 2013. He claims to have turned a simple 100 buy order into 200,000 in profits using his private software army. While that seems astonishing, the devil is in the detail, of course: a lot of that price increase stems from the massive price increase in bitcoin late last year. In fact, the real profits are far more marginal, he has said. so dont expect to install a plug-in and write your own rags-to-riches story. Lee, who claims that his bots shifted 10 of the markets entire volume in the early days, started using his methods when the price sat at 2-4 per bitcoin. Market maker Lees first trading bot used inter-exchange arbitrage, noticing differences in prices between orders on different exchanges, and buying on some exchanges while selling on others. I was essentially taking liquidity from a market where there was some and injecting it into a market where there wasnt, he explained. Back then, Mt. Gox dominated the market, and other exchanges had poor pricing because their supply of bitcoins was limited. So, I bought for cheap on Mt. Gox and sold them to other markets. I bought a lot of bitcoin into tertiary markets. In short, he acted as a market maker on less-established exchanges. Established practice Lee may have written his own bots, but today, the bitcoin trading bot market is far more established, with several available off the shelf. Examples include Butter Bot. which offers an online trading bot accessed via a Google Chrome plug-in, and Haas Online. which sells a Windows-based personal trading server. CryptoTrader offers a trading bot marketplace, which allows people to develop bots using different trading strategies, and then rent them to others. Trading by algorithm isnt new in the financial world: companies in the conventional financial markets have been using the method for years. Lee said, however, that the bitcoin exchange community is one of the first where exchanges grant customers computers direct market access (DMA). This enables individual traders to have their computer access the exchanges electronic order books directly. Thats a service normally only available to brokers and investment houses in the conventional markets. In the past, it was the people who had the means to pay for a 10,000-plus a year Bloomberg terminal with an API connection who could try their hand at bot trading, Lee explained. So, why isnt everyone doing it Pablo Lema, founder of Butter Bot, says that bots arent a fire and forget technology that enable dilettantes to make money without trying: Trading bots require users to have at least a basic understanding of the market, need to be modified and tweaked by the user according to the predominant market conditions, and also according to their own risk profile. Trading bot strategy Lee started off capitalising in a highly inefficient market, where exchanges with sufficient liquidity could be counted on one hand. The situation while still needing improvement is at least a little better now. Opportunities for inter-exchange arbitrage still exist, but he recommends using technical analysis bots. But trading isnt necessarily based on technical analysis alone. Its difficult to program a computer to react to fundamental market conditions such as, say, rumours about the Chinese government taking a new stance on bitcoin, or the latest bitcoin-based black market trading site shutting down. Many bots will use an exponential moving average (EMA) as a starting point. These averages track market prices over a set time span, and bots can be programmed to react to what that price does such as moving beyond certain thresholds. If you have a conservative appetite, choose to trade on a slower basis, Lee advised. If you picked daily rather than hourly periods, its generally seen as a safe bet to get involved in the basics of trading, let alone bot trading. Others suggest tweaks to the EMA approach. If you look to the biggest downside of an EMA then you see its almost always to late. And this is the part that can be improved, said Stephan de Haas, founder of the Haas Online trading bot company, adding. This improvement could be done by using a DEMA double exponential moving average or TEMA triple exponential moving average instead. Those have the ability to respond faster then the EMA and their calculation is EMA-related, so it looks the same while it gives off better momentum. There are still other methods, he pointed out, such as relative strength indicators and regression analysis. This type of analysis works perfectly for processes (in this case a price market) that are unstable, he says, in a description which seems to sum up the roller-coaster world of bitcoin. Using that data, it can make good sense of whats to be expected in the . future. Secret strategies However, technical analysis is a discipline, and these things are indicators, not strategies. Youre still going to have to come up with your own set of trading rules, if youre going to tell a bot how to make decisions. The really good strategies are kept secret and closed source, says Lema. Thats done by everyone: the mid and high level traders and clearing houses. Its hard for a trader whos new to understand the market. BTC or Bust, the creator of the Crackin Kraken bot found on Cryptotrader, points to a set of algorithms in a library of technical analysis algorithms known as TA-Lib. along with custom indicators developed by the bot author. These are typically combined to find buy and sell signals in the market, BTC or Bust told CoinDesk. Bots can be programmed to be predictive or reactive, or a combination of both, using these combined algorithms, it said, explaining: For example, lets say the bitcoin price is crashing. A predictive algorithm might start buying as it expects the price will quickly rebound, while a reactive algorithm might start selling as it sees the price is dropping. Both types have their advantages and disadvantages the challenge is to have the bot employ the correct strategy at the correct time. The ability to set these strategies is one of things that will stop bots from unbalancing the market. Even if lots of people use them, the theory goes that the different strategies they employ would stop them all moving the market in one direction and creating an artificial bubble or worse, a flash crash . Not for everyone Is bot trading for you Possibly. They offer a variety of advantages, not least of which is the ability to diligently trade on your behalf, 247, and the ability to remove all of the emotion from trading (assuming you dont barge in and terminate them when youre feeling irrationally antsy). On the other hand, if you dont have the financial smarts to put together a trading strategy, then bots could simply end up automating a set of poor market trading decisions. For many, then, who believe in bitcoins long-term potential, the most basic trading strategy could be buy-and-hold. Whether or not you decide to automate your trades, the basic rules apply: dont trade more than you can afford to lose, and dont go into any investment without at least a basic understanding of what youre doing. Disclaimer: Statements in this article should not be considered investment advice, which is best sought directly from a qualified professional. Previous Article Can Chinese Exchange OKCoin Rescue Mt. Gox Creditors Next Article How Purse. io Can Shave 25 Off Bitcoin Buyers Amazon Bills
No comments:
Post a Comment