Python für Trading- und Backtest-Aufgaben

      IPython-Notebooks

      Eine recht ansprechende Umgebung zur Präsentation eigener in Python ausformulierter Ideen inkl. strukturierter Begleittexte sind die IPython-Notebooks (bzw. ihre Weiterentwicklung zu Jupyter-Notebooks, die diverse Sprachen auf gut modularisierte Weise unterstützen).

      Als Beispiel gebe ich hier ein IPython-Notebook zur Ansicht im Viewer an.

      Wer eine lokale Installation einer vollständigen IPython-Umgebung besitzt, kann das File auch bearbeiten. Neben dem Download im Viewer (Download-Icon oben rechts) kann der Quelltext auch im Github-Repository Candletalk/Trading-Studies abgerufen werden. Wer dort auch aktiv editieren will, schickt mir einfach seine Email-Adresse und den zugehörigen öffentlichen Git-Schlüssel per PN.

      Für die vollständige Arbeit mit der Versionsverwaltung oberhalb eines simplen Downloads unter Aufhebung der Versionskontrollmöglichkeiten git gibt es neben der reinen Kommandozeile auch diverse GUI-Tools, sowohl als lokal ausführbare Programme, als Explorer-Plugins und browserbasiert.

      Wer kein anderes findet, der ist mit desktop.github.com vielleicht gut bedient.

      Anmerkung: Den letzten Artikel habe ich gelöscht und zu diesem umformuliert, weil gestern bei einem Test das Anhängen des Notebooks als Text-File geklappt hat und es auch im Viewer korrekt dargestellt wurde, heute lehnte der Viewer es aber ab - komisch. Darum habe ich es jetzt nicht als Attachment zum Post ausgeführt sondern remote gehostet bei GitHub, was außerdem den Vorteil einer lückenlosen multiuserfähigen Versionskontrolle bietet.

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „woren“ () aus folgendem Grund: Typo

      Ein Füllhorn voller Anregungen

      Wer noch Anregungen sucht, was man so alles untersuchen könnte und auf welche Weise, findet vielleicht im brandneuen Buch von Sargent und Stachurski: Quantitative Economics with Python gute Anregungen, wobei sich die nicht Trading-spezifischen Dinge vielfach naheliegend für dazu spezifischere Anwendungsfälle modfizieren lassen.

      Diverse Jupyter-Notebooks (Weiter-Entwicklung der IPython-Notebooks zur Nutzung mit diversen weiteren Sprachen über Python hinaus) zum Buch sind dort auch veröffentlicht.

      Lokale Installation der bei Quantopian genutzten Engine

      ist mittels des Links dazu auch möglich. Wer aber nichts so Hypergeheimes hat, dass es mit dem allergrößten Aufwand dem Schutz gegen BIOS-Verschwörung, dem Betriebssystem als der größten Malware und eingebauten geheimen Übertragungskanälen (wie Tempest und manipulierter Hardware) bereits sicher widerstanden hat, kann sich die Mühe der Installation und den Verzicht auf die bereits völlig fertige Umgebung inkl. aller Extras auch sparen.

      Programmieren lernen mit Internet-Kursen

      In der aktuellen c't 2015/18 S. 114 ff.(Magazin für Computertechnik) sind mehrere Artikel zum Thema "Programmieren lernen" erschienen und Online-Plattformen dazu kurz beschrieben worden. Die Artikel habe ich erst heute früh nach dem Schreiben meines letzten Posts gelesen, so dass ich sie hiermit nachreiche.

      Die Online-Versionen der Artikel (bis auf den ersten einführenden) sind leider hirnrissig überteuert. Diese Zeitung, die ich ansonsten durchaus schätze, will allen Ernstes 3,50 € pro Stück dafür haben, wobei die ganze Zeitung nur 4,50 € am Kiosk und noch weniger im Abo kostet.

      Wenigstens kann ich die Links zu den Plattformen angeben: für die mehr kursmäßig ausgerichteten Plattformen und für die mehr Fun-orientierten Plattformen.

      Codecademy wurde dort wie folgt bewertet:
      • kostenlos
      • auf spielerische Weise
      • web-basierte Plattform
      • ideal für Leute mit wenig Zeit
      • sehr kleine Lerneinheiten
      • völlig freier Zeitplan
      • vermittelt Grundlagen-Wissen
      Die Geschmäcker sind verschieden, mit dieser Plattform macht ein Anfänger wohl nicht viel falsch und wenn die Plattform nicht gefällt, ist die nächste nur einen Mausklick entfernt. Python ist als besonders einfache Lernspache und Spache für schnelle Resultate in Wissenschaft, Technik, Finanz und Ad-hoc-Skripte für die kleinen Aufgaben des Alltags so weit verbreitet, dass die Auswahl an Lehrmaterialien riesig ist.

      Ich selber kenne viele Programmiersprachen recht gut und schließe mich den vielen guten Gründen für Python gerne an. Man kommt einfach und schnell zu Resultaten, ohne durch immer neue Spacherweiterungen, die irgendwer irgendwann für einen bestimmten Anwendungsfall eigens dazu erfunden hat, vom Wesentlichen abgelenkt zu werden. Gleichzeitig hat man aber viele sehr leistungsstarke Bibliotheken in einem durchdachten Modulkonzept für nahezu alle Aufgabenfelder fertig zur Nutzung bereit.

      Quantopian - Browser-basierte, Python-programmierbare Plattform für System-Entwicklung und Real-Trading

      Es gibt immer weniger Ausreden, warum man nicht seriös algorithmisch traden sollte. Händisches Rumgemache zeigt in vielen Fällen an, dass man eigentlich nicht nachvollziehbar und wiederverwendbar angeben kann, was man macht. Die Ursache ist nicht etwa ein überdimensionales geistiges Anspruchsniveau solcher Systeme sondern schlichtweg Faulheit, erstens bei der Beschäftigung mit den fachlichen Inhalten (Wie soll dann aber Geld mit einem validierten Edge verdient werden?) und zweitens mit der nicht in die Zeit passenden Ablehnung glasklarer Abbildung der genutzten Algorithmen.

      Die Beschäftigung mit der Sache ist dabei, entgegen vielfach geäußerter anderer Ansichten aus reinen Vorurteilen unkundiger Programmier-Muffel, der viel schwierigere Teil. Für das Programmieren ist Python eine besonders einfache Sprache, da sie von Anfang an mit dem Ziel entworfen wurde, sehr leicht lesbar zu sein, aber in der inhaltlichen Leistungsfähigkeit keinerlei Abstriche zu machen.

      In der Regel haben Python-Programme so wenig rein technisch bedingten Overhead (auch boilerplate code genannt), dass man Algorithmen statt sie nur mit verbalem Pseudocode zu umschreiben, gleich ablauffähig in Python als fertiges Programm schreiben kann.

      Mit Quantopian existiert eine technisch und auch vom Geschäftsmodell her konzeptuell innovative Plattform (Domain gibt es schon seit 2009, seit wann die richtig durchstarten, habe ich nicht verfolgt), auf der Browser-basiert in Python entwickelt, getestet und getradet werden kann.

      Mit 34 auf der Seite vorgestellten Mitarbeitern sieht das ganze auch eher nach handfestem Background aus als nach Möchtegern-Bastelei einiger Nerds auf Abwegen.

      Styleguides zur Programmierung

      Gute Anregungen zu ordentlich geschriebenen Programmen liefern die Googles Styleguides.

      Wenn man nicht gerade in Googles Umfeld programmiert, müssen nicht alle dortigen Ansichten befolgt werden, es kann sogar bewußt das Gegenteil gemacht werden, wenn es denn konsistent geschieht, aber in den vielen Details und der ausführlichen Begründung liefern diese Styleguides ganz bestimmt eine gute Vorlage.

      Der obige Link enthält Links zu Styleguides für ganz verschiedene Sprachen, nicht nur für Python, sondern auch welche für C/C++, die für die Arbeit mit MetaTrader, NinjaTrader, WealthLab und anderen Umgebungen mit C-Abkömmlingen als interne Sprache geeignet sind.

      Alle Autoren von Programmen, egal in welcher Sprache, mögen dadurch nochmals angeregt werden, einige Mühe in die Formatierung ihrer Werke zu investieren, denn Programme werden meist von viel mehr Leuten gelesen als geschrieben und eine exzellente Formatierung erleichtert den Lesefluss und das Verständnis ungemein.

      Echte Könner denken mehr über Programmieren nach als nur einfach spontan zu hackern

      Wer mehr im Sinne des Mottos der Überschrift lesen will, findet dazu etwas in dem von Andreas Braig und Steffen Gemkow dankenswerterweise ins Deutsche übersetzten Klassiker von Andrew Hunt und David Thomas: Der Pragmatische Programmierer, Hanser München Wien 2003, ISBN 978-3-446-22309-7. Grundsätzlich ist dieses Mehr an Vertiefung, welches den wahren Experten und Meister vom stümpernden dauerhaft Laien bleibenden unterscheidet, für jedes Tätigkeitsgebiet entscheidend, nicht nur für die Programmierung.

      Diese sprachübergreifende Literatur-Empfehlung steht in diesem Thread eher als Zusatz der aus dem letzten Post statt durch einen Python-Bezug. Um einen solchen geht es in dem Buch nicht, wie auch sonst nicht um irgendwelche sprachspezifischen Dinge. Da die Resonanz auf Programmier-Themen in diesem Board leider nicht allzu groß ist, wollte ich auf die Erstellung eines neuen Threads zu spezieller IT-Literatur eher verzichten.

      Über das starke Übergewicht hochgradig manueller Arbeitsweisen unter Verzicht auf vertiefende Beschäftigung mit den zugrunde liegenden Daten könnte zumindest zu einigen Teilen auch als denkbarer Ausdruck einer Überbetonung des spielerischen Tasten-Drückens gegenüber systematischem Trading als gezielter Arbeit zum Geld-Erwerb möglicherweise auch einmal nachgedacht werden.

      Quellcode richtig gestalten

      Zur sachgerechten Gestaltung von Quellcode und dem tieferem Verständnis der zugrunde liegenden Ideen, könnten Interessierte vielleicht folgendem Buch einige Anregungen entnehmen: Boswell, Dustin; Foucher, Trevor: The Art of Readable Code, O'Reilly Sebastopol, CA, 2012, ISBN 978-0-596-80229-5. Das Buch legt sich nicht auf eine Programmiersprache fest, sondern liefert allgemein gültige Beispiele in diversen Sprachen.

      Die Beachtung der dargestellten Prinzipien sollte eine etwas objektivere Sicht auf die selbst erstellten Elaborate oder einzuschätzenden Fremdleistungen ermöglichen und das Entstehen unerwünschten Eigenlebens manch peinlicher Gestaltungs-NoNo's gar nicht erst zulassen.

      Anmerkung: der subtil deutbare (und nicht zwingend negativ gemeinte) Begriffsinhalt von "Elaborat" (@ Wiktionary).
      Hier ist das Ergebnis einer kleinen MC-Simulation mit 100K Läufen:

      i.imgur.com/kJ07H.png

      Das Programm tradet mit einem gegebenen Profit-Factor und sieht, wie oft es nach einer gewissen Anzahl von Trades im Gewinn liegt. Also z.B. mit PF 1.1 hat das Programm im nach 100K Versuchen nach 3 Trades in 53.6% der Fälle im Gewinn (mit durchschnittl. Gewinn = durchschnitl. Verlust).
      Wenn man den eigenen PF kennt, und weis, wie oft man in der Woche tradet, kann man ablesen, wie wahrscheinlich es ist, die Woche im Plus zu beenden. Das ist natürlich nur ein grober Anhaltspunkt, da die Annahme mit Gewinn=Verlust sicher nicht immer stimmt, und Normalverteilung usw.usf. - aber ich denke, als Grobdarstellung, was man von einer Strategie erwarten kann, ist es schon brauchbar.

      Interessant ist, wenn man Numpy als normales Array missbraucht, ist der Code um 6 bis 7 Größenordnungen langsamer als normale Python lists. Numpy bringts also nur mit entsprechend vektorisiertem Code - ich vermute, dann wird es im Bereich von kompilierten Sprachen liegen. IronPython war übrigens 10x lahmer als normales Python. Der gleiche Code in C# war 50x schneller, also IronPython es eher brauchbar um C# Code zusammenzustöpseln. Dafür ist es sehr praktisch, man kann sehr schnell auf der Konsole Ergebnisse produzieren.