Adam Grandt Adam Grandt Apr 2014 Derzeitiger Chief Technology Officer ndash Visual Trading Systems Inc. metatrader4, java, c, jboss, javabeans, node. js, php, jquery, fix, python Visual Trading Ist das amalgamated Produkt der Fusion von mehreren FinTech Firmen . In dieser Rolle verwaltete ich mehrere Entwicklungsteams mit verschiedenen Stacks. Inklusive einer Java-basierten Trading Platform, PHP-basierten CRM-Systemen und einem Python-ERP-System. Ich habe architektonische Führung in der gesamten Organisation. Best Practices für die Integration von Legacy-Code mit modernster Lösung. Zusammenarbeit mit dem Führungsteam, um die organisatorische Vision zu verwirklichen. Mrz 2013 Dez 2014 Architekt und Lead Entwickler ndash M1: ZERO LLC linux, mongodb, python, turbogears2, scrapy, jquery, backbone. js, twitter-bootstrap, tor In M1: ZERO Ich entwickelte eine Sammlung und Analyse-Tool, um Menschen zu lokalisieren und zu bewerten Trafficking Beweise sowohl in der klaren und dunklen Web. Das Primärwerkzeug wird derzeit von einer FBIDHSMBI-Taskforce pilotiert und war an mehreren erfolgreichen Rettungseinsätzen beteiligt. Jun 2008 Apr 2014 Direktor der Technologie ndash GallantVPS Inc Postgresdb, linux, wein, xvnc, python, django, php, html5, segeltuch, prototypejs, apache2, iptables Ich gründete GallantVPS mit einem Partner im Jahr 2008. Wir erkannten einen spezifischen Bedarf im Forex Industrie und wurde der Technologieführer auf dem Gebiet seit über fünf Jahren. Ich bearbeitete alle technischen Aspekte dieser Firma und bildete die besten Mannschaften, die ich das Vergnügen gehabt habe, mit zu arbeiten, vollständig bis zum Kauf heraus Anfang 2014. Jan 2005 Mai 2008 Director of Technology ndash eTouchWare c. Net, web-services, xslt Ich kam als Direktor von QA und wurde beauftragt, das Produkt auf den Markt zu bringen. Ich gründete QA-Verfahren, schuf ein QA-Team und erzwang agile Entwicklungsmethoden. Ich begann die Entwicklung Teams über zwei Jahre in und blieb in dieser Rolle, bis das Unternehmen im Jahr 2008 gekauft wurde. Mar 2003 Jan 2005 Founder ndash Inuwashi Inc PHP, mysql, javascript Unter dem Dach von meinem ersten Software-Beratungsunternehmen Ich spezialisierte sich auf Maßgeschneiderte ERPCRM-Lösung für KMU. Ich entwickelte und entwickelte Lösungen für verschiedene Branchen: Transport, Bau, Sicherheit, Medizin und E-Commerce. Jedes Projekt hat spezifische Industriestandards und entwicklungsorientierte Verfahren erfüllt. 1999 2002 Direktor der IT-Services ndash Israel Verteidigungskräfte, Zentrales Kommando, HR-Abteilung sql, Austausch, vms, Active-Directory, Windows-Server Commanded ein elf Mann Team, das die IT-Bedürfnisse von über 600 Anwendern in der vielfältigen und hektischen Umgebung verwaltet Ist die des IDF-Zentralkommandos Personalabteilung. Wir verwalteten und unterstützten mehrere Legacy-Systeme sowie ein integriertes neues System, als sich die israelischen Defensivkräfte in das Informationszeitalter entwickelten. Dazu gehörten auch die Durchsetzung von Informationssicherheitsrichtlinien und die Verwaltung von cross corp-Infrastrukturen. Die Erfindung bezieht sich auf ein System und ein Verfahren zur Erleichterung der Übertragung einer Datendatei über ein Kommunikationsnetzwerk. Die Erfindung betrifft ein System und ein Verfahren zur Erleichterung der Übertragung einer Datendatei über ein Kommunikationsnetzwerk nach dem Oberbegriff des Patentanspruchs 1. In einer Ausführungsform kennzeichnet eine erste Workstation mit einer darauf gespeicherten Datendatei einen Empfänger der Datendatei und sendet an den Empfänger eine Einladung zum Empfangen der Datendatei. Der Empfänger, ein zweiter Arbeitsplatzrechner, verwendet die Einladung, mit einem Web-Server eine Adresse zum Empfangen der Datendatei zu kommunizieren. Der Informationsprozessor empfängt sicher Pakete der Datendatei und modifiziert die Kopfinformation in den Paketen, bevor die Pakete der Datendatei zu der zweiten Workstation weitergeleitet werden. In einer alternativen Ausführungsform lädt die Empfänger-Workstation eine Sender-Workstation ein, um eine Datei zu übertragen. Apps amp Software java, delphi, svn, git Visual Trading Systems stellte das technologische Rückgrat für Capital Market Services (CMS) zur Verfügung. VT Spot, eine umfassende Front-to-Back-Trading-Lösung und die Erreichung der prestigeträchtigen Rang in Forex Datenquellen eröffnet FOREXDS Traders Choice Awards. Architekt und Produktmanager html5, Leinwand, Wein, iptables, xvnc, vnc, Wolke, amazon-web-services, websocket, python Eine SaaS-Plattform, die Trading-Plattformen und algorithmisches Trading-Hosting auf einer Linux-Cloud-Ressourcen mit WEIN, wenn nötig, Benutzer, obwohl ein HTML5-Proxy-VNC-Client mit XVNC, Architect und Lead DeveloperCointrol ist ein Bitcoin Handel Bot und Echtzeit-Dashboard für Bitstamp von jkbrzt erstellt. Cointrol wurde geschaffen, um Bitcoin Spekulation zu automatisieren. Neben dem automatisierten Trading auf der Grundlage von Preisänderungs-Triggern und diversen Trading-Strategien bietet es auch ein aktuelles Dashboard für Ihr Bitstamp-Konto, in dem Sie alle Aufträge und Transaktionen in Echtzeit sehen können (etwas Bitstamp fehlt). Das Dashboard für eine aktuell aktualisierte Übersicht kann auch eigenständig verwendet werden, ohne Cointrol zu tätigen. Obwohl der ursprüngliche Gedanke darin bestand, vielleicht einen vollwertigen gehosteten Dienst zu erbringen, blieb das System sehr einfach, da es im Winter 1314 (wenn die BTC-Preisschwankungen ziemlich irrsinnig waren) für einen bestimmten Zeitraum nur von seinem Schöpfer verwendet wurde. Einige der offensichtlichen Einschränkungen, die alle leicht adressiert werden können: Es werden nur grundlegende Handelsstrategien implementiert Einzelner UserBitstamp-Account wird unterstützt Nur eine aktive Handelssitzung zu einem Zeitpunkt Der gesamte Account-Wert wird verwendet, wenn der Handel mit Django admin für Auth - und Trading-Strategiesession-Manipulationen verwendet wird Obwohl Cointrol für echte Transaktionen verwendet wurde, werden keine Garantien in Bezug auf Sicherheit, Korrektheit, etc. (siehe LIZENZ) zur Verfügung gestellt. Das System besteht aus folgenden Komponenten: Umfasst verschiedene Bitstamp-API-Endpunkte Schreibt Änderungen an DB Änderungen an Redis pubsub Öffnet Aufträge, wenn geeignet Serviert Webapp Statische Dateien Expendiert DB für Webapp über eine REST-API leitet Redis pubsub-Meldungen von Trader zu Webapp über WebSocket Exposes weiter Django-Administration, die derzeit für die Verwaltung von Handelssitzungen verwendet wird RESTWebSocket API-powered Single Page App Echtzeit-aktualisierte Übersicht über Aufträge, Transaktionen und Handelssitzungen Die serverseitigen Teile (cointrol-server cointrol-trader) werden in Python 3 (3.3 Ist erforderlich) und verwenden Sie eine Mischung aus Django (Modelle, admin) und Tornado (WebSockets, async IO). Andere Bibliotheken, die verwendet werden, umfassen Sockjs-Tornado, Django REST-Framework. Die einseitige Webapp ist in CoffeeScript, Sass, Lenker geschrieben und verwendet Backbone. js, Brunch, socksjs-client, Bootstrap. Stellen Sie sicher, dass die folgende Software auf Ihrem System installiert ist: 3.1 Get API key und secret Gehe auf bitstamp. netaccountsecurityapi. Erstellen Sie einen neuen Schlüssel und konfigurieren Sie Berechtigungen dafür. Cointrol benötigt mindestens die folgenden Berechtigungen: Kontostand Benutzertransaktionen Offene Aufträge Wenn Sie möchten, dass Cointrol Transaktionen für Sie durchführt, können Sie auch zwei der folgenden Berechtigungen auswählen: Limit Order kaufen Limit Order verkaufen Vergessen Sie nicht, den Key zu aktivieren, indem Sie auf Aktivieren und Bestätigen der E-Mail klicken Empfangen von Bitstamp. 3.2 Cointrol mit den API-Anmeldeinformationen konfigurieren Virtualenv aktivieren und cointrol-server ausführen Gehen Sie zu localhost: 8000admincoreaccount1 und geben Sie Ihren Bitstamp-Benutzernamen sowie den API-Schlüssel und das Geheimnis des Formulars ein. Standardmäßig wird es auf localhost: 8000 ausgeführt. Sie können den Port mit --portltportgt ändern. Verwenden Sie diese bequeme Verbindung, um sich anzumelden: localhost: 8000adminloginnext die Django Admin-Schnittstelle wird für die Authentifizierung verwendet, und dieser Link sorgt für die Umleitung zurück zu der App nach der Anmeldung Sie in. Verbindungsindikatorfarben erklärt: Grün: Die Webanwendung verfügt über eine WebSocket-Verbindung zu cointrol - Server. Und haben vor kurzem von Cointrol-Händler gehört. Bernstein: Die Web-App verfügt über eine WeSocket-Verbindung zum Cointrol-Server. Aber nicht von Cointrol-Händler in einer Weile zu hören. Rot: Die Web-App konnte keine WebSocket-Verbindung zum Cointrol-Server aufbauen. Beachten Sie, dass der Trader keine Transaktionen durchführt, bis der Handel konfiguriert ist und die COINTROLDOTRADE-Einstellungen auf True gesetzt sind (in einem späteren Schritt behandelt). Es zieht nur Ihre Daten aus Bitstamp, um die Dashboard-Ansicht zu füllen. Bis die folgenden Schritte abgeschlossen sind und der Handel explizit aktiviert ist, versucht Cointrol keine Transaktion für Sie durchzuführen: Über den Administrator (localhost: 8000admin) können Sie ein Trading-Strategie-Profil erstellen. Es kann für die festen (Festpreise in USD werden als buysell Trigger verwendet) oder die relative (Prozentsatz der ursprünglichen BTC-Preis verwendet werden) Strategie. Erstellen Sie eine Trading-Session (auch in der Admin-Oberfläche). Um tatsächliche Transaktionen durchzuführen, müssen Sie sie in den Einstellungen aktivieren (wir haben das settingsdev-Modul verwendet, das sie deaktiviert). Hinzufügen COINTROLDOTRADE True zu Ihrem cointrolcointrolconfsettingslocal. py. Die Einstellungen werden in dieser Reihenfolge aufgelöst: settingslocal. py settings (proddev).py settingsdefaults. py Django defaults Während des Installationsvorgangs haben Sie cointrolcointrolconfsettingslocal. py erstellt, die Einstellungen aus der Datei settingsdev. py importieren. Alle Einstellungen sind Django-Einstellungen. Die einzige Nicht-Django-Einstellung ist COINTROLDOTRADE (False in dev. True in prod). Sie können die Standardeinstellungen in der Datei settingslocal. py überschreiben. Neben settingsdev. py. Das conf-Verzeichnis hat auch settingsprod. py. Was für die Produktion besser geeignet ist. Es definiert die Protokollierungskonfiguration, die es ermöglicht, dass Nachrichten des vom Händler angemeldeten Levels gt WARNING per E-Mail an Sie gesendet werden (z. B. wenn der Händler eine Bestellung aufgibt oder ein Fehler auftritt). Wenn Sie sich entscheiden, diese Einstellungsdatei zu verwenden (indem Sie den Import in settingslocal. py ändern, um von. settingsprod importieren zu können, müssen Sie mindestens DATENBANKEN, ADMINS und SECRETKEY auch in Ihrem in settingslocal. py konfigurieren. Forschung Backtesting-Umgebungen in Python mit Pandas Backtesting ist der Forschungsprozess der Anwendung einer Trading-Strategie-Idee auf historische Daten, um die Performance der Vergangenheit zu ermitteln. Speziell stellt ein Backtester keine Garantie für die künftige Performance der Strategie. Sie sind jedoch ein wesentlicher Bestandteil der Strategie Pipeline Forschungsprozess, In diesem Artikel (und diejenigen, die es folgen) wird ein grundlegendes objektorientiertes Backtesting-System in Python geschrieben werden. Dieses frühe System wird in erster Linie eine Lehre Hilfe, verwendet werden, um die zu demonstrieren Verschiedene Komponenten eines Backtesting-Systems. Wie wir durch die Artikel, wird mehr anspruchsvolle Funktionalität hinzugefügt werden. Tracking Überblick Der Prozess der Gestaltung eines robusten Backtesting-System ist äußerst schwierig. Eine effektive Simulation aller Komponenten, die die Performance eines algorithmischen Handelssystems beeinflussen, ist eine Herausforderung. Die schlechte Datengranularität, die Undurchdringlichkeit des Orderrouting bei einem Broker, die Auftragslatenz und eine Vielzahl anderer Faktoren verschwimmen, um die wahre Performance einer Strategie gegenüber der getesteten Performance zu verändern. Bei der Entwicklung eines Backtesting-System ist es verlockend zu wollen, ständig neu zu schreiben von Grund auf neu, da mehr Faktoren als entscheidend für die Beurteilung der Leistung gefunden werden. Kein Backtesting-System ist jemals abgeschlossen und ein Urteil muss an einem Punkt während der Entwicklung gemacht werden, dass genügend Faktoren durch das System erfasst worden sind. Mit diesen Bedenken im Hinterkopf der Backtester wird hier etwas vereinfacht. Bei der Erforschung weiterer Fragen (Portfolio-Optimierung, Risikomanagement, Transaktionskostenabwicklung) wird der Backtester robuster. Arten von Backtesting-Systeme Es gibt in der Regel zwei Arten von Backtesting-System, das von Interesse sein wird. Der erste ist forschungsorientiert. Vor allem in den frühen Stadien, wo viele Strategien getestet werden, um diejenigen für eine ernsthaftere Beurteilung ausgewählt werden. Diese Forschung Backtesting-Systeme werden oft in Python, R oder MatLab geschrieben, wie Geschwindigkeit der Entwicklung ist wichtiger als Geschwindigkeit der Ausführung in dieser Phase. Die zweite Art von Backtesting-System ist ereignisbasiert. Das heißt, er führt den Backtesting-Prozess in einer Ausführungsschleife ähnlich (wenn nicht identisch) mit dem Handelsausführungssystem selbst durch. Es wird realistisch modellieren Marktdaten und der Auftragsabwicklung Prozess, um eine rigorosere Bewertung einer Strategie. Letztere Systeme werden oft in einer leistungsfähigen Sprache wie C oder Java geschrieben, wo die Ausführungsgeschwindigkeit wesentlich ist. Für niedrigere Frequenzstrategien (obwohl noch intraday) ist Python mehr als ausreichend, um in diesem Zusammenhang verwendet zu werden. Objektorientierte Forschung Backtester in Python Die Konzeption und Implementierung einer objektorientierten forschungsbasierten Backtesting-Umgebung wird nun diskutiert. Aus den folgenden Gründen wurde die Objektorientierung als Software-Design-Paradigma gewählt: Die Schnittstellen jeder Komponente können im Voraus festgelegt werden, während die Einbauten jeder Komponente bei fortschreitendem Projekt modifiziert (oder ersetzt werden) Durch die Angabe der Schnittstellen im Voraus ist es möglich Um zu testen, wie sich jede Komponente verhält (über Unit-Testing) Bei der Erweiterung des Systems können neue Komponenten auf oder zusätzlich zu anderen aufgebaut werden, entweder durch Vererbung oder Komposition. In dieser Phase ist der Backtester auf einfache Implementierung und ein angemessenes Maß an Flexibilität ausgelegt , Auf Kosten der wahren Marktgenauigkeit. Insbesondere kann dieser Backtester nur Strategien handhaben, die auf ein einziges Instrument wirken. Später wird der Backtester modifiziert, um Sätze von Instrumenten zu handhaben. Für den ursprünglichen Backtester sind folgende Komponenten erforderlich: Strategie - Eine Strategieklasse erhält ein Pandas DataFrame von Balken. D. h. eine Liste von Open-High-Low-Close-Volume (OHLCV) Datenpunkten bei einer bestimmten Frequenz. Die Strategie wird eine Liste von Signalen erzeugen. Die aus einem Zeitstempel und einem Element aus dem Satz bestehen, das ein langes Halte - oder Kurzsignal angibt. Portfolio - Die Mehrheit der Backtesting-Arbeiten wird in der Portfolio-Klasse auftreten. Er erhält einen Satz von Signalen (wie oben beschrieben) und erzeugt eine Reihe von Positionen, die gegen eine Barkomponente verteilt sind. Die Aufgabe des Portfolio-Objekts besteht darin, eine Eigenkapitalkurve zu erstellen. Grundlegende Transaktionskosten einbeziehen und Trades verfolgen. Performance - Die Performance-Objekt nimmt ein Portfolio und produziert eine Reihe von Statistiken über seine Leistung. Insbesondere wird es Renditecharakteristiken (Sharpe, Sortino und Informationsverhältnisse), Tradeprofit-Metriken und Drawdown-Informationen ausgeben. Was fehlt Wie zu sehen ist, enthält dieser Backtester keinen Verweis auf das Portfoliorisk-Management, die Ausführungsbehandlung (d. H. Keine Limitaufträge) und wird auch keine anspruchsvolle Modellierung der Transaktionskosten liefern. Dies ist nicht viel von einem Problem in diesem Stadium. Damit können wir uns mit dem Prozess der Erstellung eines objektorientierten Backtests und der PandasNumPy-Bibliotheken vertraut machen. In der Zeit wird es verbessert werden. Implementierung Wir werden nun die Implementierungen für jedes Objekt skizzieren. Das Strategie-Objekt muss in diesem Stadium ziemlich generisch sein, da es mit Prognose-, Mittelwert-Reversion-, Impuls - und Volatilitätsstrategien umgehen wird. Die Strategien, die hier betrachtet werden, werden immer zeitreihenbasiert sein, d. h. Eine frühere Voraussetzung für diesen Backtester ist, dass abgeleitete Strategy-Klassen eine Liste von Bars (OHLCV) als Eingabe akzeptieren, anstatt Ticks (Trade-by-Trade-Preise) oder Orderbuch-Daten. So wird die feinste Granularität, die hier betrachtet wird, 1 Sekunde Balken sein. Die Strategieklasse wird auch immer Signalempfehlungen liefern. Dies bedeutet, dass es eine Portfolio-Instanz im Sinne von Longshort oder halten eine Position beraten wird. Diese Flexibilität ermöglicht es uns, mehrere Strategie-Berater zu erstellen, die eine Reihe von Signalen bereitstellen, die eine fortschrittlichere Portfolio-Klasse akzeptieren kann, um die tatsächlich eingegebenen Positionen zu ermitteln. Die Schnittstelle der Klassen wird durch die Verwendung einer abstrakten Basisklassenmethode erzwungen. Eine abstrakte Basisklasse ist ein Objekt, das nicht instanziiert werden kann und somit nur abgeleitete Klassen erzeugt werden können. Der Python-Code ist unten in einer Datei mit dem Namen backtest. py angegeben. Die Strategieklasse erfordert, dass jede Unterklasse die generalsignals-Methode implementiert. Um zu verhindern, dass die Strategieklasse direkt instanziiert wird (da sie abstrakt ist), müssen die ABCMeta - und abstractmethod-Objekte aus dem abc-Modul verwendet werden. Wir setzen eine Eigenschaft der Klasse, Metaklasse genannt, gleich ABCMeta und dekorieren dann die generalsignals-Methode mit dem abstractmethod Dekorator. Während die obige Schnittstelle einfach ist, wird es komplizierter, wenn diese Klasse für jede bestimmte Strategieart vererbt wird. Letztlich ist das Ziel der Strategieklasse in dieser Einstellung, eine Liste von Longshorthold-Signalen für jedes Instrument zu liefern, die an ein Portfolio gesendet werden sollen. Die Portfolio-Klasse ist, wo die Mehrheit der Handelslogik wohnen wird. Für diesen Research Backtester ist das Portfolio zuständig für die Bestimmung der Positionsbestimmung, der Risikoanalyse, des Transaktionskostenmanagements und der Abwicklung der Abwicklung (d. H. Auf dem Markt befindliche, auf dem Markt befindliche Aufträge). Zu einem späteren Zeitpunkt werden diese Aufgaben in separate Komponenten zerlegt. Im Augenblick werden sie zu einer Klasse gerollt. Diese Klasse macht reichlich Gebrauch von Pandas und bietet ein großartiges Beispiel dafür, wo die Bibliothek kann eine riesige Menge an Zeit sparen, vor allem in Bezug auf boilerplate Daten wrangling. Abgesehen davon, ist der Haupttrick mit Pandas und NumPy zu vermeiden Iteration über alle Dataset mit der für d in. Syntax. Dies liegt daran, NumPy (die zugrunde liegenden Pandas) optimiert Looping durch vectorized Operationen. So sehen Sie nur wenige (wenn überhaupt) direkte Iterationen bei der Nutzung von Pandas. Das Ziel der Portfolio-Klasse ist es, letztendlich eine Abfolge von Trades und eine Equity-Kurve zu produzieren, die von der Performance-Klasse analysiert wird. Um dies zu erreichen, muss eine Liste der Handelsempfehlungen aus einem Strategieobjekt vorliegen. Später wird dies eine Gruppe von Strategie-Objekten sein. Die Portfolio-Klasse muss mitgeteilt werden, wie das Kapital für einen bestimmten Satz von Handelssignalen eingesetzt werden soll, wie Transaktionskosten zu behandeln sind und welche Formen von Aufträgen genutzt werden. Das Strategie-Objekt arbeitet auf Datenströmen und es müssen Annahmen getroffen werden, was die bei der Ausführung eines Auftrags erzielten Preise betrifft. Da der hohe Preis einer Bar ist nicht a priori ist es nur möglich, die offenen und engen Preise für den Handel zu verwenden. In Wirklichkeit ist es unmöglich, zu garantieren, dass eine Bestellung zu einem dieser speziellen Preise bei der Verwendung einer Marktordnung gefüllt wird, also wird es im besten Fall eine Annäherung sein. Zusätzlich zu den Annahmen, dass Aufträge gefüllt werden, ignoriert dieser Backtester alle Konzepte der Margin-Brokerage-Einschränkungen und geht davon aus, dass es möglich ist, in jedem Instrument ohne Liquiditätsengpässe frei zu gehen. Dies ist eindeutig eine sehr unrealistische Annahme, ist aber eine, die später entspannt werden kann. Die folgende Auflistung geht weiter backtest. py: In diesem Stadium der Strategie und Portfolio abstrakten Basisklassen wurden eingeführt. Wir sind nun in der Lage, einige konkrete abgeleitete Implementierungen dieser Klassen zu generieren, um eine Arbeitsspielstrategie zu schaffen. Wir beginnen mit der Erzeugung einer Unterklasse der Strategie namens RandomForecastStrategy. Deren einzige Aufgabe darin besteht, zufällig ausgewählte Long-Shorts-Signale zu erzeugen. Während dies eindeutig eine unsinnige Handelsstrategie ist, wird sie unseren Bedarf durch die Demonstration des objektorientierten Backtesting-Frameworks erfüllen. So beginnen wir eine neue Datei namens randomforecast. py. Mit der Auflistung für den zufälligen Prognostiker wie folgt: Nachdem wir ein konkretes Prognosesystem haben, müssen wir eine Implementierung eines Portfolio-Objekts erstellen. Dieses Objekt umfasst die Mehrheit des Backtesting-Codes. Es ist entworfen, um zwei separate DataFrames zu schaffen, von denen der erste ein Positionsrahmen ist, der verwendet wird, um die Quantität jedes Instruments zu speichern, das an einem bestimmten Balken gehalten wird. Das zweite, Portfolio. Tatsächlich enthält den Marktpreis aller Betriebe für jede Bar, sowie eine Tally der Bargeld, unter der Annahme eines Anfangskapitals. Dies schafft letztlich eine Eigenkapitalkurve, um die Performance der Strategie zu bewerten. Das Portfolio-Objekt, während äußerst flexibel in seiner Benutzeroberfläche, erfordert bestimmte Entscheidungen bei der Behandlung von Transaktionskosten, Marktaufträgen etc. In diesem grundlegenden Beispiel habe ich gedacht, dass es möglich sein wird, longshort ein Instrument leicht ohne Einschränkungen oder Marge gehen, Kaufen oder verkaufen direkt am offenen Preis der Bar, null Transaktionskosten (einschließlich Rutschung, Gebühren und Markt Auswirkungen) und haben die Menge der Aktien direkt für den Kauf für jeden Handel angegeben. Hier ist die Fortsetzung der randomforecast. py Auflistung: Dies gibt uns alles, was wir brauchen, um eine Equity-Kurve auf ein solches System zu generieren. Der letzte Schritt ist, sie alle zusammen mit einer Hauptfunktion zu binden: Die Ausgabe des Programms ist wie folgt. Je nach ausgewähltem Datumsbereich und dem verwendeten Zufallssaat unterscheidet sich die von Ihnen folgende Ausgabe: In diesem Fall hat die Strategie Geld verloren, was angesichts der stochastischen Natur des Prognostikers nicht verwunderlich ist. Die nächsten Schritte sind die Schaffung eines Performance-Objekts, das eine Portfolio-Instanz und bietet eine Liste der Performance-Metriken, auf denen eine Entscheidung basieren, um die Strategie zu filtern oder nicht. Darüber hinaus können wir das Portfolio-Objekt so verbessern, dass es einen realistischeren Umgang mit Transaktionskosten (wie zB Interactive Brokers-Provisionen und Slippage) ermöglicht. Wir können auch einfach eine Prognosemaschine in ein Strategie-Objekt einbinden, das (hoffentlich) bessere Ergebnisse liefert. In den folgenden Beiträgen werden wir diese Konzepte vertiefen.
No comments:
Post a Comment