RR Trading Software


Tradesignal Expertise seit 2003

Dienstleistungen für Tradesignal Online

Tradesignal Toolboxes

Handelssysteme für Dax Future und Bund Future

Projekt Organisation Struktur und Ordnung für Ihre
Equilla Projekte

Pakete und Ordner

Funktionsbibliotheken

Namen und Kürzel

Die Artikelserie gibt meine Erfahrungen in der Abwicklung von Softwareprojekten in Tradesignal wieder. Zahlreiche Handelssysteme, Indikatoren, Chart Tools und .Net Anbindungen sind in den letzten Jahren entstanden. In dieser Zeit haben sich einige Workflows und viele organisatorische Regeln herausgebildet, die mir beim Programmieren in Tradesignal hilfreiche Unterstützung sind. Die Serie beschreibt die drei Kernthemen, Organisation der Dokumente und Codes in Paketen und Ordnern, Namensgebung für Codes, Projekte und Dokumente, sowie der Anwendung von Funktionsbibliotheken für Equilla Codes.

Namensgebung in Projekten

Warum sind die Namen von Indikatoren, Handelssystemen etwas, über das es sich lohnt nachzudenken? Weil Sie wahrscheinlich im Laufe von Monaten dutzende davon schreiben, verändern, erweitern und wieder verwerfen werden. Viele Programme und Projektstände zu haben, führt unweigerlich zu einer längeren Einarbeitungszeit in ältere Projekte, führt zu Verwirrungen welches Programm zu welchem Projekt, Handekssystem Paket oder Versionsstand gehört. Das alles kostet Zeit und raubt Nerven. Deshalb ist es wichtig, sich über jeden kreativen Schritt beim Entwickeln von Programmen in TradesignalOnline Gedanken zu machen. Die Zeit, die Sie dafür verwenden, sparen Sie später dutzendfach ein.

Sinnvolle Namen finden

Bis auf wenige Einschränkungen können Sie die Namen Ihrer Indikatoren, Scanner und Handelssysteme frei bestimmen. Sie dürfen keine geschützten Begriffe der Programmiersprache verwenden und es gibt einige Sonderzeichen, die nicht erlaubt sind. Das wohl größte Manko ist die begrenzte Länge der Dateinamen Ihrer Programme, die leider oft zu Abkürzungen zwingt. Besonders unverständlich ist das Verhalten von TSOT deshalb, weil Windows selbst keine spürbaren Beschränkungen bei der Länge der Dateinamen enthält. Aber trotz dieser Beschränkung gilt:

"Abkürzungen sind eine schlimme Pest", die Sie von Anfang an konsequent bekämpfen sollten. Geben Sie Ihrem Programm einen Namen der erkennen lässt, was sich dahinter verbirgt. Ihren Kindern geben Sie schließlich auch keine Abkürzungen wie K1a oder T3xma, sondern Namen die Sie eindeutig identifizierbar machen.

Ein Name soll die Funktion bei Indikatoren oder das Handelsmodell bei Handelssystemen ausdrücken. Natürlich müssen Sie wegen der begrenzten Anzahl an Zeichen Kompromisse eingehen. Legen Sie Präfixe fest, wenn mehrere Indikatoren oder Handelssystem thematisch

verwandt sind oder zum gleichen Projekt gehören. In diesem Fall und nur in diesem, sind Abkürzungen die vor den eigentlichen Namen gestellt werden sinnvoll. Denn sie führen automatisch eine sichtbare Grupierung ein und sorgen bei alphabetischer Sortierung dafür, das Dinge die zusammen gehören auch optisch zusammen stehen. FDax 30 Intraday Patterns und FDax 30 Intraday Exits helfen Ihnen selbst, schnell zu erkennen, dass beide Programme zum selben Handelssystem gehören. Scanner - MA Delta stellt heraus, dass es sich um einen Indikator, speziell für den Scanner oder die Watchliste von TSOT handelt.

Duplikate vermeiden

