Saturday, 3 June 2017

Django Handelssystem

Adam Grandt Adam Grandt April 2014 Aktuelle Chief Technology Officer ndash Visuelles Trading Systems Inc. metatrader4, Java, C, Jboss, Java Beans, node. js, php, jquery, Fix, Python Visuelles Trading Ist das amalgamiert 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. März 2013 Dezember 2014 Architect und Lead Developer ndash M1: ZERO LLC linux, MongoDB, Python, turbogears2, scrapy, jquery, Backbone. js, twitter-Bootstrap, Inves tor M1: ZERO entwickelte ich eine Sammlung und Analyse-Tool zu finden und menschlichen 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. Juni 2008 April 2014 Director of Technology ndash GallantVPS Inc postgresdb, Linux, Wein, Xvnc, Python, django, php, html5, Leinwand, PrototypeJS, apache2, iptables gründete ich GallantVPS mit einem Partner im Jahr 2008. Wir haben einen besonderen Bedarf in der Forex anerkannt 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 Entwicklungsteams über zwei Jahre zu beaufsichtigen 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 Handelsplattformen und den algorithmischen Handel bietet auf einer Wolke Linux-Hosting-Ressourcen WEIN verwenden, wenn notwendig, ausgesetzt web Benutzer obwohl ein HTML5-Proxy-VNC-Client auf Xvnc, Architekt verbindet und developerForex Handels Tagebuch 1 führen - ich erwähnte, die zuvor in der QuantStart automatisierten Forex Trading mit dem OANDA API: 2014 in Review-Artikel, dass ich einige von 2015 schriftlich über automatisierte Devisenhandel verbringen . Angesichts der Tatsache, dass ich selbst in der Regel Forschung in Aktien-und Futures-Märkte, Ich dachte, es wäre lustig (und pädagogisch), über meine Erfahrungen mit dem Eintritt in den Forex-Markt im Stil eines Tagebuchs zu schreiben. Jeder Tagebucheintrag wird versuchen, auf all jenen aufzubauen, sollte aber auch relativ eigenständig sein. In diesem ersten Eintrag des Tagebuchs Ill beschreiben, wie die Einrichtung eines neuen Praxis-Brokerage-Konto mit OANDA sowie wie eine grundlegende multithreaded ereignisgesteuerte Trading-Engine, die automatisch ausgeführt werden kann, sowohl in einer Praxis und Live-Einstellung zu schaffen. Letztes Jahr verbrachten wir viel Zeit mit Blick auf den ereignisgesteuerten Backtester. Vor allem für Aktien und ETFs. Die, die ich hier unten ist auf Forex ausgerichtet und kann sowohl für den Papierhandel oder Live-Handel verwendet werden. Ich habe alle folgenden Anweisungen für Ubuntu 14.04, aber sie sollten leicht zu Windows oder Mac OS X, mit einer Python-Distribution wie Anaconda zu übersetzen. Die einzige zusätzliche Bibliothek, die für die Python-Handelsmaschine verwendet wird, ist die Anforderungsbibliothek, die für die HTTP-Kommunikation zur OANDA-API erforderlich ist. Da dies der erste Posten direkt über den Devisenhandel ist und der nachfolgend dargestellte Kodex direkt an ein Live-Trading-Umfeld angepasst werden kann, möchte ich folgende Disclaimer vorstellen: Disclaimer: Der Handel mit Devisen an Margin trägt ein hohes Risiko, Und möglicherweise nicht für alle Anleger geeignet. Die Wertentwicklung in der Vergangenheit ist kein Hinweis auf zukünftige Ergebnisse. Der hohe Grad der Hebelwirkung kann sowohl gegen Sie als auch für Sie arbeiten. Vor der Entscheidung, in Devisen zu investieren, sollten Sie sorgfältig überlegen Sie Ihre Anlageziele, Erfahrung und Risikobereitschaft. Die Möglichkeit besteht, dass Sie einen Verlust von einigen oder allen Ihrer anfänglichen Investition zu erhalten und daher sollten Sie nicht Geld investieren, die Sie nicht leisten können, zu verlieren. Sie sollten sich bewusst sein, alle Risiken im Zusammenhang mit Devisenhandel und suchen Rat von einem unabhängigen Finanzberater, wenn Sie irgendwelche Zweifel haben. Diese Software wird bereitgestellt, wie es ist, und alle ausgedrückten oder implizierten Garantien, einschließlich, aber nicht beschränkt auf die implizierten Garantien der Marktgängigkeit und Eignung für einen bestimmten Zweck werden ausgeschlossen. In keinem Fall haften die Regenten oder Mitwirkenden für direkte, indirekte, zufällige, besondere, vorbildliche oder Folgeschäden (einschließlich, aber nicht beschränkt auf die Beschaffung von Ersatzgütern oder Dienstleistungsverlusten, Daten oder Gewinnen oder Betriebsunterbrechungen) ), Die in irgendeinem Fall aus der Nutzung dieser Software entstanden sind, auch wenn auf die Möglichkeit eines solchen Schadens hingewiesen wird, auf irgendeine Haftungslehre, sei es auf vertraglicher, strikter Haftung oder unerlaubter Handlung (einschließlich Fahrlässigkeit oder anderweitig). Einrichten eines Kontos mit OANDA Die erste Frage, die in den Sinn kommt, ist Warum wählen Sie OANDA. Einfach gesagt, nach ein wenig Googeln herum für Forex Broker, die APIs hatte, sah ich, dass OANDA hatte vor kurzem eine richtige REST-API, die leicht mit fast jeder Sprache in einer äußerst direkten Weise kommuniziert werden konnte. Nach dem Lesen durch ihre Entwickler-API-Dokumentation. Ich beschloss, ihnen einen Versuch, zumindest mit einem Praxis-Konto. Um klar zu sein - ich habe keine vorherige oder bestehende Beziehung mit OANDA und bin nur die Bereitstellung dieser Empfehlung basierend auf meiner begrenzten Erfahrung herumspielen mit ihrer Praxis-API und einige kurze Nutzung (für Marktdaten-Download), während bei einem Fonds zuvor beschäftigt. Wenn jemand auf irgendwelche anderen Forex-Broker gekommen ist, die auch eine ähnlich moderne API dann Id sind glücklich, ihnen einen Blick auch zu geben. Vor der Nutzung der API muss man sich für ein Praxiskonto anmelden. Gehen Sie hierzu zum Anmelde-Link. Sie sehen dann den folgenden Bildschirm: Sie können sich dann mit Ihren Anmeldeinformationen anmelden. Achten Sie darauf, die Registerkarte fxTradePractice aus dem Anmeldebildschirm auszuwählen: Einmal müssen Sie eine Notiz über Ihre Kontonummer machen. Er wird unterhalb des schwarzen My Funds Headers neben Primary aufgelistet. Mine ist eine 7-stellige Zahl. Darüber hinaus müssen Sie auch ein persönliches API-Token generieren. Dazu klicken Sie unterhalb der Registerkarte Andere Aktionen links unten auf API-Zugriff verwalten: In diesem Stadium können Sie ein API-Token generieren. Sie benötigen den Schlüssel für Gebrauch später, also stellen Sie sicher, ihn aufzuschreiben auch. Sie werden nun die FXTrade Practice-Anwendung starten, die es uns ermöglicht, die ausgeführten Aufträge und unseren (Papier-) Gewinn amp loss zu sehen. Wenn Sie ein Ubuntu-System ausführen, müssen Sie eine etwas andere Java-Version installieren. Insbesondere die Oracle-Version von Java 8. Wenn Sie dies nicht tun, dann wird die Praxis-Simulator nicht aus dem Browser laden. Ich lief diese Befehle auf meinem System: Sie werden nun in der Lage, die Praxis Handelsumfeld zu starten. Kehren Sie zum OANDA Dashboard zurück und klicken Sie auf den grün markierten Link FXTrade Practice starten. Es wird ein Java-Dialog fragen, ob Sie es ausführen. Klicken Sie auf Ausführen, und das fxTrade-Übungsprogramm wird geladen. Mine fiel auf ein 15-minütiges Candle Chart von EURUSD mit dem Quote Panel auf der linken Seite: An diesem Punkt sind wir bereit, mit dem Entwerfen und Kodieren unseres automatisierten Devisenhandelssystems gegen die OANDA API zu beginnen. Überblick über die Trading-Architektur Wenn Sie die Event-getriebene Backtester-Serie für Aktien und ETFs, die ich im letzten Jahr erstellt habe, verfolgten, werden Sie sich bewusst sein, wie ein solches ereignisgesteuertes Handelssystem funktioniert. Für diejenigen unter Ihnen, die neu für ereignisgesteuerte Software sind. Ich würde stark vorschlagen, durch den Artikel zu lesen, um einen Einblick zu erhalten, wie sie funktionieren. Im Wesentlichen wird das gesamte Programm in einer infinte while-Schleife ausgeführt, die nur abschließt, wenn das Handelssystem abgeschaltet wird. Der zentrale Kommunikationsmechanismus des Programms erfolgt über eine Warteschlange, die Ereignisse enthält. Die Warteschlange wird ständig abgefragt, um nach neuen Ereignissen zu suchen. Sobald ein Ereignis aus der Warteschlange genommen wurde, muss es durch eine entsprechende Komponente des Programms behandelt werden. Daher könnte ein Marktdaten-Feed TickEvent s erzeugen, die bei Eintreffen eines neuen Marktpreises auf die Warteschlange gestellt werden. Ein signalgenerierendes Strategieobjekt kann OrderEvent-S erzeugen, die an eine Brokerage gesendet werden sollen. Die Nützlichkeit eines solchen Systems wird durch die Tatsache gegeben, dass es nicht wichtig ist, welche Reihenfolge oder Arten von Ereignissen auf der Warteschlange platziert werden, da sie immer korrekt von der richtigen Komponente innerhalb des Programms behandelt werden. Darüber hinaus können verschiedene Teile des Programms in separaten Threads ausgeführt werden. Was bedeutet, dass es nie irgendwelche Warten auf eine bestimmte Komponente vor der Verarbeitung irgendeines anderen. Dies ist äußerst nützlich in algorithmischen Handelssituationen, in denen Marktdaten-Feed-Handler und Strategie-Signalgeneratoren sehr unterschiedliche Leistungsmerkmale aufweisen. Die Haupthandelsschleife wird durch den folgenden Python-Pseudocode gegeben: Wie oben erwähnt, läuft der Code in einer Endlosschleife. Zuerst wird die Warteschlange abgefragt, um ein neues Ereignis abzurufen. Wenn die Warteschlange leer ist, wird die Schleife nach einer kurzen Schlafperiode, die als Herzschlag bezeichnet wird, einfach neu gestartet. Wenn ein Ereignis gefunden wird, wird sein Typ bewertet und dann wird das relevante Modul (entweder die Strategie oder der Ausführungsbehandler) aufgerufen, um das Ereignis zu behandeln und möglicherweise neue zu generieren, die wieder in die Warteschlange zurückkehren. Die grundlegenden Bestandteile, die wir für unser Handelssystem verursachen, schließen die folgenden ein: Streaming Price Handler - Dies hält eine langfristige Verbindung offen für OANDAs-Server und sendet Tick-Daten (dh Bidask) über die Verbindung für alle Instrumente, die interessiert waren. Strategie-Signal-Generator - Dies wird eine Sequenz von Tick-Ereignissen und verwenden sie zur Erzeugung von Handelsaufträgen, die durch die Ausführung Handler ausgeführt werden. Execution Handler - nimmt eine Reihe von Order-Events auf und führt sie dann blind mit OANDA aus. Ereignisse - Diese Objekte stellen die Nachrichten dar, die auf der Ereigniswarteschlange weitergegeben werden. Für diese Implementierung benötigen wir nur zwei, nämlich das TickEvent und das OrderEvent. Haupteingangspunkt - Der Haupteintragspunkt enthält auch die Handelsschleife, die kontinuierlich die Nachrichtenwarteschlange abfragt und Nachrichten an die richtige Komponente sendet. Dies wird häufig als Ereignis - oder Ereignishandler bezeichnet. Wir werden nun die Implementierung des Codes im Detail diskutieren. Am unteren Rand des Artikels ist die vollständige Auflistung aller Quellcode-Dateien. Wenn Sie sie im selben Verzeichnis platzieren und python trading. py ausführen, beginnen Sie mit der Generierung von Aufträgen, vorausgesetzt, Sie haben Ihre Kontonummer und Ihr Authentifizierungstoken von OANDA ausgefüllt. Python-Implementierung Es ist schlecht, Kennwörter oder Authentifizierungsschlüssel in einer Codebasis zu speichern, da Sie nie vorhersagen können, wer schließlich Zugriff auf ein Projekt erlaubt. In einem Produktionssystem würden wir diese Credentials als Umgebungsvariablen mit dem System speichern und diese Envvars dann jedes Mal abfragen, wenn der Code redeployed ist. Dadurch wird sichergestellt, dass Kennwörter und Auth-Token niemals in einem Versionskontrollsystem gespeichert werden. Da wir aber nur daran interessiert sind, ein Spielzeug-Handelssystem zu entwickeln und nicht mit Produktionsdetails in diesem Artikel zu tun haben, werden wir diese Autotoken stattdessen in eine Einstellungsdatei trennen. In der folgenden settings. py-Konfigurationsdatei haben wir ein Wörterbuch namens ENVIRONMENTS, das die API-Endpunkte für die OANDA-Streaming-API und die Trading-API speichert. Jedes Unterwörterbuch enthält drei separate API-Endpunkte: real. Praxis und Sandkasten. Die Sandbox-API ist rein zum Testen von Code und zur Überprüfung, dass es keine Fehler oder Bugs gibt. Es verfügt nicht über die Uptime-Garantien der realen oder Praxis-APIs. Die Praxis API, im Wesentlichen bietet die Fähigkeit, Papierhandel. Das heißt, es bietet alle Features der realen API auf einem simulierten Praxiskonto. Die wirkliche API ist nur, dass - es ist Live-Handel Wenn Sie diesen Endpunkt in Ihrem Code verwenden, wird es gegen Ihren Live-Kontostand zu handeln. SEHR EXTREM SORGFÄLTIG WICHTIG: Beim Trading gegen die Praxis API daran erinnern, dass eine wichtige Transaktion Kosten, dass der Auswirkungen auf den Markt. Wird nicht berücksichtigt. Da keine Trades tatsächlich in die Umwelt gelegt werden, müssen diese Kosten anderweitig mit einem Market-Impact-Modell verrechnet werden, wenn Sie die Performance realistisch beurteilen möchten. Im Folgenden verwenden wir das in der DOMAIN-Einstellung angegebene Praxiskonto. Wir benötigen zwei separate Wörterbücher für die Domänen, jeweils eine für die Streaming - und Handels-API-Komponenten. Schließlich haben wir die ACCESSTOKEN und ACCOUNTID. Ive gefüllt die beiden unten mit Dummy-IDs, so müssen Sie Ihre eigenen nutzen, die von der OANDA-Konto-Seite zugegriffen werden kann: Der nächste Schritt ist es, die Ereignisse, die die Warteschlange verwendet, um zu helfen, die alle einzelnen Komponenten kommunizieren zu definieren. Wir brauchen zwei: TickEvent und OrderEvent. Der erste speichert Informationen über Instrumentenmarktdaten wie die (beste) Bidask und die Handelszeit. Der zweite wird verwendet, um Aufträge an den Ausführungsbearbeiter zu übermitteln und enthält somit das Instrument, die Anzahl der zu handelnden Einheiten, die Auftragsart (Markt oder Grenze) und die Seite (d. H. Kauf und Verkauf). Um unseren Event-Code zukunftssicher zu machen, werden wir eine Basisklasse mit dem Namen Event erstellen und alle Ereignisse von diesem erben. Der Code wird unten in events. py zur Verfügung gestellt: Die nächste Klasse, die wir erstellen werden, wird die Handelsstrategie behandeln. In dieser Demo werden wir eine ziemlich unsinnige Strategie schaffen, die einfach alle Marktticks empfängt und bei jeder 5. Tick zufällig 10.000 Einheiten EURUSD kauft oder verkauft. Klar ist dies eine lächerliche Strategie Aber es ist fantastisch für Testzwecke, weil es einfach zu Code und zu verstehen ist. In zukünftigen Tagebucheinträgen werden wir dies durch etwas spannenderes ersetzen, das (hoffentlich) einen Gewinn macht. Die Strategie. py-Datei finden Sie weiter unten. Lässt Arbeit durch sie und sehen, was los ist. Zuerst importieren wir die zufällige Bibliothek und das OrderEvent-Objekt aus events. py. Wir benötigen die gelegentliche lib, um eine gelegentliche Kauf - oder Verkaufsorder zu wählen. Wir brauchen OrderEvent, da das Strategieobjekt Aufträge an die Ereigniswarteschlange sendet, die später von der Ausführungsbehandlungsroutine ausgeführt wird. Die TestRandomStrategy-Klasse übernimmt das Gerät (in diesem Fall EURUSD), die Anzahl der Einheiten und die Ereigniswarteschlange als Parametermenge. Es erstellt dann einen Ticks-Zähler, der verwendet wird, um zu sagen, wie viele TickEvent-Instanzen es gesehen hat. Der Großteil der Arbeit erfolgt in der calculatesignals-Methode, die einfach ein Ereignis nimmt, bestimmt, ob es sich um ein TickEvent handelt (andernfalls ignorieren) und den Tickzähler erhöht. Dann prüft es, ob die Zählung durch 5 teilbar ist und dann nach dem Zufallsprinzip mit einer Marktordnung die angegebene Anzahl von Einheiten kauft oder verkauft. Seine sicherlich nicht die weltweit größte Handelsstrategie, aber es wird mehr als geeignet für unsere OANDA Brokerage API Testzwecke Die nächste Komponente ist die Ausführung Handler. Diese Klasse hat die Aufgabe, auf OrderEvent-Instanzen zu reagieren und Anfragen an den Broker (in diesem Fall OANDA) stumm zu stellen. Das heißt, es gibt keine Risikomanagement - oder Potfolio-Konstruktionsüberlagerung. Der Ausführungsbehandler führt einfach eine beliebige Reihenfolge aus. Wir müssen alle Authentifizierungsinformationen an die Execution-Klasse übergeben, einschließlich der Domäne (Praxis, real oder Sandbox), des Zugriffstokens und der Konto-ID. Anschließend erstellen wir eine sichere Verbindung mit httplib. Einer der Pythons in Bibliotheken gebaut. Der Großteil der Arbeit erfolgt in executeorder. Die Methode erfordert ein Ereignis als Parameter. Es konstruiert dann zwei Wörterbücher - die Header und die params. Diese Wörterbücher werden dann korrekt codiert (teilweise durch urllib eine andere Python-Bibliothek), die als HTTP-POST-Anfrage an OANDAs API gesendet werden soll. Wir übergeben die Content-Type - und Authorization-Header-Parameter, zu denen unsere Authentifizierungsinformationen gehören. Darüber hinaus codieren wir die Parameter, die das Gerät (EURUSD), Einheiten, Auftragsart und Seite (buysell) gehören. Schließlich machen wir die Anfrage und speichern die Antwort: Die komplexeste Komponente des Handelssystems ist das StreamingForexPrices-Objekt, das die Marktpreisaktualisierungen von OANDA übernimmt. Es gibt zwei Methoden: connecttostream und streamtoqueue. Die erste Methode verwendet die Python-Anforderungsbibliothek, um eine Verbindung zu einem Streaming-Socket mit den entsprechenden Headern und Parametern herzustellen. Zu den Parametern gehören die Konto-ID und die notwendige Instrumentenliste, die für Updates zu hören ist (in diesem Fall nur EURUSD). Beachten Sie die folgende Zeile: Damit wird die Verbindung gestreamt und so lange offen gehalten. Die zweite Methode, streamtoqueue. Tatsächlich versucht, eine Verbindung zum Stream herzustellen. Wenn die Antwort nicht erfolgreich ist (d. h. der Antwortcode ist nicht HTTP 200), dann kehren wir einfach zurück und beenden. Wenn es erfolgreich ist, versuchen wir, das in ein Python-Wörterbuch zurückgegebene JSON-Paket zu laden. Schließlich konvertieren wir das Python-Wörterbuch mit dem Instrument, dem Bidask und dem Zeitstempel in ein TickEvent, das an die Ereignis-Warteschlange gesendet wird: Wir haben jetzt alle wichtigen Komponenten. Der letzte Schritt ist, alles, was wir bisher geschrieben haben, in ein Hauptprogramm aufzunehmen. Das Ziel dieser Datei, bekannt als trading. py. Ist es, zwei separate Threads zu erstellen. Von denen einer den Preispreis führt und der andere, der den Handelsbehandler ausführt. Warum brauchen wir zwei separate Threads Put einfach, führen wir zwei separate Stücke von Code, die beide kontinuierlich ausgeführt werden. Wenn wir ein Programm ohne Threads erstellen sollten, würde der Streaming-Socket, der für die Preisaktualisierungen verwendet wird, niemals den Hauptcodepfad wieder freigeben und daher würden wir niemals irgendeinen Handel durchführen. Ähnlich, wenn wir lief die Handelsschleife (siehe unten), würden wir eigentlich nie wieder die Flow-Pfad zu den Preis-Streaming-Sockel. Daher benötigen wir mehrere Threads, eine für jede Komponente, so dass sie unabhängig ausgeführt werden können. Sie kommunizieren miteinander über die Warteschlange. Lets untersuchen dies ein wenig weiter. Wir erstellen zwei separate Threads mit den folgenden Zeilen: Wir übergeben die Funktion oder den Methodennamen an das Schlüsselwort-Argument des Ziels und übergeben dann eine iterable (wie eine Liste oder ein Tupel) an das Argument args-Schlüsselwort, das diese Argumente an die eigentliche Methodenfunktion weitergibt . Schließlich starten wir beide Threads mit den folgenden Zeilen: So sind wir in der Lage, zwei, effektiv unendlich Schleifen, Code-Segmente unabhängig, die beide über die Ereignis-Warteschlange zu kommunizieren laufen. Beachten Sie, dass die Python-Threading-Bibliothek aufgrund der CPython-Implementierung von Python und des Global Interpreter Lock (GIL) keine echte Multicode-Multithread-Umgebung erzeugt. Wenn Sie mehr über Multithreading auf Python lesen möchten, werfen Sie einen Blick auf diesen Artikel. Lets untersuchen den Rest des Codes im Detail. Zuerst importieren wir alle notwendigen Bibliotheken einschließlich Warteschlange. Gewinde und Zeit. Wir importieren dann alle oben genannten Code-Dateien. Ich persönlich bevorzuge die Aktivierung von Konfigurationseinstellungen, die eine Gewohnheit ist, die ich von der Arbeit mit Django abgeholt habe. Danach definieren wir die Trade-Funktion, die im Python-Pseudocode oben erklärt wurde. Eine unendliche while-Schleife wird durchgeführt (während True:), die kontinuierlich aus der Ereignis-Warteschlange abfragt und nur die Schleife überspringt, falls sie leer ist. Wenn ein Ereignis gefunden wird, ist es entweder ein TickEvent oder ein OrderEvent und dann wird die entsprechende Komponente aufgerufen, um es auszuführen. In diesem Fall handelt es sich entweder um eine Strategie - oder eine Ausführungsbehandlungsroutine. Die Schleife schläft dann einfach für Herzschlag-Sekunden (in diesem Fall 0,5 Sekunden) und fährt fort. Schließlich definieren wir den Haupteintrittspunkt des Codes in der Hauptfunktion. Es ist gut kommentiert unten, aber ich werde hier zusammenfassen. Im Wesentlichen instanziieren wir die Ereigniswarteschlange und definieren die Instrumenteneinheiten. Danach erstellen wir die StreamingForexPrices-Preis-Streaming-Klasse und anschließend die Execution-Execution-Prozedur. Beide erhalten die erforderlichen Authentifizierungsdaten, die von OANDA beim Erstellen eines Kontos angegeben werden. Dann erstellen wir die TestRandomStrategy-Instanz. Schließlich definieren wir die beiden Threads und starten sie dann: Um den Code auszuführen, müssen Sie einfach alle Dateien im selben Verzeichnis platzieren und am Terminal folgendes anrufen: Beachten Sie, dass zum Stoppen des Codes in diesem Stadium ein schwerer Abbruch der Python-Prozess. Über Strg-Z oder Äquivalent Ive nicht ein zusätzlicher Thread zu behandeln, die Suche nach der sys. exit (), die erforderlich wäre, um den Code sicher zu stoppen. Eine Möglichkeit, den Code auf einer UbuntuLinux-Maschine zu stoppen, besteht darin, Folgendes einzugeben: Anschließend übergeben Sie die Ausgabe dieser (eine Prozessnummer) in die folgende: Wo PROCESSID durch die Ausgabe von pgrep ersetzt werden muss. Beachten Sie, dass dies nicht besonders gut ist In späteren Artikeln werden wir einen anspruchsvolleren Stopp-Mechanismus erstellen, der von der Ubuntus-Prozessüberwachung Gebrauch macht, damit das Handelssystem 247 läuft. Die Ausgabe nach 30 Sekunden oder so, abhängig von der Zeit von Tage im Verhältnis zu den Haupthandelstunden für EURUSD für den obigen Code ist unten angegeben: Die ersten fünf Zeilen zeigen die von OANDA mit Bidask-Preisen zurückgegebenen JSON-Tickdaten. Anschließend können Sie die Ausgabe der Ausführungsreihenfolge sowie die von OANDA zurückgegebene JSON-Antwort sehen, die die Eröffnung eines Kaufhandels für 10.000 Einheiten EURUSD und den erzielten Preis bestätigt. Dies wird unbegrenzt weiterlaufen, bis Sie das Programm mit einem Ctrl-Z-Befehl oder ähnlichem beenden. Whats Next In späteren Artikeln werden wir einige dringend benötigte Verbesserungen durchführen, darunter: Reale Strategien - Richtige Forex-Strategien, die rentable Signale generieren. Produktionsinfrastruktur - Remote-Server-Implementierung und 247 überwachtes Handelssystem mit Stopstart-Fähigkeit. Portfolio - und Risikomanagement - Portfolio - und Risiko-Overlays für alle vorgeschlagenen Aufträge aus der Strategie. Mehrere Strategien - Aufbau eines Portfolio von Strategien, die in die Risikomanagement-Overlay integrieren Wie bei den equities event-driven Backtester, müssen wir auch ein Forex Backtesting-Modul zu erstellen. Das wird uns eine schnelle Forschung ermöglichen und es einfacher machen, Strategien einzusetzen. Settings. py (vergessen Sie nicht, ACCOUNTID und ACCESSTOKEN zu ändern): Besserer System-Trader Tomas Nesnidal ist ein Vollzeit-Händler seit über 11 Jahren, spezialisiert auf automatisierte algorithmische Handelsstrategien. Er hat Erfahrung mit einer Reihe von Handelsstilen, einschließlich Option Trading, Spread Trading, statistische Arbitrage und Markt Einbauten, aber in dieser Episode wurden diskutieren eine seiner anderen Spezialitäten, Break-Trading. In unserem Chat diskutieren wir die wichtigsten Komponenten einer Breakout-Strategie und wie sie kombiniert werden, um profitable Handelsstrategien zu schaffen. Wir diskutieren auch die Verschlechterung von Strategien im Laufe der Zeit, wie man neues Leben in alte Strategien und warum kreatives Denken ist ein so wichtiger Aspekt des erfolgreichen Handels. In dieser Episode diskutieren wir Die Vorteile der Handel Breakout-Strategien und was macht eine gute Breakout-Strategie Wie man profitable Breakout-Strategien mit vier Schlüsselbestandteilen bauen Die Verschlechterung der Strategien im Laufe der Zeit und wie man neues Leben in alte Strategien hinzufügen Mit Filtern zur Verbesserung der Handelsergebnisse Anpassung Strategien auf Marktbedingungen Die besten Zeitrahmen und Märkte für breakout Strategien Sie können Tomas auf seiner Website systemsontheroad folgen. Lesen Sie auch den Abschnitt unten, wo Sie eine kostenlose Kopie der Breakout Strategy Toolkit, die eine Breakout-Strategien enthält ebook plus Code für 2 Breakout-Strategien, eine, die Tomas hat sich exklusiv für Better System Trader Tomas geschrieben schrieb auch eine große Gastpost auf Breakout-Strategien für systemtradersuccess Empfohlene Bücher: nutzen Sie die Leistung von Breakout-Strategien mit diesem kostenlosen Breakout Strategie Toolkit Breakout Trading kann ein unglaublich leistungsfähiges Konzept Händler verwenden sein in den Märkten eine Kante zu bekommen und den Ausbruch Handel Diskussion in dieser Episode zu ergänzen, Tomas hat freundlich Ein kostenloses Breakout-Strategie-Toolkit exklusiv für Better System Trader. Dieses Toolkit gibt Ihnen alles, was Sie für den Einstieg in den Breakout Trading benötigen. Dazu gehören ein Lehrbuch, ein Cheatsheet-PLUS-Code für 2 Strategien, die in Tradestation oder Multicharts verwendet werden können. Werfen Sie einen Blick auf die hypothetischen Equity-Kurven dieser beiden Strategien, dann klicken Sie auf den blauen Download-Button, um Ihre kostenlose Kopie jetzt: Top-Tipps aus dieser Episode Creativity 8211 Kreativität war etwas, dass Tomas kam immer wieder in unserem Chat, Hervorhebung, wie wichtig es war Zu kommen mit einzigartigen Ideen zu testen. In der Tat, sagte er 8220die wichtigsten Zutat zum Handel ist Kreativität8221 und dass 8220Kreativität hilft Ihnen, in der game8221 bleiben, was eine sehr ähnliche Botschaft, was wir von Dr Brett Steenbarger in Episode 25 zu hören war. Toms Rat war ständig darüber nachzudenken, was neue Aspekte Können wir in ein Trading-Konzept zu machen, um es einzigartiger, versuchen, Ihre eigenen Twist hinzufügen, kommen mit verrückten Ideen und testen Sie sie. Wie wäre es mit einer weiteren Runde mit Tomas 8211 diesmal auf der technischen Seite, z. B. 1. Welche Technologie (Software) verwendet er Warum 2. Welche Technologie (Hardware) verwendet er Warum 3. Woher bekommt er Daten von 4. Wie wird er aktualisiert 5. Wie stellt er sicher, dass es sauber ist 6. Wie funktioniert Er befasst sich mit Datenproblemen 8211 fehlende Daten, schlechte Daten etc 7. Wie implementiert er verschiedene Strategien 8211 zB Verwendet er mehrere Programme 8211 pro Strategie, oder hat er Programme, die mehrere Strategien ausführen können oder hat er eine Mischung aus den beiden 8. Welche Probleme hatte er zu Gesicht und zu lösen, die möglicherweise nicht offensichtlich für diejenigen, die nicht haben Versucht automatisierten algorithmischen Handel 9. Er scheinbar arbeitet auf Remote-Servern 8211, wie er mit Lag beschäftigt, wenn er nicht blistering Verbindung Geschwindigkeiten Wie viel Arbeit macht er lokal (dh auf seinem Laptop vs Server) 10. Vielleicht etwas auf seinem Workflow 8211 Wie er Systeme von der ursprünglichen Idee über die Entwicklung bis hin zur Erprobung von Prod. 11 ansetzt. Könnte er vorschlagen, eine geeignete Reihe von Schritten, wie man in die Automatisierung Systeme 8211 vielleicht aus einem Anfänger Augen, dann aus einem intermediate8217s Augen und schließlich, was er sieht Chancen ergeben, dass he8217s in Erwägung ziehen eine Schaukel an. 12. Wie findet er Coder? 13. Welche Probleme hat er bei der Arbeit mit Codierern gehabt 14. Wie am besten diese zu lösen. 15. Welche unangenehmen Überraschungen hat er mit automatisierten Systemen erfahren, die sich auf unerwartete Weise verhalten, z. B. Kaufe in zu viele positionen auf tankfahrten mkts ist eine möglichkeit. 16. Wie engagiert er sich mit Brokern in Bezug auf die Einreichung von Aufträgen 17. Wie viele Broker hat er 18. Wie viele Broker sollte man haben 19. Wenn gt Broker, wie er sich mit der Integration mit diesen Brokern beschäftigen 20. Warum drei Servern 21. Tun die Server 8211 kommunizieren, wenn man unten ist, tut einer der anderen Abholung 22. Was ist die genetische Programmierung I für ein interessiert wäre, dass ist eine Menge von sicherlich wichtige Fragen. Ich werde darüber nachdenken, wie man diese Themen in Zukunft auch berühren kann. Entweder hier auf BST oder auf meinem eigenen Blog oder beides. Richtig wissen, dass ich ein bisschen damit beschäftigt bin, meinen Hedgefonds zu starten, aber ich werde Ihre Fragen zu meinem Notizblock kopieren und sie im Auge behalten. Hallo Jungs, großes Interview Ich habe Variationen von Tom8217s BOSS Strategie auf DAX geprüft (das ist, wo ich die meisten meiner anfänglichen Forschung tue). Ich finde zwei Dinge: 8211 Systeme, die gut funktionieren in 30 min Zeitrahmen handelt häufig genug genug, um meine Robustheit Kriterien 8211 Es scheint gut zu funktionieren in 15 min Zeitrahmen, wenn einige zusätzliche Filter angewendet werden Frage: 8211 Wie würden Sie erklären, die zugrunde liegenden Prämisse hinter BOSS Für mich sieht es wie: 1) In uptrending Markt 2) Finden Pullback 3) Set Stop-Reihenfolge, die aus Trend wieder aufgenommen wird Ist es etwas entlang dieser Zeilen, die eine sehr korrekte Interpretation Beobachtung ist. Grundsätzlich zeigen meine Ergebnisse, dass Breakout nach jeder Art von Pullback (ich nenne sie 8220corrections8221) eines der besten Breakout-Signale sind. Viel Glück mit Ihrem Trading, Tomas Trading Aktien, Optionen, Futures und Forex bedeutet erhebliche Verlustrisiko und ist nicht für jedermann geeignet. Die Wertentwicklung in der Vergangenheit ist nicht unbedingt ein Indiz für zukünftige Ergebnisse.


No comments:

Post a Comment