Duplikate von Dateinamen sind in TSOT problemlos möglich. Sie können Arbeitsbereiche, Indikatoren und andere Equilla-Programme, wenn diese in verschiedenen Paketen (Ordnern) liegen, mit dem gleichen Namen versehen. Natürlich sollten Sie das niemals machen. Vermeiden Sie doppelte Namen unbedingt. Seien Sie wachsam, wenn Sie Indikatoren und Handelssysteme herunterladen oder importieren. Mit dem Import wandern oft zahlreiche Funktionen mit auf Ihren PC, die zufällig schon vorhanden sind oder nur den gleichen Namen tragen. Nicht nur dass zwei oder gar mehr gleichnamige Programme für Verwirrung sorgen, sondern weil es zu verheerenden Auswirkungen beim Programmieren kommen kann, sollten Sie nie zwei Funktionen mit dem gleichen Namen dulden. Duplikate mit gleichem Namen haben den gleichen Stellenwert, wie doppelter Code, der an unterschiedlichen Stellen die gleiche Aufgabe ausführt. Duplizierungen sind eine Pest, die Sie frühzeitig und immer wieder aufs Neue bekämpfen sollten. Namensduplikate verursachen viele Probleme, von denen einige im Folgenden beschrieben werden.

Probleme mit Namensduplikaten bei Indikatoren und Handelssysteme

Wird ein Chart geladen der Handelssysteme und Indikatoren enthält, werden diese auch dann funktionieren, wenn die Quellcodes oder die Kompilate gar nicht auf dem PC vorhanden sind. Anders wäre ein Austausch von Charts kaum möglich. Während des Ladens prüft TSOT aber, ob Programme mit gleichem Namen vorhanden sind. Natürlich unter der Annahme, das diese ursächlich zu diesem Chart gehören. Findet es diese, werden die Codes für das Berechnen der Charts herangezogen. Und genau hier liegt der Knackpunkt und die Ursache für zahllose Verwirrungen, die ich selbst im Austausch mit meinen Kunden schon erlebt habe und auch heute noch immer wieder darauf hereinfalle.

Zum Beispiel ist es nicht unwahrscheinlich, das der Anwender eine Programmversion eines Handelssystems installiert hat und nun einen Chart mit einer veränderten Version öffnet. Die Veränderung des Handelssystems wurde auf einem anderen System ausgeführt, so dass der Anwender aus dieser Sicht eine veraltete Version nutzt. Tragen beide Versionen den gleichen Namen, führt das dazu, das TSOT beim Laden des Charts einfach den alten Code zum Berechnen des Handelssystems verwendet, weil dieser den passenden Namen trägt. Die eigentlich vorgenommene Veränderung geht sozusagen verloren.

Probleme mit Namensduplikaten bei Equilla Funktionen

Wenn Sie alte Projekte importieren oder einzelne Codes, dann können sich dabei auch Funktionen einschleichen. Sie sollten nach dem Import eines Equilla Pakets nachsehen, was genau importiert wurde. Duplikate findet man sehr schnell über die Suchmaske in der

Werkzeugleiste. Dort können Sie in allen Ansichten nach Dingen suchen, indem Sie in die Suchmaske einen Teil des Namens eingeben. Ein paar Buchstaben reichen, um zu sehen, ob es doppelte Namen gibt.

Der Equilla Compiler sucht beim Kompilieren eines Codes nach allen Funktionen, die im Quellcode genannt werden. Findet er die Funktion nicht im gleichen Ordner, werden andere Ordner durchsucht. Der erste Treffer mit passender Signatur wird verwendet. Passende Signatur heißt meiner Erfahrung nach, das es nicht weniger als die geforderten Input Parameter geben darf. Tolerant ist der Compiler dann allerdings, wenn im Code mehr Parameter aufgerufen werden, als ein Funktionscode eigentlich benötigt und das ist gefährlich. Ob die gefundene Funktion die eigentlich gemeinte ist, kann der Compiler nicht wissen. Liegt die eigentlich gemeinte Funktion in einem Ordner, der in der Suchhierarchie weiter entfernt ist und eine andere Funktion mit passender Signatur in einem Ordner davor, dann wird er die falsche kompilieren. Wenn Sie aufmerksam sind, fällt Ihnen dann vielleicht eine Warnung wegen nicht passender Parameter auf. Wenn Sie Pech haben, geht der Kompiliervorgang reibungslos zu Ende, hat eine falsche Funktion eingebunden und keiner merkt es.

Ein zweiter Grund, Namens-Duplikate zu vermeiden ist das hohe Verwechslungspotential beim Programmieren selbst. Wenn Sie aus einem Programm heraus eine Funktion öffnen, zu der es mehrere gleichnamige Instanzen gibt, dann merken Sie häufig nicht, welche genau geöffnet wird. Es gibt keinen Anhaltspunkt, außer Sie haben sich beim letzten Mal genau gemerkt, was genau der Inhalt dieser Funktion war. Es ist nicht sicher das diese Version der Funktion, in der Sie nun vielleicht Änderungen vornehmen, vom Compiler dann auch verwendet wird. Wenn Sie Pech haben, kompiliert diese nämlich eine andere Instanz. Was dann zur Folge hat, das Sie sich endlos wundern, warum Ihre Programmänderungen nicht die gewünschten Ergebnisse im Chart hervorbringen.

Datenorganisation in umfangreichen Projekten

Pakete sind Ordner die in TradesignalOnline Terminal eingebunden werden können. Die Handhabung ist manchmal etwas umständlich, birgt aber durchaus auch Vorteile. Pakete müssen zunächst einmal angemeldet werden. Tradesignal zeigt den Inhalt anschließend in der Werkzeugleiste, gefiltert nach Typ. Enthält das Paket Indikatoren, sind diese in der Gruppe Indikatoren zu finden, Handelssysteme bei den Handelssystemen und so weiter. Sie können jederzeit neue Pakete anlegen, wozu Tradesignal einen Windows üblichen Dialog zur Verfügung stellt.. Tradesignal ist zwar nicht in der Lage eine geschachtelte Ordner Hierarchie darzustellen, aber Sie können sehr wohl geschachtelte Ordner als Pakete anmelden um Ihr Projekt zu strukturieren. 

Paketinhalte

Projekt-bezogen gedacht, sollte ein Paket den Inhalt eines Projekts umfassen. Damit haben Sie eine wunderbare Sortierung all Ihrer Handelssysteme und Indikatoren erreicht. Besonders jetzt spielen die Pakete ihre Stärken aus. Sie können exportiert, importiert, zeitweilig ausgeblendet und wieder eingeblendet werden. Der Export ist nötig, wenn ein Versionsstand erreicht wurde, der in Produktion gehen soll, also in Ihre tägliche Arbeit übernommen wird. Diesen Stand sollten Sie sichern und vor allem vor ungewollten Veränderungen schützen. Deshalb werden Final Versionen als Pakete ohne Quellcode exportiert. Zwischenversionen werden einfach exportiert und können so später wieder importiert und weiter bearbeitet werden. Das Ausblenden von Paketen hilft ebenfalls bei der Versionierung. Sie legen für einen neuen Versionsstand eine Kopie des Pakets mit Versionsnummer an und kopieren den gesamten Inhalt der alten Version in das neue Paket. Das alte Paket kann dann ausgeblendet werden und ist vor Änderungen geschützt, aber jederzeit zugreifbar.  

Versionierung

Das Versionieren von Entwicklungsschritten ist bei der Entwicklung von Software allgemein verbreitet und bildet die Grundlage eines produktiven Arbeitsprozesses. Die professionellen Entwicklungswerkzeuge bieten dazu perfekte Hilfsmittel, die eine optimale Verwaltung und die effiziente Arbeit in kleinen Schritten aus Entwicklung/Erweiterung, Test und Korrektur ermöglichen.   

Programme entwickeln sich und obwohl es in TSOT keinen komfortablen Weg gibt, verschiedene Versionen des gleichen Programms zu verwalten, ist das Anlegen von Versionskopien doch leicht und schnell erledigt. Versionsnummern sind demzufolge ein wichtiger Bestandteil der Dateinamen. Vergessen Sie nie, dass Sie in zwei Monaten große Lust bekommen könnten, ein älteres Projekt anzusehen und die Vergabe von MA Trader und MA Trader new  sowie MA Trader multi nicht gerade einleuchtende Bezeichnungen sind. MA Trader V 0.1 und MA Trader V 1.0 final sind sinnvoller und zeigen die kausale Reihenfolge der Entwicklungsschritte bis zur fertigen Version. Ein Kommentarblock im Kopf des Quellcodes kann dann eine kurze mit einer Beschreibung helfen, den Inhalt zu verstehen.  

TSOT ist nun eigentlich keine Entwicklungsumgebung für Software sondern eine Charting- und Trading Software. Trotzdem werden Sie schnell merken, welche Umfänge Ihre Codesammlungen und Funktionsbibliotheken annehmen. Und gerade deshalb, weil TSOT keine optimalen Hilfsmittel zur Versionierung anbietet, ist es wichtig diszipliniert zu arbeiten, weil Nachlässigkeit am Anfang später schmerzhaft auf die eigenen Füße zurückfällt.   

Vergeben Sie konsequent für jeden Entwicklungsschritt des Programms eine neue Versionsnummer. Kleine Änderungen können Sie gerne durchführen, indem der alte Code durch Kommentarstriche "unsichtbar" gemacht wird und neuer Code eingefügt wird. Änderungen, die weitreichende Konsequenzen auf die Funktion und das Verhalten Ihres Indikators oder Handelssystems haben, sollten immer erst durch eine Kopie mit neuer Versionsnummer begründet werden. Unterschätzen Sie nicht die Blindheit vor Fehlern, wenn Sie mitten in der Entwicklungsarbeit stecken und den Ärger, das eine so profitabel aussehende Handelssystem nicht wieder zu finden, weil Sie es vermutlich einfach überschrieben oder "kaputt geändert" haben.    

Funktionsbibliotheken

Funktionen sind Unterprogramme, die einzelne Aufgaben bearbeiten und das Ergebnis an den Aufrufer zurückgeben können. Sogar Order Befehle können darin untergebracht werden. Funktionen sind optimale Hilfsmittel zur Reduzierung des Umfangs von Projekten, der Vermeidung von Duplikaten und damit Fehlern. Funktionen verbessern die Lesbarkeit und das Verständnis des Codes.

Namensgebung in Bibliotheken

Funktionen sind selten einem Projekt zugeordnet sondern viel eher einer bestimmten Aufgabenkategorie. Die meisten Funktionen beinhalten die Berechnungen von Indikatoren. Es gibt darüber hinaus zahlreiche Funktionen, die für die Verarbeitung von Feldern (Arrays) genutzt werden. Es gibt Funktionen, die mathematische Aufgaben, etwa zur Berechnung von Orderpreisen für Stop Loss Orders oder zur Berechnung von Stückzahlen vor einer Positionseröffnung zuständig sind. Es gibt Funktionen, in denen die Orderplatzierung von Stop Loss Orders, deren grafische Darstellung im Chart und eine Plausibilitätsprüfung des Orderpreises, enthalten sind. Es gibt überhaupt unzählige Möglichkeiten, Ihre Programme in kleinere sinnvolle Teile zu unterteilen. Deshalb ist es wichtig, das der Name einer Funktion deren Zweck beschreibt und möglichst einen Hinweis auf die Aufgabenkategorie enthält.

Daraus folgt, das hier eine Struktur innerhalb Ihrer Funktionssammlung besonders wichtig ist. Unterteilen Sie Ihre Sammlung deshalb in thematische Bibliotheken. Eine sinnvolle Einteilung wäre etwa:

  • Verarbeitung von Datenfeldern (Arrays)
  • Verarbeitung von Zeichenketten
  • Eigene Indikatorenberechnungen
  • Grafische Funktionen
  • Mathematische Funktionen

Unterscheiden Sie die einzelnen Namen durch Präfixe wie zum Beispiel Arr_HighestPriceLevel() für eine Funktion, die aus einem Feld mit unregelmäßig eingefügten Kurswerten, wie zum Beispiel den Kurswerten von Widerstandsebenen, den aktuell höchsten Wert heraussucht. Oder MAT_CalcRoundedOrderPrice() für eine Funktion, die einem zuvor ermittelten Kurswert auf die exakte Ticksize des Basiswertes rundet. Oder GR_PaintPriceMarkerArray() für eine Funktion, die alle in einem Feld enthaltenen Kurswerte als Pricemarken an der Werteskala zeichnen soll.

Neu im Lexikon

Organisation von Projekten und Daten in Tradesignal

Pakete in TradesignalOnline Terminal

Handelssysteme als Alternative/Ergänzung zum diskretionären Trading

Das Money Management Modell der Trading System Toolbox (TBX)

Modulreihenfolge und Informationsfluss in den Tradesignal Toolboxes

Die globalen Volatilitäts-Indikatoren der Trading System Toolbox (TBX)

Das Money Management Modell der Trading System Toolbox (TBX)

Die Integration der Indikator Toolbox (IBX) in Ihre Handelssysteme

Variablen und Arrays in Equilla

Skript- und Stapelverarbeitung in TradesignalOnline Terminal

Externe Kursdaten in Tradesignal importieren