Bidirektionaler Handel und Absicherung von Positions in MetaTrader 5 mit Hilfe des HedgeTerminal Panels - Teil 1

Vasiliy Sokolov | 13 Juni, 2016

Inhaltsverzeichnis


Einleitung

Innerhalb der letzten 18 Monate hat MetaQuotes umfangreiche Arbeiten zur Konsolidierung der MetaTrader 4- und MetaTrader 5-Plattformen in ein vereinheitlichtes Handelsökosystem durchgeführt. Beide Plattformen verfügen nun über einen gemeinsamen Markt an Programmlösungen - den AppStore, mit einem Angebot an unterschiedlichen Produkten von externen Entwicklern. Die Compiler für beide Plattformen wurden ebenfalls vereinheitlicht, sodass beide Plattformen nun mit einem gemeinsamen Compiler auf Basis von MQL5 und einer Programmiersprache - MQL - arbeiten, mit einem anderen Set an Funktionen, je nach verwendeter Plattform. Alle öffentlich verfügbaren Quellcodes in der CodeBase wurden ebenfalls überarbeitet und einige davon entsprechend angepasst, damit sie mit dem neuen Compiler kompatibel sind.

Diese wichtige Vereinheitlichung der Plattformen bezog sich jedoch nicht auf die Vereinheitlichung ihrer Handel treibenden Teile. Die Handelsmodelle von MetaTrader 4 und MetaTrader 5 sind daher immer noch grundsätzlich inkompatibel, trotz der Tatsache, dass der größte Teil der Handelsumgebung gemeinsam genutzt wird. MetaTrader 4 erleichtert die individuelle Verwaltung des Handels mit Positions mittels des Orderssystems - spezielle Programmeinheiten in diesem Terminal machen bidirektionalen Handel einfach und leicht. MetaTrader 5 ist für den Börsenhandel konzipiert, in dem die primäre Repräsentation der Informationspflicht eines Händlers seine zusammengefasste Netto-Position ist. Orders in MetaTrader 5 sind einfach nur Anweisungen zum Kauf oder Verkauf eines Finanzinstruments.

Der Unterschied zwischen der Handels-Performance dieser beiden Plattformen hat zu einer großen und hitzigen Debatte geführt. Doch leider ist es nur bei Gesprächen geblieben. Denn seit Einführung von MetaTrader 5 wurde leider keine einzige funktionierende Lösung veröffentlicht, die die Darstellung der Informationspflicht eines Händlers als bidirektionale Positions ermöglichen würde - so wie in MetaTrader 4. Zwar schlagen zahlreiche veröffentlichte Beiträge verschiedene Lösungen vor, doch ist keine flexibel genug, um in großem Umfang bequem eingesetzt werden zu können. Zudem ist keine dieser Entscheidungen für den Börsenhandel geeignet, bei dem es eine Menge Feinheiten gibt, die man alle berücksichtigen muss.

Dieser Beitrag sollte die Streitigkeiten zwischen den Anhängern der 4. und 5. Version der MetaTrader Plattform ein für allemal beilegen. Er versucht in Form einer umfassenden Programmspezifikation und der von dieser Spezifikation implementierten exakten Programmlösung eine universelle Lösung anzubieten. Dieser Beitrag diskutiert eine visuelles Panel und die Virtualisierungs-Library HedgeTerminal, mit deren Hilfe die Informationspflicht eines Händlers als bidirektionale Positions, so wie in MetaTrader 4, dargestellt werden kann. Zugleich berücksichtigt das dem HedgeTerminal zugrunde liegende Modell die Art der Ausführung der Handels-Orders, d.h.: Die Ausführung kann sowohl erfolgreich im FOREX OTC-Markt (Freiverkehrsmarkt) als auch in zentralisierten Börsen, wie z.B. dem Handel mit derivativen Wertpapieren im Derivat-Bereich der Moskauer Börse implementiert werden.

HedgeTerminal ist ein voll funktionsfähiges Handelsterminal innerhalb des MetaTrader 5 Terminals. Durch seinen Virtualisierung-Mechanismus verändert es die Darstellung der aktuellen Positions, damit ein Händler oder ein Handelsroboter seine individuellen Handelspositions verwalten kann. Dabei spielen weder die Zahl der Positions noch ihre Richtung eine Rolle. An dieser Stelle möchte ich betonen, dass wir hier über Virtualisierung sprechen - einem spezifischen Mechanismus, der die Darstellung der Informationspflicht eines Händlers verändert, aber nicht ihre qualitativen Merkmale.

Es geht also nicht um eine Verzerrung der Ergebnisse der Finanzaktivitäten eines Händlers, sondern um die Umwandlung der Darstellung dieser Aktivitäten. HedgeTerminal beruht auf der MetaTrader 5 Handelsumgebung und der MQL5 Programmiersprache. Es bringt keine neue Handelsinformationen in das Terminal, sondern ermöglicht nur, dass man die aktuelle Handelsumgebung aus einem anderen Blickwinkel betrachten kann. Das heißt, der HedgeTerminal ist eigentlich MetaTrader 5 und ist seine native Anwendung Obwohl wir beide durchaus durch ein Identitätszeichen trennen könnten, ist ein Gleichheitszeichen passender, weil der HedgeTerminal nur eine kleine der vielen MetaTrader 5 Anwendungen ist.

Die Möglichkeit der Virtualisierung und die Existenz des HedgeTerminals beruhren auf drei Paradigmen:

  1. Konzeptionell ist nun eine komplette und garantierte Konvertibilität der Darstellung der Netto-Position in individuelle bidirektionale Handelstransaktionen möglich. Diese Aussage belegt die Tatsache, dass es in einigen externen Handelsplattformen, einschl. der für den Börsenhandel entworfenen, Möglichkeiten zur Verwaltung bidirektionaler Positions gibt;
  2. Das Handelsmodell von MetaTrader 5 erlaubt auf Anwenderseite die Erzeugung von Einweg-Verknüpfungen von Orders miteinander. Berechnungen haben gezeigt, dass Verknüpfungen, die auf spezielle Weise angelegt sind, Kollisionen widerstehen können. Darüber hinaus könnten bidirektionale Transaktionen selbst im Falle einer korrumpierten History oder in jeder Situation höherer Gewalt auch im Nachhinein korrigiert und auf ein Finanzergebnis gebracht werden, das in der Netto-Darstellung berechnet wurde;
  3. Eine fortgeschrittene API in MQL5 erlaubt das Einfügen des Identitätszeichens zwischen MQL5 und dem MetaTrader 5 Terminal. Anders gesagt: es kann in MetaTrader 5 auf fast alles via der Programmschnittstelle und der MQL5-Programmiersprache zugegriffen werden. So kann z.B. Ihre eigene Terminal-Version innerhalb des MetaTrader 5 Terminals wie HedgeTerminal geschrieben werden.

Dieser Beitrag bespricht die zugrunde liegenden Algorithmen und die Funktionsweise des HedgeTerminals. Die Spezifikationen und Algorithmen, die einen dauerhaften bidirektionalen Handel gewährleisten, werden im Folgenden detailliert erklärt. Dabei spielt es keine Rolle, ob Sie HedgeTerminal verwenden oder lieber Ihre eigene Library zur Verwaltung Ihrer Handels-Algorithmen anlegen - in diesem Beitrag und seiner Fortsetzung finden Sie jede Menge diesbezüglicher, nützlicher Informationen.

Dieser Beitrag richtet sich nicht speziell an Programmierer, denn selbst wenn Sie keine Programmiererfahrung haben, werden Sie ihn dennoch leicht verstehen können. Der MQL-Quellcode ist mit Absicht diesem Beitrag nicht angehängt, denn der gesamte Quellcode ist zur besseren Veranschaulichung durch Diagramme, Tabellen und Bilder ersetzt worden, die das Funktionsprinzip und die Organisation der Daten schematisch darstellen. Ich weiß aus eigener Erfahrung, dass es, selbst wenn man sich gut mit Programmierprinzipien auskennt, ganz erheblich einfacher ist, ein geläufiges Muster des Codes zu sehen, anstatt ihn nur zu analysieren.

Im zweiten Teil dieses Beitrags sprechen wir über die Integration der Expert Advisors in die HedgeTerminalAPI Visualisierungs-Library, und dann kommt das Programmieren ins Spiel. Doch auch dann ist alles so aufgebaut, dass der Code immer noch leicht verständlich ist - insbesondere für Programmier-Neulinge. So werden z. B. Objekt-orientierte Konstruktionen wie Klassen nicht verwendet, obwohl HedgeTerminal eine Objekt-orientierte Anwendung ist.


Wie dieser Beitrag gelesen werden sollte

Dieser Beitrag ist ziemlich lang. Einerseits ist das gut, denn so können buchstäblich alle Fragen, die sich hinsichtlich dieses Themas ergeben, auch beantwortet werden. Andererseits lesen viele Benutzer lieber nur die wichtigsten Informationen und sehen sich den relevanten Abschnitt nur dann an, wenn Sie müssen. Dieser Beitrag deckt die konsequente Darstellung des Materials komplett ab. Ähnlich wie in Büchern, stellen wir jedem Kapitel eine kurze inhaltliche Zusammenfassung vor, damit Sie leicht entscheiden können, ob Sie es lesen müssen oder nicht.

  • Teil 1, KAPITEL 1 Organisationstheorie von bidirektionalem Handel Dieses Kapitel beschreibt die Hauptkonzepte des HedgeTerminals. Wenn Sie keine detaillierten Erklärungen der Organisation von bidirektionalen Handel wollen, genügt dieses Kapitel, um Ihnen eine Vorstellung der allgemeinen Prinzipien der HedgeTerminal Abläufe zu vermitteln. Dieses Kapitel sollten alle lesen.

  • Teil 1, KAPITEL 2 Installation des HedgeTerminal, Erststart In diesem Kapitel wird der erste Start und die Einrichtung des visuellen Panels des HedgeTerminals beschrieben. Wenn Sie kein visuelles Panel des HedgeTerminals verwenden wollen, können Sie dieses Kapitel überspringen. Sollten Sie jedoch die HedgeTerminalAPI-Library verwenden wollen, dann müssen Sie sich Abschnitte 2.1 und 2.2 dieses Kapitels durchlesen. Denn dort geht es um den HedgeTerminal Installer. Dieser Installer ist die gemeinsame Komponente aller HedgeTerminal Produkte.

  • Teil 1, KAPITEL 3 Das Innenleben des HedgeTerminal: Spezifikation und Funktionsprinzip. Dieses Kapitel beschreibt die interne Anordnung des HedgeTerminals, seinen Algorithmus sowie die interne Organisation von Daten. Diese Kapitel ist sicherlich für alle sehr aufschlussreich, die an bidirektionalem Handel interessiert sind. Professionelle Händler, die mit Algorithmen arbeiten und ihre eigenen Virtualisierungs-Libraries entwickeln und viele Roboter gleichzeitig einsetzen, werden ebenfalls von diesem Kapitel profitieren.

  • Teil 2, KAPITEL 1 Kommunikation von Expert Advisors mit dem HedgeTerminal und seinem Panel Dieses Kapitel wird all denen gefallen, die diesen Aspekt gerade kennen lernen sowie auch all denen, die algorithmischen Handel professionell betreiben. Hier werden die gemeinsamen Prinzipien der Arbeit mit der HedgeTerminal-Llibrary und die Architektur des Handelsroboters beschrieben.

  • Teil 2, KAPITEL 2 Dokumentation der HedgeTerminal-API. Enthält die Dokumentation über die Verwendung der Funktionen der HedgeTerminalAPI-Library. Dieses Kapitel ist quasi wie eine Dokumentationsliste aufgebaut, auf die ggf. immer mal wieder zurückgegriffen werden kann. Auf unnötige Besprechungen und zu viel Text wurde hier absichtlich verzichtet. Dieses Kapitel enthält nur Funktionsprototypen, Strukturen und Aufzählungen sowie knappe Beispiele ihrer Anwendung.

  • Teil 2, KAPITEL 3 Grundlagen asynchroner Handelsaktivitäten. Das HedgeTerminal arbeitet mit asynchronen Aktivitäten. In diesem Kapitel werden Erfahrungen im Umgang mit ihnen geschildert. Das Kapitel wurde in diesen Beitrag aufgenommen, damit Leser dort nützliche Informationen finden, ganz egal wie sie HedgeTerminal in ihrer Arbeit später nützen möchten.

  • Teil 2, KAPITEL 4 Grundlagen des multi-threaded Programmierens in der MetaTrader-Umgebung. Hier wird erklärt, was Multi-Threading ist, wie es angeordnet wird und welche Muster für Datenorganisation verwendet werden können. Wie in Kap. 3 auch werden hier allen MetaTrader-Anwendern entsprechende Erfahrungen bei der Entwicklung von multi-threaded Anwendungen mitgeteilt.

Ich hoffe, dieser Beitrag ist interessant genug, dass Sie ihn auch bis zum Ende lesen.


KAPITEL 1 Organisationstheorie von bidirektionalem Handel

1.1 Welche Möglichkeiten MetaTrader 5 für die Organisation von bidirektionalem Handel bietet

Der Beitrag "Die Prinzipien der Börsenkursbildung am Beispiel des Derivate-Markts der Moskauer Börse" beschreibt sorgfältig alle Feinheiten der Kursbildung an der Börse sowie Methoden zur Berechnung des finanziellen Ergebnisses der Markt-Player. Er stellt klar, dass die Kursbildung und Berechnung an der Moskauer Börse deutlich von den im FOREX-Handel akzeptierten Konzepten und Berechnungsmethoden abweichen.

Insgesamt ist die Bildung des Börsenkurses weitaus komplexer und enthält eine Menge wichtiger Details, die beim Handel mit Forex und im MetaTrader 4 Terminal verborgen sind.

So werden z.B. in MetaTrader 4 die Abschlüsse, die die Orders des Händlers ausgeführt hat, verborgen, wohingegen derartige Information in MetaTrader 5 vorhanden ist. Andererseits ist detaillierte Information über Handel in MetaTrader 5 nicht immer vonnöten, da sie die Arbeit für einen unerfahrenen Benutzer oder Programmier-Neulinge unnötigerweise erschweren und zu Missverständnissen führen kann. Um den Kurs einer ausgeführten Order in MetaTrader 4 herauszufinden, müssen Sie nur den entsprechenden Wert in der Spalte "Kurs" suchen. In der MQL4 Programmiersprache genügt es, die OrdersOpenPrice() Funktion aufzurufen. In MetaTrader 5 hingegen muss man alle Abschlüsse finden, die die Order ausgeführt hat und sie sich dann ansehen und ihren gewichteten Durchschnittskurs berechnen. Genau dieser Kurs ist dann der Kurs der Order-Ausführung.

Es gibt auch andere Situationen, in denen die erweiterte Darstellung der Handelsumgebung in MetaTrader 5 zusätzliche Mühen abverlangt, um diese Informationen analysieren zu können. Das führt natürlich zu logischen Fragen:

Gibt es eine Möglichkeit, den Handelsprozess in MetaTrader 5 so einfach und klar zu machen wie in MetaTrader 4 und einen bequemen Zugriff auf alle erforderlichen Handelsdetails zu haben? Gibt es eine Möglichkeit, bidirektionalen Börsenhandel mittels MetaTrader 5 genauso einfach anzuordnen wie in MetaTrader 4? - Und beide Fragen lassen sich mit einem klaren "Ja!" beantworten.

Sehen wir uns dazu das Diagramm der Fähigkeiten der MetaTrader 4 und MetaTrader 5 Terminals an, um zu verstehen, wie dies geht:

Abb. 1 Fähigkeiten von MetaTrader 4 und MetaTrader 5

Abb. 1 Fähigkeiten von MetaTrader 4 und MetaTrader 5

Wie wir sehen, umfasst das "MetaTrader 5" Set das "MetaTrader 4" Subset. Also kann alles, was in MetaTrader 4 möglich war, auch in MetaTrader 5 gemacht werden - umgekehrt jedoch nicht. Neue Fähigkeiten von MetaTrader 5 erhöhen unvermeidlich die Menge und Komplexität der Darstellung der Handelsinformation. Dieses Problem kann an spezielle Hilfsprogramme delegiert werden, die in der MetaTrader5 Umgebung funktionieren. Sie können die Komplexität verarbeiten und die Terminalfähigkeiten auf der gleichen Stufe belassen. Eines dieser Programme, das sog. HedgeTerminal , ist Gegenstand dieses Kapitels.

HedgeTerminal ist ein voll funktionsfähiges Handelsterminal innerhalb des MetaTrader 5 Terminals. Es bedient sich der MetaTrader 5 Handelsumgebung, wandelt sie mit der MQL5-Sprache um und stellt sie als eine bequeme grafische Schnittstelle dar - das HedgeTerminalUltimate Panel und die spezielle HedgeTerminalAPI -Schnittstelle zur Interaktion mit unabhängigen Algorithmen (Expert Advisors, Scripts und Indikatoren).

MetaTrader 4 bietet die Möglichkeit, bidirektionale Positions oder Sperr-Orders zu verwenden. Auch MetaTrader 5 verfügt über diese Fähigkeit, jedoch nicht explizit. Sie kann mit Hilfe eines spezifischen Add-On Programms aktiviert wersen - und genau das ist HedgeTerminal eigentlich. HedgeTerminal ist in MetaTrader 5 eingebaut und bedient sich seiner Umgebung, sammelt Informationen per Abschlüsse und Orders in integrierte Positions, die den Orders in MetaTrader 4 sehr ähneln und zudem alle Fähigkeiten von MetaTrader 5 aufweisen.

Solche Positions können in einer kompletten oder teilweisen Sperr-Order vorhanden sein (wenn aktiv, bestehen Long und Short Positions gleichzeitig). Doch die Pflege solcher Positions ist nicht das Ziel an sich für den HedgeTerminal. Sein Hauptziel ist die Vereinheitlichung der Handelsinformation in einheitliche Gruppen (Positions), die leicht zu analysieren, verwalten und abzurufen sind. Bidirektionale Positions kommen im HedgeTerminal nur vor, weil dies sehr bequem ist. Sollten jedoch mehrere Händler auf einem Konto handeln oder wird mehr als eine Strategie angewandt, muss die Aufteilung der Handelsaktivitäten geordnet werden.

Drüber hinaus müssen beim Börsenhandel einige Feinheiten berücksichtigt werden, wie z.B. teilweise Order-Ausführung, Positionsübertragung ("Rollover"), Berechnung der Variations-Marge, Statistik uvm. Und genau für diese Herausforderungen ist HedgeTerminal entwickelt worden. Es bietet dem Benutzer oder einem Expert Advisor eine regelmäßige High-Level Schnittstelle, die MetaTrader 4 ähnelt und gleichzeitig jedoch in der Börsenumgebung korrekt arbeitet.


1.2 Paarung von Orders - Die Grundlage der Absicherung und Statistik

Um Handelstechniken und Algorithmen durchgängig zu verwalten, muss mansicher wissen, welcher Handelsablauf zu welchem Algorithmus gehört.  Ich habe "sicher wissen" deshalb kursiv geschrieben, da selbst bei nur der kleinsten Wahrscheinlichkeit eines Irrtums, ein Zusammenbruch der Position-Verwaltung früher oder später vorprogrammiert ist. So ein Zusammenbruch führt zu Schäden an der Statistik und untergräbt die Idee, verschiedene Algorithmen in einem Konto verwalten zu können.

Ein zuverlässige Trennung von Handelsaktivitäten beruht auf zwei grundsätzlichen Möglichkeiten:

  1. Die Möglichkeit der Vereinigung oder "Paarung" zweier Handelsorders zu einer, sodass stets festgelegt werden kann, welche der beiden Orders die einzelne (virtuelle) Position eröffnet und welche die Position schließt;
  2. Der Algorithmus zur Analyse der Orders für ihre Paarung muss komplett deterministisch und für alle Programmmodule vereinheitlicht sein.

Die zweite Voraussetzung für den Algorithmus-Determinismus wird im Folgenden detailliert betrachtet. Bleiben wir erst einmal bei der ersten Voraussetzung.

Eine Order ist eine Anweisung zum Verkaufen oder Kaufen. Eine Order ist eine definierte Einheit, die viele weitere Informations-"Felder" zusätzlich zur Hauptinformation besitzt, wie die magische Zahl und Order-Ziffer, benötigter Kurs und Bedingungen für eine Eröffnung.

Ein solches Feld in MetaTrader 5 heißt "Order-Magie". Es handelt sich hierbei um ein festgelegtes Feld, das für einen Handelsroboter oder einen Expert Advisor verwendet wird, damit er diese Orders mit dieser individuellen Zahl, der sog. "magischen Zahl" markieren kann. Dieses Feld wird beim manuellen Handel nicht eingesetzt, ist jedoch für Handelsalgorithmen sehr wichtig, denn wenn ein Handelsalgorithmus die Werte dieses Felds analysiert, erkennt er immer, ob die fragliche Order von ihm oder einem anderen Algorithmus platziert wurde.

Sehen wir uns das mal an einem Beispiel an. Angenommen, wir müssen eine klassische Long Position öffnen und dann, nach einiger Zeit, wieder schließen. Dazu müssen wir zwei Orders platzieren:. die erste zum Öffnen der Position und die zweite zum Schließen.

Abb. 2 Orders, die eine historische Netto-Position bilden

Abb. 2 Orders, die eine historische Netto-Position bilden

Was wäre wenn wir die magische Zahl der ersten Order in das Feld "Order-Magie" der zweiten Order in dem Moment schreiben, wenn wir sie in den Markt schicken?

Das Feld dieser Order kann dann später gelesen werden, und, sollte der Wert gleich der Ziffer der ersten Order sein, können wir definitiv sagen, dass die zweite Order mit der ersten zusammenhängt und ihr Gegenteil darstellt - nämlich eine Order zum Sxhließen.

Diese Paarung sähe auf einem Diagramm so aus:

Abb. 3 Paarung von Orders

Abb. 3 Paarung von Orders

Nominell kann man solche Order als gepaart bezeichnen, da die zweite Order eine Verknüpfung zur ersten enthält. Die erste Order, die eine neue Position eröffnet, kann man initiierende oder Eröffnungs-Order nennen. Die zweite Order heißt dann logischerweise schließende Order.

Eine Paarung derartiger Orders nennt man Position. Um keine Verwirrung mit dem Konzept der "Position" in MetaTrader 5 zu stiften, nennen wir ab sofort derartige gekoppelte Positions bidirektionale, absichernde oder HedgeTerminal-Positions. Positions in MetaTrader 5 nennen wir hingegen Netto-Positions oder MetaTrader 5 klassische Positions.

Und offensichtlich ist die Anzahl der HedgeTerminal Positions und ihre Richtungen - anders als bei den klassischen Positions - beliebig. Was passiert, wenn es eine ausgeführte Order gibt, auf die nicht von einer anderen Order verwiesen wird? So eine Order kann als eine aktive, bidirektionale Position dargestellt werden. Denn sobald eine gegensätzliche Order, die eine Verknüpfung zu dieser Order enthält, platziert wird, wird sie zu einer Order, die die erste schließt. Solche Orders werden gepaart werden und stellen eine geschlossene, bidirektionale Position dar, während das Volumen von zwei Orders gleich ist, ihre Richtung jedoch gegensätzlich.

Legen wir jetzt erst einmal fest, was im HedgeTerminal unter Position verstanden wird:

Wird auf eine ausgeführte Order nicht von einer anderen Order verwiesen, behandelt der HedgeTerminal derartige Orders als eine aktive, bidirektionale Position.

Wird auf eine ausgeführte Order von einer anderen Order verwiesen, bilden zwei solche Orders ein Paar und werden vom HedgeTerminal als eine vereinheitlichte, historische oder geschlossene, bidirektionale Position behandelt.

Order-Paarung im HedgeTerminal ist in Wirklichkeit noch komplizierter, da jede Order einen Minimal-Abschluss generiert - und im Börsenhandel kann es viele solcher Abschlüsse geben. Allgemein kann man den Handelsablauf wie folgt darstellen: ein Händler platziert eine Order zur Eröffnung einer neuen Position via des MetaTrader 5 Terminals. Die Börse führt diese Order mittels einer oder mehrerer Abschlüsse aus.

Abschlüsse enthalten, vergleichbar mit den Orders, ebenfalls Felder für zusätzliche Information. Eines dieser Felder enthält eine Order-ID auf deren Grundlage der Abschluss ausgeführt wurde. Dieses Feld umfasst Informationen über die Order zu der ein gewisser Abschluss gehört. Umgekehrt ist nicht möglich. Die Order an sich weiß nicht, welche Abschlüsse zu ihr gehören. Dies geschieht, da zum Zeitpunkt der Order-Platzierung nicht klar ist, welche Abschlüsse die Order ausführen wird und ob die Order überhaupt ausgeführt wird.

Auf diese Art kann man Kausalität oder Handlungsdeterminismus feststellen. Abschlüsse beziehen sich auf Orders, und Orders beziehen sich auf jeweils untereinander. Und diese Struktur kann als eine einzeln verknüpfte Liste dargestellt werden.

Ausgeführte Abschlüsse der Eröffnungs-Order generieren in MetaTrader 5 eine klassische Position, und Abschlüsse, die zu einer schließende Orders gehören, schließen dann natürlich diese Position. Diese Paare sind in der folgenden Abbildung dargestellt:

Abb. 4 Beziehungsdiagramm von Orders, Abschlüsse und Börse

Abb. 4 Beziehungsdiagramm von Orders, Abschlüsse und Börse

Wir kommen zu einer detaillierten Analyse dieses Diagramms zurück, da die Richtung der Beziehungen für den Aufbau eines strikt festgelegten Systems der Aufzeichnungen der Händler-Aktivitäten extrem wichtig ist - nämlich das HedgeTerminal.


1.3 Beziehung zwischen den MetaTrader 5 Netto-Positions und den HedgeTerminal Positions

Vom Blickwinkel des HedgeTerminals können zwei gegensätzliche Orders mit demselben Volumen zwei unterschiedliche Positions sein. Ihre Netto-Position wäre in diesem Fall "0". Daher verwendet der HedgeTerminal auch keine Informationen über die tatsächlichen, in MetaTrader 5 geöffneten Netto-Positions. Deshalb sind Positions im HedgeTerminal nicht mit Positions im MetaTrader 5 verknüpft. Die aktuellen Netto-Positions werden nur ein einziges Mal verifiziert, nämlich beim Start des HedgeTerminals. Die Gesamtvolumen der gegensätzlichen, aktiven Positions muss identisch sein mit den Werten der tatsächlichen Netto-Positions.

Ist dies nicht der Fall, erscheint auf dem HedgeTerminal ein umrahmtes Warnungs-Ausrufezeichen, Positions sind nicht gleich das darauf hinweist, dass Positions im HedgeTerminal und Positions im MetaTrader 5 nicht gleich sind. Diese Asymmetrie wirkt sich nicht auf die Effizienz des HedgeTerminals aus, muss jedoch für eine weitere exakte Arbeit beseitigt werden.

In den meisten Fällen erscheint dieses Ausrufezeichen, wenn Benutzer bei der Bearbeitung der Dateien der ausgeschlossenen Orders ExcludeOrderss.xml Fehler machen, doch kann auch eine Korruption der Order- und Abschluss-History auf dem Server ebenfalls der Grund für diese Warnung sein. Auf jeden Fall können solche Diskrepanzen durch den Ausschlussmechanismus beseitigt werden, der mittels der ExcludeOrderss.xml-Datei implementiert wird.


1.4 Anforderungen an die Algorithmen zur Implementierung von bidirektionalem Handel

Die Algorithmen zur Implementierung von bidirektionalem Handel unterliegen ziemlich strikten Anforderungen, die alle bei der Entwicklung des HedgeTerminals erfüllt werden müssen. Ansonsten würde der HedgeTerminal schnell zu einem Programm werden, das stochastisch arbeitet, und wäre dann "nur eine weitere Lösung, die mit der gleichen Wahrscheinlichkeit sowohl funktionieren als eben auch nicht funktionieren könnte".

Unten stehen einige Anforderungen, die für die Entwicklung des HedgeTerminals festgelegt wurden:

  1. Die Darstellung der bidirektionalen Positions der Händler muss zuverlässig sein. Jedes in HedgeTerminal implementierte Konzept darf nicht zu einer Zweideutigkeit oder potenziellen Fehlern in der Business-Logik führen. Sollte eine Eigenschaft oder eine Gelegenheit diese Anforderungen nicht erfüllen, wird dieses Konzept trotz seiner Bequemlichkeit und seiner Begerhtheit nicht verwendet;
  2. Alle Algorithmen müssen so viel wie möglich auf der MetaTrader 5 Handelsumgebung beruhen. Das Speichern zusätzlicher Informationen in den Dateien ist nur dann zulässig, wenn wirklich unbedingt nötig. Die Algorithmen zur Virtualisierung müssen den Großteil der Information aus der Handelsumgebung erhalten. Diese Eigenschaft erhöht das Gesamtniveau an Zuverlässigkeit, da die meisten Veränderungen per Server übermittelt werden und daher von überall auf der Welt zugänglich sind;
  3. Alle Maßnahmen bei der Umwandlung der Handelsumgebung müssen im Hintergrund ablaufen. Eine komplexe Konfiguration und Initialisierung der API HedgeTerminal-Library sollte vermieden werden. Jeder Benutzer sollte die Anwendung "direkt so" starten können und auch das erwartete Ergebnisbekommen;
  4. Das visuelle HedgeTerminal Panel muss sich so nahtlos wie möglich in die allgemeine MetaTrader 5 Schnittstelle einbinden und einfache und leicht verständliche visuelle Tools zur Arbeit mit bidirektionalen Positions anbieten, die allen Benutzern von MetaTrader 4 und 5 vertraut sind. Anders ausgedrückt: das visuelle Panel muss für alle Benutzer intuitiv klar und einfach sein;
  5. Das visuelle HedgeTerminal Panel muss so konzipiert sein, dass es die hohen Anforderungen algorithmischer Händler berücksichtigen kann. So muss das Panel beispielsweise konfigurierbar sein, der Benutzer muss sein Aussehen ändern und sogar individuell angepasste Module hinzufügen können;
  6. Es muss die intuitive und einfache Programmschnittstelle (API) der Interaktionen mit externen Experts liefern. Der Programmteil der Interaktionen zwischen externen Experts und den HedgeTerminal Algorithmen muss sich nahtlos in den bestehenden Standard der Programminteraktion von individuell angepassten Experts mit den MetaTrader 4/5 Systemfunktionen einfügen. Und tatsächlich scheint die HedgeTerminal API eine Hybridversion der MetaTrader 4 und MetaTrader 5 APIs zu sein;
  7. Das HedgeTerminal muss in der Börsenumgebung eine zuverlässige Arbeit garantieren sowie alle Feinheiten bei der Ausführung von Börsenorders berücksichtigen. Das HedgeTerminal ist auf Grundlage des anerkannten Beitrags Die Prinzipien der Börsenkursbildung anhand des Beispiels des Derivatemarkts der Moskauer Börse" geschrieben. Dieser Beitrag war anfänglich Teil eines langen Aufsatzes zu HedgeTerminal, der später dann in zwei unabhängige Beiträge aufgeteilt wurde. Man kann also sagen, dass das HedgeTerminal eine Programmimplementierung aller in diesem Beitrag vorgestellten und besprochenen Konzepte ist.

Viele dieser Konzepte hängen nicht unbedingt miteinander zusammen. So kann die Unmenge an Börseninformation, die man beim Börsenhandel abbilden muss, nur schwer mit der Einfachheit der Darstellung dieser Information zusammengebracht werden.

Eine weitere Schwierigkeit war das Anlegen eines Panels, das auch für Neulinge leicht zu bedienen wäre und zugleich aber auch all die umfangreichen Chancen für professionelle algorithmische Händler anbieten würde. Nichtsdestotrotz - wenn man das Ergebnis bewertet, wird schnell klar, dass all diese, sich gegenseitig ausschließenden Eigenschaften erfolgreich in das HedgeTerminal implementiert wurden.


KAPITEL 2 Installation des HedgeTerminals, Erststart

2.1 Installation des HedgeTerminals

Wir wissen, dass alle ausgeführten Orders im HedgeTerminal als Positions betrachtet werden. Positions können entweder aus zwei gekoppelten Orders bestehen, was eine geschlossene historische Position ergäbe oder aus einer ungekoppelten Order, was eine offene oder aktive Position ergäbe.

Falls es vor der Installation des HedgeTerminals auf dem Handelskonto einige Aktivitäten gegeben hat und die Handelshistorie viele ausgeführte Orders umfasst, sind, vom Blickwinkel des HedgeTerminals aus, all diese Orders offene Positions, da die Verknüpfungen zwischen ihnen nicht erzeugt wurden. Dabei spielt es keine Rolle, ob die Konto-Historie 2-3 ausgeführte Orders enthält. Selbst wenn es Tausende gäbe, würde der HedgeTerminal eben tausende offene Positions anlegen. Was kann man mit ihnen machen? Diese Orders können "geschlossen werden", indem man gegensätzliche Orders platziert, mit Verknüpfungen zu den initialisierende Orders via HedgeTerminal. Doch da gibt es einen Nachteil. Sollten es zum Zeitpunkt der Installation des HedgeTerminals zu viele sein, kann das den Händler ruinieren, da die Maklergebühr und Slippage-Kommissionen bezahlt werden müssen.

Um dies zu vermeiden, startet der HedgeTerminal zu Beginn seiner Installation einen dezidierten Installationsassistenten, der verschiedene Lösungen dieses Problems vorschlägt. Starten wir also den HedgeTerminal, rufen seinen Assistenten auf und beschreiben seine Arbeit in allen Einzelheiten. Dazu HedgeTerminalDemo aus dem MetaTrader 5 Market herunterladen und installieren.

Es hat, ähnlich wie HedgeTerminalUltimate, die Form eines Expert Advisors, sodass man zu seinem Start nur sein Symbol aus dem "Navigator"-Ordner in ein freies Chart ziehen muss.

Dadurch geht ein Standardfenster auf, das vorschlägt, den Expert Advisor auf dem Chart zu starten:


Abb. 5 Das HedgeTerminal-Fenster vor dem Start

Zu diesem Zeitpunkt genügt es, den Marker "AutoHandel zulassen" zu setzen, damit der EA Handelsaktivitäten ausführen kann. Das HedgeTerminal befolgt Ihre Anweisungen, da es keine eigene Handelslogik hat, doch ist zum Ausführen von Handel dennoch Ihre Berechtigung vonnöten.

Damit jeder Expert Advisor mit dem Handel beginnen kann, müssen die allgemeinen Berechtigungen zum Handel durch Expert Advisors im Panel aktiviert werden und zudem auch die persönliche Berechtigung zum Handel in MetaTrader 5.

Abb. 6 Automatischen Handel aktivieren

Abb. 6 Automatischen Handel aktivieren

HedgeTerminal wurde so konzipiert, dass sich der Benutzer nicht mit langer und komplexer Konfiguration herumschlagen muss.

Deswegen sind alle verfügbaren Einstellungen in einer speziellen XML-Textdatei enthalten. Der einzige explizite Parameter für HedgeTerminal ist der tatsächliche Name der Datei mit diesen Einstellungen:

Abb. 7 Einstellungen-Fenster des HedgeTerminal Panels

Abb. 7 Einstellungen-Fenster des HedgeTerminal Panels

Auf die Art dieser Einstellungen und wie man sie verändern kann, kommen wir später noch zu sprechen.

Nachdem Sie "OK" angeklickt haben, startet der HedgeTerminal-Installationsassistent und schlägt vor, den Installationsvorgang zu beginnen. Dieser Installationsprozess geht soweit, dass er einige Dateien im gemeinsamen Directory für die MetaTrader 4 und MetaTrader 5 Terminals anlegt.

HedgeTerminal fragt nach der Berechtigung, diese Dateien installieren zu dürfen:


Abb. 8 Dialog beim Start der Installation

Wenn Sie nicht möchten, dass einige Dateien auf Ihrem Computer installiert werden, klicken Sie auf "Abbrechen". Dann beendet HedgeTerminal seine Arbeit. Wollen Sie mit der Installation fortfahren, klicken Sie auf "OK".

Ob der folgende Dialog erscheint, hängt vom Konto ab, auf dem Sie HedgeTerminal starten. Wurden auf dem Handelskonto keine Handel ausgeführt, schließt HedgeTerminal seine Arbeit ab.

Wurden jedoch bereits einige Handel ausgeführt, zeigt HedgeTerminal folgenden Dialog an:


Abb. 9 Dialog, der den Erststart des HedgeTerminals entdeckt

In der obigen Abbildung hat HedgeTerminal 5 aktive Orders ermittelt. In Ihrem Fall ist ihre Anzahl anders (ziemlich wahrscheinlich groß und gleich der Gesamtzahl aller in der gesamten Lebenszeit des Kontos ausgeführten Orders). Diese Orders bilden, vom Standpunkt des HedgeTerminal aus gesehen, kein "Paar" mit einer schließenden Order - sie sind also aktive Positions.

HedgeTerminal bietet Ihnen nun verschiedene Optionen.

  1. Diese Orders vom HedgeTerminal ausschließen: "Sie können sie im HedgeTerminal verbergen. Dazu 'JA' anklicken und zum nächsten Schritt gehen". Wenn Sie sich hierfür entscheiden und"JA" anklicken, legt HedgeTerminal sie in einer spezifizierten Liste ab und zählt ab jetzt ihren Beitrag nicht mehr zur zusammengefassten Netto-Position sowie ihrem Finanzergebnis hinzu. Diese Orders können nur dann in diese Liste platziert werden, wenn es derzeit keine offene Netto-Position gibt. Haben Sie auf einem oder mehreren Symbolen eine offene Position, ruft HedgeTerminal einen zusätzlichen Dialog auf, der vorschlägt, die bestehenden Positions zu schließen.
  2. Lassen Sie die Orders so wie sie sind und schließen sie ggf. später: "Sie können… später manuell schließen. 'Nein' anklicken, wenn Sie diese Orders später manuell schließen möchten. In diesem Fall müssen Sie 5 Handel der entgegengesetzten Richtung ausführen". Wenn Sie sich hierfür entscheiden und"NEIN" anklicken, bildet HedgeTerminal nach dem Start all diese Orders in der Registerkarte"Aktiv" ab (also als aktive Positions). Diese Orders können später mit anderen Orders mittels des HedgeTerminal-Panels geschlossen werden. Danach werden sie zu geschlossenen Positions und in die Registerkarte"History" übertragen (historische Positions). Sollte es sich hierbei um viele Orders handeln, dann ist es besser, sie zu verbergen anstatt alle ausgeführten Orders erneut zu schließen und Maklergebühren zu bezahlen.
  3. Sie können die Installation anhalten: "Wollen Sie nicht fortfahren, dann 'Abbrechen' anklicken. In diesem Fall schließt HedgeTerminal seine Arbeit ab". Wenn Sie sich hierfür entscheiden und "Abbrechen" anklicken, stellt HedgeTerminal seine Arbeit ein.

Sind zum Zeitpunkt der Installation des HedgeTerminals keine aktiven Positions vorhanden, wird die Installation jetzt abgebrochen.

Wenn Sie sich für die zweite Option entschieden haben und aktuell eine oder mehrere geöffnete Positons haben, ruft HedgeTerminal einen zusätzlichen Dialog auf, mit dem Vorschlag, sie zu schließen:


Abb. 10 Dialog mit dem Vorschlag, die Netto-Positions automatisch zu schließen.

HedgeTerminal verlangt das Schließen aller existierenden Positions, da alle ausgeführten Orders in die Liste der ausgeschlossenen Orders platziert werden müssen. Wenn es keine Netto-Positions gibt, initialisiert jede folgende Order eine neue Netto-Position. Richtung und Volumen sind in diesem Fall genauso wie in HedgeTerminal, sodass eine Nicht-Synchronisierung der Netto-Positions mit allen Positions insgesamt im HedgeTerminal auf jeden Fall vermieden wird.

HedgeTerminal kann für Sie automatisch alle Netto-Positions schließen: "Das HedgeTerminal kann automatisch alle aktiven Positions schließen". Wenn Sie dies wollen, klicken Sie auf "OK". In diesem Fall wird versucht, alle Positions zu schließen und bei Erfolg, die Arbeit abgeschlossen. Sollten aus irgendeinem Grund Positions nicht geschlossen werden können, geht HedgeTerminal zum Dialog des manuellen Schließens der Position weiter. Wenn Sie diese Option wählen, "auf 'Abbrechen' klicken, wenn Sie eine Position manuell schließen wollen", dann "Abbrechen" anklicken.

Der Dialog für manuelles Schließen von Positions wird aufgerufen, wenn man sich entweder im vorherigen Dialogfenster für diese Option entschieden hat oder wenn ein automatisches Schließen der Position nicht möglich ist.


Abb. 11 Dialog mit dem Vorschlag, Netto-Positions manuell zu schließen

Jetzt müssen alle aktiven Positions manuell mittels MetaTrader 5 geschlossen oder die Installation durch Anklicken von "Abbrechen" abgebrochen werden. Sind dann alle Positions geschlossen, "Wiederholen" anklicken.


2.2 Installation in drei Schritten. Installationsdiagramm und Lösung für mögliche Probleme

Wenn wir den Installationsvorgang so stark wie möglich vereinfachen, kann er auf drei Schritte reduziert werden:

  1. Vor der Installation des HedgeTerminals, alle derzeit aktiven Netto-Positions im MetaTrader 5 Terminal schließen;
  2. HedgeTerminal auf dem Chart starten und im erscheinenden Fenster des Installationsassistenten "Ja" anklicken, um die Installation zu starten. In diesem Fall installiert HedgeTerminal alle für diesen Vorgang notwendigen Dateien;
  3. Im nächsten Fenster, das dann erscheint, die zweite Option wählen und "Ja" anklicken. Jetzt erscheinen beim Start des HedgeTerminals keine aktiven Positions und die Information über zuvor ausgeführte Orders wird automatisch in die ExcludeOrderss.xml-Datei übertragen, da ja keine aktiven Positions mehr geschlossen werden müssen.

Am einfachsten lässt sich das so beschreiben: Vor dem Start des HedgeTerminals alle Positions schließen und dann im HedgeTerminal Installationsassistenten zweimal "Ja" anklicken.

Das folgende Diagramm zeigt das komplette Muster des Installationsassistenten. So lassen sich Fragen am besten beantworten und eine korrekte Installation gewährleisten:


Abb. 12 Installationsassistent

Wie geht man vor, wenn die Installation nicht korrekt durchgeführt wurde oder HedgeTerminal vom Computer gelöscht werden muss? Sollte die Installation nicht korrekt abgelaufen sein, einfach alle installierten Dateien löschen. Dazu zum Ordner gehen, wo die Programme für MetaTrader gemeinsame Information speichern (in der Regel befindet er sich in c:\Users\<your_user_name>\AppData\Roaming\MetaQuotes\Terminal\Common\Files\). Wenn Sie Informationen über die HedgeTerminal-Installation von allen Konten löschen wollen, finden Sie den "HedgeTerminal" Ordner in diesem Directory und löschen ihn. Wenn Sie Informationen über die HedgeTerminal-Installation nur für ein bestimmtes Konto löschen wollen, gehen Sie zum \HedgeTerminal\Makler-Directory und wählen dort den Ordner mit dem Namen Ihres Maklers und der Kontonummer, die aussieht wie: "Maklername- Kontonummer". Diesen Ordner löschen. Der Installationsassistent startet das nächste Mal erneut, wenn HedgeTerminal auf diesem Konto gestartet wird.

Installation auf dem Terminal, das mit dem Konto verbunden ist, in dem HedgeTerminal bereits arbeitet. Es kann vorkommen, dass HedgeTerminal auf dem Terminal installiert werden muss, das mit dem Konto verbunden ist, wo HedgeTerminal bereits arbeitet. Wie Sie ja wissen, besteht der Installationsvorgang aus der Erzeugung und Konfiguration von Systemdateien. Sind all diese Dateien bereits auf einem anderen Computer erzeugt und ordentlich konfiguriert, dann muss HedgeTerminal nicht installiert werden. In der Regel finden sich diese Dateien in c:\Users\<your_user_name>\AppData\Roaming\MetaQuotes\Terminal\Common\Files\HedgeTerminal. Platzieren Sie diesen Ordner einfach an die gleiche Stelle in Ihrem Computer. Nachdem Sie das Directory kopiert haben, starten Sie das HedgeTerminal erneut. Der Installationsassistent wird nicht aufgerufen, da alle Dateien vorhanden und konfiguriert sind. In diesem Fall ähnelt die Anzeige aktiver Positions der auf anderen Terminals oder Computern.

Installation der HedgeTerminalAPI und Verwendung der Library im Testmodus HedgeTerminal wird sowohl als ein visuelles Panel als auch als Library von Programmfunktionen implementiert - HedgeTerminalAPI. Die Library hat einen ähnlichen Installationsassistenten, der beim Erststart des HedgeTerminalAPI in Echtzeit aufgerufen wird. Die Installation der Dateien bei der Arbeit mit der Library geht ähnlich. Beim ersten Aufruf der Funktion, zeigt der Expert eine relevante MessageBox an, mit dem Vorschlag die Installation zu beginnen. Jetzt muss der Benutzer genau so wie vorhin verfahren - vor Aufruf der HedgeTerminalAPI alle Positions schließen und die Installation in drei Schritten ausführen.

Beim Start der Library im Testmodus muss HedgeTerminal nicht installiert werden. Da der Expert im Testmodus jedes Mal mit einem neuen virtuellen Konto zu arbeiten beginnt, müssen zuvor audgeführte Orders nicht verborgen und auch keine Dateien installiert werden. Alle in der Settings.xml-Datei und in der Library gespeicherten Einstellungen können grammatikalisch durch Aufruf der relevanten Funktionen definiert werden.


2.3 HedgeTerminal - Erste Schritte, Erststart

Nachdem HedgeTerminal alle für seine Arbeit notwendigen Dateien installiert hat, startet es auf dem Chart und zeigt sein Panel an:

Abb. 13 Erststart des HedgeTerminals - Aussehen

Abb. 13 Erststart des HedgeTerminals - Aussehen

Da alle bestehenden Orders verborgen sind, werden auch keine aktiven Positions angezeigt. Das obere Panel hat links eine Schaltfläche des HedgeTerminal Menüs sowie dezidierte Symbole, die den Panel-Status anzeigen. Die Schaltflächen haben folgende Funktionen:

  •  - Zeigt an, dass die Demoversion des Panels gestartet wurde. Das unterstützt den Handel auf echten Konten nicht und zeigt Positions nur auf den AUDCAD und VTBR* Symbolen an. In diesem Modus ist die Position-History auch auf die letzten 10 geschlossenen Positions beschränkt.
  •  - Zeigt an, dass Position in HedgeTerminal nicht gleich der gesamten Netto-Position in MetaTrader 5 sind. Das ist kein schwerwiegender Fehler, sollte jedoch bereinigt werden. War die HedgeTerminal-Installation korrekt, gehen Sie zu dem Abschnitt in diesem Beitrag zurück, wo beschrieben wird, wie man diesen Fehler behebt.
  •  - Zeigt an, dass Handel nicht möglich ist. Gehen Sie mit der Maus über dieses Symbol und finden im Pop-Up Fenster heraus, wo das Problem liegt. Mögliche Gründe: keine Verbindung mit dem Server; dem Expert Advisor wird kein Handel erlaubt; Handel mit Expert Advisors ist in MetaTrader 5 nicht erlaubt.
  • - Zeigt an, dass der Handel zulässig ist; HedgeTerminal darf jede Handelsaktivität ausführen.

Wenn HedgeTerminal gestartet wird und betriebsbereit ist, führen Sie jetzt einige Handel aus und sehen sich an, wie sie dargestellt werden. Wird HedgeTerminal auf Forex gestartet, werden Handelsaktivitäten auf dem AUDCAD Symbol ausgeführt. Es sollten keine offenen Netto-Positions vorhanden sein, denn die HedgeTerminal-Installation wird nur in diesem Fall erfolgreich sein. Sind doch noch Positions offen, alle aktiven Positions schließen.

Wird HedgeTerminal auf einem Konto gestartet, das mit der Moskauer Börse zusammenhängt, sollte Handel auf einem der Termingeschäfte der VTBR*-Gruppe ausgeführt werden, z.B. VTBR-13.15 oder VTBR-06.15. Zur Veranschaulichung: 0,4 Posten von AUDCAD zum aktuellen Kurs mittels des Standardfensters "NeueOrders" kaufen. In wenigen Augenblicken erscheinen die Orders und der Abschluss, der sie ausgeführt hat, in der Orders-Historie des Terminals:

Abb. 14 Historische Orders und ihr Abschluss in MetaTrader 5

Abb. 14 Historische Orders und ihr Abschluss in MetaTrader 5

Die Registerkarte 'aktive Positions' enthält eine entsprechende Long Position von 0,4 Posten:

Abb. 15 Aktive Netto-Position in MetaTrader 5

Abb. 15 Aktive Netto-Position in MetaTrader 5

Gleichzeitig zeigt das HedgeTerminal die historische Orders als eine aktive Position an:

Abb. 16 Aktive, bidirektionale Position im HedgeTerminal und ihr Abschluss

Abb. 16 Aktive, bidirektionale Position im HedgeTerminal und ihr Abschluss

Wie wir sehen, sind die Ergebnisse identisch, da eine Position in HedgeTerminal einer Netto-Position in MetaTrader 5 entspricht.

Bitte beachten Sie, dass zusätzlich zur Orders, die Position in HedgeTerminal einen Abschluss enthält, der diese Position ausgeführt hat (um ihn zu sehen, vergrößern Sie den Position-String durch Drücken von )

Ein Teil der aktiven Position kann verborgen werden. Dazu einfach einen neuen Volumenwert im Feld "Vol." eintragen. (Volumen). Das neue Volumen sollte geringer sein als das aktuelle Volumen. Die Differenz zwischen den aktuellen und neuen Volumen wird durch die neue Order abgedeckt, die eine historische Position bildet und in der entsprechenden Registerkarte für historische Positions angezeigt wird. Tragen Sie in dieses Feld den Wert 0,2 ein und klicken auf "Eingabe". Schon bald wird das Volumen der aktiven Position 0,2 sein und die Registerkarte 'historische Positions' zeigt die erste historische Transaktion mit dem Volumen 0,2 Posten (0,4 - 0,2 = 0,2):

Abb. 17 Historische, bidirektionale Position im HedgeTerminal

Abb. 17 Historische, bidirektionale Position im HedgeTerminal


Wir haben also die Hälfte unserer aktiven Positions geschlossen. Das gemeinsame Finanzergebnis der historischen und aktiven Position stimmt mit dem Ergebnis im Terminal überein.

Jetzt schließen wir noch alle übrigen aktiven Postions. Dazu die Schaltfläche zum Schließen einer Position im HedgeTerminal drücken:

Abb. 18 Schaltfläche zum Schließen einer bidirektionalen Position im HedgeTerminal

Abb. 18 Schaltfläche zum Schließen einer bidirektionalen Position im HedgeTerminal

Nachdem diese Schaltfläche gedrückt wurde, muss die restliche Postion durch die entgegengesetzte Order geschlossen werden und in die Registerkarte 'historische Position' übertragen werden. Auf diese Weise werden aktive Positions (sowohl in MetaTrader 5 als auch im HedgeTerminal) geschlossen.


2.4 Absicherung und Berechnung von Finanztransaktionen

In diesem Unterkapitel beschreiben wir Methoden zur Arbeit mit HedgeTerminal mit Hilfe verschiedener bidirektionaler Positions als Beispiel.

Derzeit haben wir ja keine aktiven Positions, daher eröffnen wir eine Long Position mit dem Volumen 0,2 Posten auf AUDCAD. Dazu muss man das Dialogfenster "neue Order" öffnen und eine entsprechende Order platzieren. Wurde die Postion geöffnet, sollte man sie mittels der gegensätzlichen Position sperren - 0,2 Posten via des MetaTrader 5 Terminals verkaufen.

Und jetzt sind die Handelsergebnisse im HedgeTerminal und im MetaTrader 5 Terminal-Fenster eben nicht mehr identisch. Das HedgeTerminal zeigt zwei Positions:

Abb. 19 Gegensätzliche bidirektionale Positions in HedgeTerminal (sperren)

Abb. 19 Gegensätzliche bidirektionale Positions in HedgeTerminal (sperren)

Und in MetaTrader 5 sind sie überhaupt nicht vorhanden:

Abb. 20 Keine aktive Netto-Position in MetaTrader 5 vorhanden

Abb. 20 Keine aktive Netto-Position in MetaTrader 5 vorhanden

Schauen wir uns das Ergebnis mal an. Es wurden 4 Abschlüsse ausgeführt Im Screenshot unten befinden sie sich im roten Rahmen:

Abb. 21 Ergebnis ausgeführter Abschlüsse in MetaTrader 5

Abb. 21 Ergebnis ausgeführter Abschlüsse in MetaTrader 5

Diese Abschlüsse platzieren wir nun in eine Tabelle:

TypRichtungKursVolumenGewinn, Preisschwankungen
Kaufen   hinein0,980880,2
Verkaufen   heraus0,980890,21
Kaufen   hinein0,982070,2
Verkaufen   heraus0,982080,21

Tabelle 1 Anzeige der Abschlüsse im MetaTrader 5 Terminal

Es ist klar zu erkennen, dass bei 4 Abschlüssen 2 Punkte erwirtschaftet wurden. Der Wert jedes Punkts liegt ca. bei USD 0,887 beim Handel mit 1 Posten. Das Finanzergebnis beläuft sich also auf USD 0,18 pro Position (0,887*0,2*1) oder 34 Cents für beide Positions. Die Spalte "Gewinn" zeigt, dass dieses Ergebnis richtig ist. Unser Nettogewinn beläuft sich auf 34 Cents.

Jetzt sehen wir uns mal das Ergebnis im HedgeTerminal an:

 Abb. 22 Ergebnis historischer bidirektionaler Positions im HedgeTerminal

Abb. 22 Ergebnis historischer bidirektionaler Positions im HedgeTerminal

Auf den ersten Blick scheint es einen großen Unterschied zu geben. Berechnen wir also das Ergebnis für unsere zwei bidirektionalen Positions:

RichtungEinstiegspreisAussstiegspreisGewinn, PreisschwankungenGewinn ($)
Kaufen0,980880,982080,0012021,28
Verkaufen0,980890,98207-0,00118-20,92

Tabelle 2 Anzeige der Positions im HedgeTerminal

Der Unterschied zwischen beiden beläuft sich auf USD 0,34 (21,28 - 20,92) - exakt das gleiche Ergebnis wie das des Netto-Handels.


2.5 Handel mit einem Klick

HedgeTerminal setzt ein spezielles Verwaltungssystem ein, das auf der direkten Eingabe der erforderlichen Werte in das Feld 'aktive Position' beruht. Sonst gibt es keine andere Verwaltung.

Um z.B. für eine aktive Position einen StopLoss zu platzieren, geben Sie einfach den erforderlichen Wert in das StopLoss Feld ein und klicken dann auf 'Eingabe'.

Abb. 23 Eingabe der StopLoss-Stufe direkt in die Tabelle

Abb. 23 Eingabe der StopLoss-Stufe direkt in die Tabelle

Ganz genauso kann ein Händler das Volumen ändern, TakeProfit platzieren oder seine Stufe sowie den ursprünglichen Kommentar ändern.

Insgesamt ähnelt die Position-Zeile im HedgeTerminal der Position-Anzeige in MetaTrader 4/5 sehr. Die Tabellen spalten mit den Positions haben die gleichen Namen und Werte, wie die in den MetaTrader Terminals verwendeten. Doch es gibt auch Unterschiede. Eine Position im HedgeTerminal besitzt z.B. zwei Kommentare - eine in MetaTrader hat nur einen Kommentar. Das heißt, dass eine Position im HedgeTerminal von zwei Orders gebildet wird und jede dieser beiden Orders ihr eigenes Kommentar-Feld besitzt. Da HedgeTerminal diese Kommentare nicht zur Speicherung technischer Information nutzt, kann man durchaus eine Position mit einem Kommentar zur Eröffnung und zum Schließen erzeugen.

HedgeTerminal bietet auch die Möglichkeit, Spalten hinzuzufügen, die nicht bereits standardmäßig angezeigt werden - so z.B. eine Spalte mit dem Namen des Expert Advisors, der die Position eröffnet hat. Wie man dies tut, wird im Abschnitt beschrieben, der sich mit der Konfiguration der Settings.xml Datei beschäftigt.


2.6 Platzierung von StopLoss und TakeProfit, Trailing Stop

Das HedgeTerminal gestattet das Schließen von Positions nach den StopLoss oder TakeProfit Stufen.

Um zu sehen, wie das geht, müssen Sie die StopLoss und TakeProfit Stufen in die aktive Position einführen und warten, bis eine dieser Stufen ausgelöst wird: in unserem Fall war das TakeProfit. Es hat die Position geschlossen und sie in die Liste der historischen Transaktionen verschoben:

Abb. 24 Historische bidirektionale Position und ihre StopLoss und TakeProfit Stufen

Abb. 24 Historische bidirektionale Position und ihre StopLoss und TakeProfit Stufen

Die grüne Markierung in derTakeProfit Stufe gibt an, dass TakeProfit ausgelöst wurde und die Position von dieser Stufe geschlossen worden ist. Zusätzlich zu TakeProfit, enthält eine Position gewisse Informationen über die StopLoss Stufe, die auch verwendet wurde, als die Position aktiv war. Und ganz ähnlich: Wird StopLoss ausgelöst, würde die StopLoss Zelle farblich unterlegt und TakeProfit logischerweise eben nicht.

HedgeTerminal unterstützt TrailingStop, und zukünftige Versionen werden es ermöglichen, ein spezifisches, angepasstes Modul mit der Logik der Übertragung für StopLoss zu schreiben. Derzeit unterscheidet sich die Arbeit mit Trailing Stop im HedgeTerminal noch stark vom gleichen Trailing Stop im MetaTrader Terminal. Um TrailingStop zu aktivieren, muss eine StopLoss Stufe in der StopLoss Zelle der entsprechenden Position eingegeben werden. Wird StopLoss platziert, kann die Option 'dem Kurs folgen' in der Zelle angemarkert werden, die mit einem Zeichen versehen ist :

Abb. 25 Platzierung des Trailing Stop im HedgeTerminal

Abb. 25 Platzierung des Trailing Stop im HedgeTerminal

Nach der Markierung fixiert HedgeTerminal den Abstand zwischen dem aktuellen Kurs und der StopLoss Stufe. Wird er größer, folgt StopLoss dem Kurs, damit der Abstand immer gleich bleibt. Trailing Stop arbeitet nur dann, Wenn das HedgeTerminal funktioniert und wird beim Verlassen geleert.

StopLoss wird im HedgeTerminal mit den BuyStop- und SellStop-Orders implementiert. Jedes Mal Wenn ein StopLoss platziert wird, wird gleichzeitig eine entsprechende Order mit einer magischen Zahl, die mit der aktiven Position verknüpft ist, ebenfalls platziert. Wird diese pending Order im MetaTrader Terminal gelöscht, erscheint die StopLoss Stufe in HedgeTerminal nicht mehr. Eine Änderung des Kurses der pending Order löst eine Änderung des StopLoss im HedgeTerminal aus.

TakeProfit arbeitet leicht anders. Es ist virtuell und zeigt dem Makler seine Auslöserstufe nicht, d.h.: das HedgeTerminal schließt eine Position per TakeProfit selbständig. Wenn Sie also möchten, dass Ihr TakeProfit ausgelöst wird, müssen Sie Ihr HedgeTerminal in arbeitsfähriger Ordnung halten.


2.7 Erzeugung von Berichten

HedgeTerminal ermöglicht das Speichern von Information zu seinen bidirektionalen Positions in entsprechend dazu bestimmte Dateien, die dann in Statistikprogrammen Dritter, wie z.B. Microsoft Excel, geladen werden können.

Da HedgeTerminal derzeit über kein System zur Analyse und Sammlung von Statistikdaten verfügt, ist dieses Merkmal sehr wichtig. Derzeit wird nur ein Format zur Berichtspeicherung unterstützt - CSV (Durch-Kommata-Getrennte-Werte). Sehen wir uns an, wie es funktioniert. Um bidirektionale Positions in einer CSV-Datei zu speichern, wählen Sie nach dem Start des HedgeTerminals im Menü "CSV Bericht speichern":


Abb. 26 Speichern eines Berichts mittels des Menüs "CSV Bericht speichern"

Nach Auswahl dieser Punkte im Menü, legt HedgeTerminal zwei Dateien im CSV-Format an. Eine enthält die Informationen über aktive Positions, die andere über historische, also abgeschlossene Positions. Der Grund, warum zwei unterschiedliche Dateien erzeugt werden, ist, dass ja jede Datei ein anderes Spalten-Set hat. Und da sich übrigens die Anzahl der aktiven Position ja dauernd ändern kann, ist es viel bequemer, sie separat zu analysieren. Auf die angelegten Dateien kann mittels des relativen Pfads .\HedgeTerminal\Makler\<Maklername - Kontonummer> \ zugegriffen werden. Am Schluss muss es zwei Dateien geben: History.csv und Active.csv. Die erste enthält Informationen über historische Positions; die zweite über aktive Positions.

Diese Dateien können dann zu Analysezwecken in Statistikprogramme geladen werden. Wie das geht sehen wir uns nun am Beispiel von Microsoft Excel an. Starten Sie das Programm und wählen "Daten" --> vom Text". Wählen Sie im nun offenen Datenexport-Assistenten die Variante mit den Trennzeichen und wählen im folgenden Fenster einen Strichpunkt als Trenner aus. "Weiter" anklicken. Ändern Sie im folgenden Fenster das allgemeine Format der Darstellung von Gleitkommazahlen. Dazu"Details" anklicken. Wählen Sie nun im aufgegangenen Fenster den Punkt als Trennzeichen zwischen ganzer Zahl und Bruchstellen:

Abb. 27 Einen CSV-Bericht in Microsoft Excel exportieren

Abb. 27 Einen CSV-Bericht in Microsoft Excel exportieren

Zunächst "ОК" und dann "Beenden" anklicken. Die nun erscheinende Tabelle zeigt alle Informationen über aktive Positions:

Abb. 28 Informationen über aktive Positions, die in Excel exportiert wurde

Abb. 28 Informationen über aktive Positions, die in Excel exportiert wurde

Daten zu historischen Positions können auf genau die gleiche Art und Weise in die nächste Excel-Tabelle geladen werden. Die Anzahl der Spalten entspricht exakt der tatsächlichen Anzahl von Spalten im HedgeTerminal. Wird also eine Spalte aus dem HedgeTerminal-Panel gelöscht, wird sie nicht in den Bericht mit aufgenommen . Das ist ein ganz bequemer Weg, einen Bericht auf Basis nur der wirklich benötigten Daten zu erstellen.

In späteren Versionen des Programms kann ein Bericht dann auch im XML- und HTML-Format gespeichert werden. Darüber hinaus wird ein im HTML-Format gespeicherter Bericht seht stark einem Standard HTML-Bericht in MetaTrader 5 ähneln, obwohl er aus abgeschlossenen, bidirektionalen Positions besteht.


2.8 Darstellung von Währungsswaps

Ein Währungsswap ist eine Kombination zweier bidirektionaler Umwandlungsabschlüsse für die gleiche Summe mit unterschiedlichen Bewertungszeitpunkten.

Einfacher gesagt: ein Swap ist eine derivative Maßnahme beim Anfallen des Differenz der für das Halten zweier Währungen, die eine Netto-Position bilden, bezahlten Zinsen.

In MetaTrader5 gibt es keine Netto-Position-History. Es gibt stattdessen historische Orders und Abschlüsse, die historische Netto-Positions gebildet und geschlossen haben. Und da es keine historischen Positions gibt, wird der Swap der Order zugewiesen, die eine historische Position schließt:

 Abb. 29 Währungsswap als eine unabhängige Transaktion

Abb. 29 Währungsswap als eine unabhängige Transaktion

Eigentlich wäre es präziser, den Swap als eine unabhängige derivative Maßnahme zu beschreiben, die infolge der Verlängerung einer Netto-Position auftritt.

Die aktuelle HedgeTerminal-Version unterstützt die Darstellung von Swaps nicht, doch die späteren Versionen werden dies sehr wohl können. Dort wird dann ein Swap als eine separate historische Position in der Registerkarte 'Historische Position' angezeigt werden. Der Swap-Identifikator wird dem Identifikator der Netto-Position entsprechen, auf der der Swap entstanden ist. Der Swap umfasst dann auch den Namen des Währungspaars und sein Finanzergebnis.


2.9 Die letzte Reihe

Ähnlich wie beim MetaTrader, zeigt das HedgeTerminal die letzte Reihe mit gemeinsamen Merkmalen für das gesamte Konto in der Abschlüsse-Tabelle an. Für die Tabelle der aktiven und historischen Positions sind diese Merkmale und ihre Werte im Folgenden aufgeführt:

    Saldo – Gesamtsaldo Ist gleich dem vergleichbaren Wert "Profit" im Fenster der aktiven Positions in MetaTrader. Berücksichtigt nicht den Floating Profit oder den Loss offener Positions.
    Floating P/L – Floating Profit/Loss. Ist gleich der Summe des Gewinns aller derzeit aktiven Positions.
    Marge – Enthält den Anteil der zugesagten Geldmittel vom Kontotand in Prozent. Kann von 0% - 100% reichen. Gibt das Ausmaß der Belastung des Depots an.
    Insgesamter P/L – Enthält die Summe aller Profits und Losses für geschlossene Positions.
    Pos. Nr.: - Zeigt die Zahl der historischen Positions an.

Damit die letzte Reihe auch korrekt dargestellt werden kann, muss man im Computer die Schriftart "Arial Rounded MT Bold" hinzufügen.


2.10 Änderung des Aussehens der HedgeTerminal Tabellen

Wie bereits erwähnt, hat HedgeTerminal nur einen expliziten Parameter im Fenster des Expert-Starts - den Namen der Einstellungen-Datei. Und zwar deswegen, weil die Einstellungen des HedgeTerminals nicht in das Fenster der Expert-Einstellungen platziert werden können, denn es sind viele und für so ein Fenster viel zu spezifisch. Aus diesem Grund sind alle Einstellungen in der extra zugewiesene Konfigurationsdatei Settings.xml abgelegt. Für jede gestartete Version des HedgeTerminals gibt es daher eine eigene Datei mit Einstellungen. Damit kann man jede gestartete Version des HedgeTerminals individuell konfigurieren.

HedgeTerminal gestattet derzeit die Bearbeitung dieser Datei in den visuellen Fenstern der Einstellungen nicht. Daher ist die einzige Möglichkeit, das Verhalten des HedgeTerminals zu ändern, per manueller Bearbeitung dieser Datei. Die Einstellungen-Datei ist optimal per Standardeinstellungen konfiguriert, sodass meistens kein Inhalt bearbeitet werden muss. Doch kann es schon auch vorkommen, dass eine derartige Bearbeitung notwendig wird, z. B. zur Feinjustierung und Anpassung des Panel-Aussehens. Wenn beispielsweise eine Datei bearbeitet worden ist, können unnötige Spalten gelöscht oder, im umgekehrten Fall, per Standardeinstellung nicht angezeigte Spalten hinzugefügt werden.

Sehen wir uns den Inhalt dieser Datei mal an und schauen, wie wir sie anpassen können. Dazu müssen wir diese Datei im Directory finden, in dem HedgeTerminal seine Dateien installiert hat. Dieses Directory, und auch das wissen Sie bereits, findet sich unter der Adresse c:\Users\<your user name>\AppData\Roaming\MetaQuotes\Terminal\Common\Files\HedgeTerminal. Die Datei Settings.xml befindet sich in diesem Directory. Öffnen Sie sie mit Hilfe jedes Text-Editors:

<!--This settings valid for HedgeTerminal only. For settings HedgeTerminalAPI using API function and special parameters.-->
<Hedge-Terminal-Settings>
        <!--This section defines what columns will be showed on the panel.-->
        <Show-Columns>
                <!--You can change the order of columns or comment not using columns.-->
                <!--You can change the value of 'Width' for a better scaling of visual table.-->
                <!--You can change the value of 'Name' to install your column name.-->
                
                <!--This columns for tab 'Active'-->
                <Active-Position>       
                        <Column ID="CollapsePosition" Name="CollapsePos." Width="20"/>
                        <!-- Unset this comment if you want auto trading and want see name of your expert:
                        <Column ID="Magic" Name="Magic" Width="100"/>-->
                        <Column ID="Symbol" Name="Symbol" Width="70"/>
                        <Column ID="EntryID" Name="Entry ID" Width="80"/>
                        <Column ID="EntryDate" Name="Entry Date" Width="110"/>
                        <Column ID="Type" Name="Type" Width="80"/>
                        <Column ID="Volume" Name="Vol." Width="30"/>
                        <Column ID="EntryPrice" Name="EntryPrice" Width="50"/>
                        <Column ID="TralStopLoss" Name="TralSL" Width="20"/>
                        <Column ID="StopLoss" Name="S/L" Width="50"/>
                        <Column ID="TakeProfit" Name="T/P" Width="50"/>
                        <Column ID="CurrentPrice" Name="Price" Width="50"/>
                        <Column ID="Commission" Name="Comm." Width="40"/>
                        <Column ID="Profit" Name="Profit" Width="60"/>
                        <Column ID="EntryComment" Name="Entry Comment" Width="100"/>
                        <Column ID="ExitComment" Name="Exit Comment" Width="100"/>
                </Active-Position>
                <!--This columns for tab 'History'-->
                <History-Position>
                        <Column ID="CollapsePosition" Name="CollapsePos." Width="20"/>
                        <!-- Unset this comment if you want auto trading and want see name of your expert:
                        <Column ID="Magic" Name="Magic" Width="100"/>-->
                        <Column ID="Symbol" Name="Symbol" Width="70"/>
                        <Column ID="EntryID" Name="Entry ID" Width="80"/>
                        <Column ID="EntryDate" Name="Entry Date" Width="110"/>
                        <Column ID="Type" Name="Type" Width="40"/>
                        <Column ID="EntryPrice" Name="Entry Price" Width="50"/>
                        <Column ID="Volume" Name="Vol." Width="30"/>
                        <Column ID="ExitPrice" Name="Exit Price" Width="50"/>
                        <Column ID="ExitDate" Name="Exit Date" Width="110"/>
                        <Column ID="ExitID" Name="Exit ID" Width="80"/>
                        <Column ID="StopLoss" Name="S/L" Width="50"/>
                        <Column ID="TakeProfit" Name="T/P" Width="50"/>
                        <Column ID="Commission" Name="Comm." Width="40"/>
                        <Column ID="Profit" Name="Profit" Width="50"/>
                        <Column ID="EntryComment" Name="Entry Comment" Width="90"/>
                        <Column ID="ExitComment" Name="Exit Comment" Width="90"/>
                </History-Position>
        </Show-Columns>
        <Other-Settings>
                <Deviation Value="30"/>
                <Timeout Seconds="180"/>
                <!-- If your computer is not fast enough - set a value 'Milliseconds' greater than 200, such as 500 or 1000. -->
                <RefreshRates Milliseconds="200"/>
        </Other-Settings>
</Hedge-Terminal-Settings>

Diese Datei enthält ein spezielles Dokument, das in the xml Markup-Sprache geschrieben ist, und das Verhalten und Aussehen des HedgeTerminals beschreibt.

Das Wichtigste vor Beginn der Bearbeitung ist, eine Backup-Kopie anzulegen, für den Fall, dass die Datei versehentlich korrumpiert wird. Die Datei hat eine hierarchische Struktur und besteht aus verschiedenen, ineinander verschachtelter Abschnitte. Der Hauptabschnitt heißt <Hedge-Terminal-Einstellungen>und enthält zwei Unterabschnitte: <Spalten-Anzeigen> und <Weitere-Einstellungen>. Wie ihre Namen schon vermuten lassen, passt der erste Abschnitt die angezeigten Spalten und ihre jeweilige Breite an und der zweite Abschnitt enthält alle Einstellungen für das Panel an sich und die HedgeTerminalAPI-Library.

Die Größe und den Namen der Spalten ändern. Wenden wir uns zunächst dem Abschnitt <Spalten-Anzeigen> zu und sehen uns seinen Aufbau an. Dieser Abschnitt enthält im Grunde zwei Sets an Spalten: eins für die Tabelle der aktiven Positions in der Registerkarte "Aktiv" und ein weiteres für die Tabelle der historischen Positions in der Registerkarte "History". Jede Spalte in einem der Sets sieht so aus:

<Column ID="Symbol" Name="Symbol" Width="70"/>

Die Spalte muss einen Identifikator enthalten (ID="Symbol"), den Namen der Spalte (Name="Symbol") und die abhängige Spaltenbreite (Breite="70").

Der Identifikator enthält einen eindeutigen internen Namen der Spalte und fragt das HedgeTerminal, wie diese Spalte angezeigt werden und welcher Wert in sie eingetragen werden soll. Der Identifikator kann nicht verändert werden und sollte vom HedgeTerminal unterstützt werden.

Der Spaltenname legt fest, unter welchem Namen die Spalte in der Tabelle angezeigt werden wird. Wir dieser Name in einen anderen geändert, z.B.: Name="Währungspaar", ändert sich beim nächsten Start des HedgeTerminals der Name der Spalte, die das Symbol anzeigt:


Abb. 30 Änderung des Spaltennamens im HedgeTerminal Panel

Und genau diese Eigenschaft erlaubt eine lokalisierte Version des Panels zu erzeugen, wo der Name jeder Spalte in der bevorzugten Sprache angezeigt wird, z.B. auf Russisch:

 Abb. 31 Die HedgeTerminal Panel-Lokalisierung

Abb. 31 Die HedgeTerminal Panel-Lokalisierung

Die nächste Markierung enthält die jeweilige Spaltenbreite. Hier muss man wissen, das eine Grafikmaschine die Spaltengröße automatisch an die Breite des Fensters anpasst, in dem das Panel gestartet wird - je breiter das Fenster, umso breiter jede Spalte. Es ist nicht möglich, die Breite jeder Spalte exakt einzurichten, doch die Proportionen können angegeben werden, indem man die Grundbreite der Spalte einrichtet. Diese Grundbreite ist die Breite jeder Spalte in Pixel, wenn die Breite des Fensters 1280 Pixel beträgt.

Ist Ihr Display breiter, dann wird die tatsächliche Größe der Spalte auch größer. Zur Veranschaulichung, wie einheitliche Skalierung funktioniert, stellen Sie die Breite der Symbol-Spalte als 240 abhängige Pixel ein: Breite="240". Anschließend die Datei speichern und das Panel zurücksetzen:

Abb. 32 Die Breite der Symbol-Spalte ist auf 240 Pixel eingestellt.

Abb. 32 Die Breite der Symbol-Spalte ist auf 240 Pixel eingestellt.

Die Breite der Spalte mit den Symbolen hat sich erheblich ausgedehnt. Doch es sollte Ihnen klar sein, dass diese breitere Spalte auf Kosten der Spaltenbreite anderer Spalten geht ("Einstiegs-ID"  und "Einstiegs-Datum").

Andere Spalten schauen jetzt schlechter aus und die letzten Werte passen nicht mehr in die zugelassene Breite. Daher sollte die Größe der Spalten sehr sorgfältig verändert werden, damit man für jede Spalte auch die optimalen Dimensionen erhält. Die Standardeinstellungen haben für die meisten Displays exakte Werte, sodass man normalerweise ihre Größe nicht verändern muss.

Spalten löschen. Zusätzlich zur Änderung der Spaltengrößen und ihrer Kopfzeilen, können auch Spalten hinzugefügt oder gelöscht werden. Versuchen wir doch mal die Spalte "Symbol" aus der Liste zu löschen Dazu einfach die Markierung der Spalte in der Datei Settings.xml (gelb unterlegt) auskommentieren:

<Column ID="CollapsePosition" Name="CollapsePos." Width="20"/>
<!-- Unset this comment if you want auto trading and want see name of your expert:
<Column ID="Magic" Name="Magic" Width="100"/>-->
<!--<Column ID="Symbol" Name="Symbol" Width="70"/>-->
<Column ID="EntryID" Name="Entry ID" Width="80"/>

In XML erfüllt eine spezifische Markierung <!-- Inhalt des Kommentars --> die Rolle des Kommentars. Die auskommentierte Spalte muss sich in der Markierung befinden. Nachdem die Änderungen in der Datei gespeichert worden sind und HedgeTerminal erneut gestartet wurde, ändert sich sein Set an Spalten für historische Positions. Es gibt dort keine Spalte mehr, die das Symbol anzeigt:

Abb. 33 Löschen der Symbol-Spalte aus der Tabelle der aktiven Positions

Abb. 33 Löschen der Symbol-Spalte aus der Tabelle der aktiven Positions

Es können mehrere Spalten auf einmal gelöscht werden.

Kommentieren wir alle Spalten aus, außer dem Symbolnamen und der Gewinngröße und starten anschließend das HedgeTerminal auf dem Chart:

Abb. 34 Löschen hauptsächlicher Spalten aus dem HedgeTerminal-Panel

Abb. 34 Löschen hauptsächlicher Spalten aus dem HedgeTerminal-Panel

Wie wir sehen, ist die HedgeTerminal Tabelle ganz schön kleiner geworden. Beim Löschen von Spalten sollte man sorgfältig vorgehen, da sie in manchen Fällen Elemente zur Position-Verwaltung enthalten. In unserem Fall wurde z.B. die Spalte gelöscht, die die Umkehrung von Positions ermöglicht und ihre Abschlüsse anzeigt. Selbst die Spalte "Gewinn" aus der Tabelle der aktiven Positions kann gelöscht werden. Sie jedoch enthält eine Schaltfläche zum Schließen einer Position. In diesem Fall wird also eine Position nicht geschlossen, da ja nun die entsprechende Schaltfläche fehlt.

Spalten ergänzen und Experts-Pseudonyme anzeigen. Spalten können durch Bearbeitung gelöscht und ergänzt werden, wenn das HedgeTerminal so programmiert wurde, das es mit ihnen arbeitet. In Zukunft kann jeder Benutzer seine eigenen Spalten anlegen und ihre eigenen Parameter berechnen. Derartige Spalten können dann via der Schnittstelle des externen iCustom-Indikators und dem Interaktionsverzeichnis mit Erweiterungsmodulen, das in XML geschrieben ist, verknüpft werden.

Diese Funktionalität gibt es derzeit leider noch nicht, sodass nur die Spalten, die von HedgeTerminal unterstützt werden, zur Verfügung stehen. Die einzige, vom Panel unterstützte, aber nicht per Standard in den Einstellungen angezeigte Spalte, ist die Spalte mit der magischen Zahl des Experts.

eine Position kann nicht nur manuell, sonder auch mit Hilfe eines Roboters eröffnet werden. In diesem Fall, kann der Identifikator des Roboters, der eine Position eröffnet hat, für jede Position angezeigt werden. Die auskommentierte Spalten-Markierung inkl. der Zahl des Expert Advisors ist in der Einstellungen-Datei bereits vorhanden. Machen wir diesen Kommentar hinfällig:

<Column ID="Magic" Name="Magic" Width="100"/>

Änderungen speichern und das Panel neu starten

Abb. 35 Ergänzung der HedgeTerminal-Tabelle mit der magischen Zahl

Abb. 35 Ergänzung der HedgeTerminal-Tabelle mit der magischen Zahl

Wie wir in der obigen Abbildung erkennen können, erscheint eine Spalte namens "Magisch" . Dies ist der Identifikator des Expert Advisors, der eine Position eröffnet hat. Sie wurde manuell eröffnet und daher ist der Wert des Identifikators = "0". Eine von einem Roboter eröffnete Position hat in der Regel immer einen Identifikator mit einem anderen Wert als "0". In diesem Fall wird in der Spalte eine entsprechende magische Zahl des Experts angezeigt.

Es ist jedoch weitaus angenehmer, die Namen der Expert Advisors, anstatt ihre Ziffern angezeigt zu bekommen: HedgeTerminal besitzt diese Option. Es nimmt die Pseudonyme (Namen) der EAs, die aus der ExpertAliases.xml Datei geholt wurden und zeigt sie anstelle der entsprechenden magischen Zahlen an.

Haben Sie z.B. einen Expert namens "ExPro 1.1" und einen Handel unter der magischen Zahl 123847, genügt es, die folgende Markierung in die ExpertsAliases.xml Datei im Abschnitt <Expert-Pseudonyme> zu platzieren:

<Expert Magic="123847" Name="ExPro 1.1"></Expert>

Wenn Ihr Roboter eine neue Position eröffnet, trägt sie ab jetzt seinen Namen:

Abb. 36 Der Name des Experts wird in der Spalte "Magisch" angezeigt

Abb. 36 Der Name des Experts wird in der Spalte "Magisch" angezeigt

Die Anzahl der Roboter und ihrer Namen ist nicht beschränkt. Die einzige Bedingung hier ist: ihre Ziffern müssen unterschiedlich sein.

Weitere Einstellungen des HedgeTerminals Jetzt haben wir alle Einstellungen des visuellen Panels beschrieben, die derzeit zur Verfügung stehen. Der nächste Abschnitt <Weitere-Einstellungen> behandelt die Einstellungen zur Festlegung der internen Arbeit des Terminals. Bitte beachten Sie, das die Programmaufruf-Library HedgeTerminalAPI diese Einstellungen als Standardwerte benutzt. Der Expert Advisor kann jedoch die aktuellen Werte dieser Einstellungen mittels der speziellen Set... Funktionen ändern. Um die Werte für diese Einstellungen zu bekommen, muss der Expert nur die speziellen Set... Funktionen aufrufen. Wir beschreiben die Markierungen mit Einstellungen jetzt detaillierter.

<Deviation Value="30"/>

Enthalten den Wert der extremen Abweichung vom erforderlichen Kurs in Einheiten minimaler Kursveränderung. Für das Währungspaar EURUSD, das bis zur fünften Dezimalstellen notiert wird, wäre das also 0,0003 Punkte. Für das Termingeschäft des RTS-Index wäre dieser Wert 300 Punkte, da der Mindestschritt der Kursänderung 10 Punkte beträgt. Ist die Kursabweichung größer werden die Orders zum Schließen oder Ändern des Kurses nicht ausgeführt. Dies dient zum Schutz vor ungünstigem Slippage.

<Timeout Seconds="180"/>

Diese Markierung enthält den Wert der maximal zulässigen Antwort vom Server, Das HedgeTerminal arbeitet im asynchronen Modus, d.h.: es schickt ein Handelssignal an den Server ohne auf seine Antwort zu warten. Stattdessen kontrolliert HedgeTerminal die Abfolge der Ereignisse, die auf die Tatsache hindeuten, dass die Oder erfolgreich platziert wurde. Das Ereignis muss dabei gar nicht stattfinden. Au diesem Grund ist es so wichtig, den Timeout-Zeitraum fürs Warten einzurichten, während dem das HedgeTerminal auf eine Antwort vom Server wartet. Kommt während dieses Zeitraums keine Antwort, wird die Aufgabe annulliert, HedgeTerminal gibt dei Position wieder frei und arbeitet einfach weiter.

Der Timeout-Zeitraum fürs Warten kann verkürzt oder verlängert werden. Seine Standardeinstellung beträgt 180 Sekunden.

Hierbei sollte man unbedingt wissen, dass dieser Grenzwert im echten Handel niemals erreicht wird. Antworten auf Handelssignale gehen rasch ein, der Großteil dauert zwischen 150 – 200 Millisekunden.

Mehr Einzelheiten über die Arbeit des Hedge-Terminals und die Besonderheiten der Arbeit im asynchronen Modus finden Sie im dritten Teil dieses Beitrags: "Das Innenleben des HedgeTerminal".

<RefreshRates Milliseconds="200"/>

Diese Markierung stellt die Häufigkeit der Panel-Aktualisierungen ein und enthält die Zeit zwischen zwei folgenden Panel-Aktualisierungen in Millisekunden. Je kleiner dieser Wert ist, umso öfter wird das Panel aktualisiert und umso mehr CP-Ressourcen werden gebraucht. Wenn Sie keinen besonders leistungsfähigen Prozessor haben und er nicht mit einer Aktualisierungs-Häufigkeit von 200 Millisekunden (Standardwert) zurecht kommt, können Sie durch Bearbeiten dieser Markierung die Häufigkeit auf 500 oder sogar 1000 Millisekunden senken.

Denn dann wird sich die CP-Belastung erheblich verringern. Werte von weniger als 100 Millisekunden werden nicht empfohlen. Denn durch ein Erhöhen der Aktualisierungs-Häufigkeit nimmt auch die CP-Belastung zu, und zwar nicht linear. Hierbei muss man unbedingt verstehen, dass die Aktualisierungs-Häufigkeit die Unbeständigkeit des Terminals festlegt. Einige dieser Abläufe werden durch diesen Timer festgelegt und laufen mit einer gewissen Geschwindigkeit ab.


2.11 Geplante, jedoch noch nicht implementierte Features

HedgeTerminal besitzt eine flexible, nicht-triviale Architektur aufgrund derer neue nicht-triviale Fähigkeiten dieses Programms machbar werden. Diese Fähigkeiten sind derzeit noch nicht implementiert, doch kann sich das in Zukunft, wenn entsprechende Nachfrage besteht, rasch ändern. Und dies sind die wichtigsten:

Verwendung von Farbschemata und Hüllen. HedgeTerminal arbeitet mit seiner eigenen Grafikmaschine, die auf den grafischen Stammfunktionen wie eine rechteckige Kennzeichnung oder einen gewöhnlichen Text beruht. Auf Bildern beruhende Grafik wird überhaupt nicht verwendet. Dadurch hat man die Möglichkeit, die Farbe, Größe und Schriftart aller im HedgeTerminal angezeigten Elemente zu ändern. Somit ist es leicht eine Beschreibung der Schriftarten und des Farbschemas in Form einer Hülle zu erzeugen und sie beim Start des HedgeTerminals zu laden, um damit sein Aussehen zu verändern.

Anbindung individuell angepasster Trailing Stop Module. Jeder Expert, und das HedgeTerminal ist im Grunde ja ein Expert, kann eine Berechnung eines zufälligen Indikators mittels einer spezifischen Programmschnittstelle in Gang setzen (iCustom() Funktion). Sie erlaubt, die Indikatorberechnung aufzurufen, die vom Set der zufälligen Parameter abhängt. Trailing Stop ist ein Algorithmus, der eine neue Kursstufe platziert oder die alte beibehält, je nach dem aktuellen Kurs. Dieser Algorithmus und seine Kursstufen können als ein Indikator implementiert werden. Wird den übertragenen Parametern zugestimmt, kann HedgeTerminal so einen Indikator aufrufen und die benötigte Preisstufe berechnen. HedgeTerminal kümmert sich auch um die Mechanik der Übertragung des Trailing Stops. Somit kann jeder HedgeTerminal Nutzer sein eigenes Modul (selbst das ungewöhnlichste) zur Verwaltung von Trailing Stops schreiben.

Neue Spalten in die Tabelle der Positions einfügen. Umfasst auch individuell angepasste Spalten. Die Tabellen des HedgeTerminals sind so konzipiert, dass man neue Spalten einfügen kann. Unterstützung neuer Spalten kann innerhalb des HedgeTerminals programmiert und auf gewohnte Weise mittels der iCustom() Schnittstelle implementiert werden. Jede Zelle in der Zeile einer Position repräsentiert einen Parameter (z.B. Eröffnungskurs oder TakeProfit Stufe). Dieser Parameter kann von einem Indikator berechnet werden und das bedeutet, dass eine unbegrenzte Anzahl von Indikatoren geschrieben werden kann, sodass jeder einen Parameter für eine Position berechnet. Wird die Übertragung der Parameter an solche Indikatoren koordiniert, wird es möglich, eine unbegrenzte Anzahl von individuell angepassten Spalten in eine Tabelle im HedgeTerminal einzufügen.

Erweiterungsmodule anbinden Andere Berechnungsalgorithmen können mit Hilfe des Mechanismus des Aufrufs des angepassten Indikators berechnet werden. So umfasst das Berichtssystem z.B. viele Berechnungsparameter wie z.b. erwartete Auswahl und Sharpe-Ratio. Viele dieser Parameter erhält man durch Verschieben ihres Berechnungsblocks in den angepassten Indikator.

Abschlüsse kopieren und erhalten sowie Abschlüssen aus anderen Konten übertragen. HedgeTerminal ist im Grunde auch ein Verwalter von Positions und kann daher leicht als Basis zum Kopieren von Abschlüssen dienen, da die Hauptfunktionalität dazu bereits implementiert worden ist. So ein "Kopierer" besitzt nicht-triviale Fähigkeiten zum Kopieren bidirektionaler MetaTrader 4 Positions in den MetaTrader 5 Terminal. Er zeigt diese Positions als bidirektional an, genauso wie in MetaTrader 4, jedoch mit der Möglichkeit, jede Position individuell zu veralten.

Berichte und Statistik. Der Eigenkapital-Chart und die Registerkarte "Zusammenfassung". Das Zählen von bidirektionalen Positions gestattet die Analyse ihres Beitrags zum Ergebnis jeder Strategie oder jeden Händlers. Neben einer Statistik kann auch eine Portfolio-Analyse durchgeführt werden. Dieser Bereich kann sich allerdings ganz deutlich vom Bericht in MetaTrader 5 unterscheiden und diesen ergänzen. Im Bericht der Registerkarte 'Zusammenfassung' werden zusätzlich zu den allgemein akzeptierten Parametern wie erwartete Auszahlung, maximale Inanspruchnahme, Gewinnfaktor usw. auch andere Parameter mit aufgenommen. Ihre Namen und Werte kann man aus den individuell angepassten Erweiterungsmodulen erhalten. Anstatt des bekannten Saldocharts auf einer Abbildung, kann nun der Eigenkapital-Chart in Form eines angepassten Kerzen-Börsencharts verwendet werden.

Spalten sortieren. Reihen werden meistens durch Drücken auf die Tabellenkopfzeile sofort in auf- oder absteigender Reihenfolge sortiert (zweites Drücken). Die aktuelle Version des HedgeTerminals unterstützt diese Option nicht, da Sortieren mit dem Filter der Abschlüsse zusammenhängt und dem angepassten Set der Spalten zusammenhängt, die beide im Moment nicht zur Verfügung stehen. Spätere Versionen werden diese Merkmale allerdings haben.

Einen Handelsbericht per E-Mail, ftp abschicken. Push-Benachrichtigungen. Das HedgeTerminal kann die Systemfunktionen zum Abschicken von E-Mails, ftp-Dateien und sogar Push-Benachrichtigungen einsetzen. So kann es z.B. einen HTML-Bericht einmal am Tag anlegen und ihn an die Liste der Benutzer schicken. Da das HedgeTerminal ja ein Expert Advisor-Manager ist und alle Handelsabläufe von anderen EAs kennt, kann es demzufolge Benutzer auch über Handelsaktivitäten anderer Expert Advisors informieren. Eröffnet z.-B. einer der EAs eine neue Position, kann das HedgeTerminal eine Push-Benachrichtigung abschicken, und seine Benutzer informieren, dass ein gewisser Expert eine neue Position lanciert hat. Das HedgeTerminal gibt dabei auch die Richtung des Einstiegs, sein Datum, Uhrzeit und das Volumen an. Dazu muss der EA selbst nicht konfiguriert werden - es genügt seinen Namen in die Pseudonym-Liste einzutragen

Positions filtern mittels der regulären Ausdrucks-Konsole. Dies ist die leistungsfähigste aller geplanten Entwicklungen. Sie bringt die Arbeit des HedgeTerminals auf eine komplett neue Ebene. Reguläre Ausdrücke können zum Filtern historischer und aktiver Positions benutzt werden, sodass nur diejenigen angezeigt werden, die die Anforderungen dieses Filters auch erfüllen. Reguläre Ausdrücke können kombiniert und in einer dezidierten Konsole oberhalb der Tabelle der aktiven und historischen Positions eintragen werden. Und so könnte die Konsole in den zukünftigen Versionen des HedgeTerminals aussehen:

Abb. 37 Anfrage-Konsole in der zukünftigen HedgeTerminal-Version

Abb. 37 Anfrage-Konsole in der zukünftigen HedgeTerminal-Version

Reguläre Ausdrücke können sehr flexible Filterbedingungen für Positions bilden, gefolgt von ihren statistischen Berechnungen. Um z.B. historische Positions nur auf dem AUDCAD Symbol anzuzeigen, genügt es, in die Zelle "Symbol" das "AUDCAD" Symbol einzutragen. Bedingungen können auch kombiniert werden. Positions auf AUDCAD, die von einem bestimmten Roboter ausgeführt werden, können für den Zeitraum vom 01.09.2014 bis 01.10.2014 angezeigt werden. Dazu müssen Sie lediglich die Bedingungen in die entsprechenden Zellen eintragen. Nachdem der Filter die Ergebnisse anzeigt, verändert sich der Bericht aus der Registerkarte "Zusammenfassung" in Übereinstimmung mit den neuen Filterbedingungen.

Reguläre Ausdrücke bestehen aus einer kleinen Anzahl einfacher Operatoren Doch wenn sie gemeinsam verwendet werden, gestatten sie die Erzeugung flexibler Filter.

Die folgenden Operatoren müssen in der Konsole anwesend sein und reichen vollkommen aus:

    Operator = - Striktes Eigenkapital. Wird das Kürzel AUDСAD in das Feld "Symbol" eingegeben, dann werden alle Symbole mit diesem Substring, z.B. AUDCAD_m1 oder AUDCAD_1, gefunden. Es wird also ein implizierter Einfügungs-Operator verwendet . Striktes Eigenkapital "=" verlangt eine vollständige Übereinstimmung des Ausdrucks und daher werden alle Symbole, außer AUDCAD, ausgeschlossen. AUDCAD_m1 oder EURUSD werden also ausgeschlossen.

    Operator > - Zeigt nur Werte > als der angegeben an.

    Operator < - Zeigt nur Werte < als der angegeben an..

    Operator ! – Logische Negation. Bildet nur die Werte ab, die nicht gleich des angegeben sind.

    Operator | - Logisches "ODER". Erlaubt die Festlegung zweier oder mehrerer Bedingungen gleichzeitig in einer Reihe. Zugleich genügt es, um das Kriterium zu erfüllen, wenn mind. eine Vorgabe erfüllt ist. So zeigt z.B. der Ausdruck "> 10106825|=10106833" , wenn er in die Zelle "Einstiegs-Order" der Ausdrucks-Konsole eingetragen wird, alle Positions mit einem eingehenden Order-Identifikator, der gößer ist als10106825 oder = 10106833. 

    Operator & - Logisches "UND". Erlaubt die Festlegung zweier oder mehrerer Bedingungen gleichzeitig in einer Reihe, von denen jede erfüllt werden muss. Der Ausdruck "> 10106825&<10105939" , wenn er in die Zelle "Einstiegs-Order" der Ausdrucks-Konsole eingetragen wird, zeigt alle Positions mit einem eingehenden Identifikator, der größer ist als10106825 oder kleiner ist 10105939.. Positions mit Identifikatoren zwischen diesen beiden Zahlen, z.B. 10106320, werden gefiltert.

Positions mittels spezieller Befehle berichtigen und verwalten. In die Zellen könne auch zusätzliche Symbole eingegeben werden, um das Volumen oder StopLoss und TakeProfit Stufen abzubilden. Dies ermöglicht eine komplexere Position-Verwaltung. Um z.B. die Hälfte des aktuellen Position-Volumens zu schließen, geben Sie den Wert "50%" für die entsprechenden aktive Position im Feld "Volumen" ein.

Und anstatt StopLoss und TakeProfit Stufen setzen zu müssen, kann hierfür ein Wert, z.B. "1%", in diese Zellen eingegeben werden. Das HedgeTerminal berechnet automatisch die StopLoss and TakeProfit Stufe, damit sie in einem Abstand von 1% vom Einstiegskurs eingerichtet wird. Zahlen mit dem Postfix "p" können ebenfalls in diese Zellen eingetragen werden. So bedeutet z.B. "200p", dass die Order: "die StopLoss und TakeProfit Stufen 200 Punkte entfernt vom Einstiegskurs der Position setzt". Wird in Zukunft vor das Volumen in der Spalte "Volumen" ein Minus gesetzt, wird das Volumen zu dem, nach diesem Zeichen angegeben Wert, geschlossen. Wenn Sie also eine Position mit dem Volumen 1,0 haben und einen Teil des Volumens (z.B. 0,3) schließen wollen, genügt es ab sofort in der Volumen-Zelle "-0,3" einzutragen.


KAPITEL 3 Das Innenleben des HedgeTerminal. Spezifikation und Funktionsprinzip

3.1 Globale und lokale Konturen. Kontext, Übertragung und Speicherung von Information

Das Aussehen des HedgeTerminals und des Handelablaufs ähneln dem bekannten MetaTrader 4. Dies wird ermöglicht durch die Virtualisierung und Transformation der Datenanzeige, wenn durch MetaTrader 5 verfügbare Handelsinformation mittels des Panels auf bequemere Weise angezeigt werden. Dieses Kapitel beschreibt die Mechanismen, mit denen man eine solche Virtualisierung erzeugen kann sowie die Mechanismen zur Verarbeitung von Gruppendaten.

Wie Sie ja wissen, ist HedgeTerminal in mehreren verschiedenen Produkten vertreten. Die wichtigste davon sind das visuelle Panel und die Library mit der Programmschnittstelle. Sie erlaubt die Implementierung der Verwaltung bidirektionaler Positions in jedem externen Expert Advisor und integriert sie auch in das visuelle HedgeTerminal-Panel. So kann z.B eine aktive Position eines EA direkt vom Panel aus geschlossen werden. Der Expert Advisor erhält die Information und verarbeitet sie entsprechend.

So eine Struktur erfordert offensichtlich eine Gruppen-Interaktion zwischen den Expert Advisors. Das Panel, das im Grunde der Expert Advisor ist, muss alle Handelsaktivitäten kennen, die stattfinden. Und umgekehrt, muss jeder Expert Advisor, der die HedgeTerminal-Library benutzt, alle manuell ausgeführten Handelsaktivitäten (mittels Programmen Dritter oder mittels des HedgeTerminals Panels) kennen.

Generell kann man die Information über Handelsaktivitäten aus der Handelsumgebung erhalten. Wenn z.B. ein Anwender eine neue Position eröffnet, verändert sich die Anzahl der Orders. Die letzte Order gibt an, für welches Symbol die Position eröffnet wurde und mit welchem Volumen. Die Information über Orders und Abschlüsse wird auf dem Server gespeichert. Und deshalb ist sie für jedes Terminal, das an ein Handelskonto angeschlossen ist, abrufbar. Diese Information kann man global nennen, da sie für jedermann zugänglich ist und durch den gobalen Kommunikationskanal verteilt wird. Kommunikation mit dem Handelsserver hat das Format: "Anfrage - Antwort".

Daher kann man so eine Kommunkation als globale Kontur darstellen. "Kontur" ist ein Konzept aus der Graph-Theorie. Einfacher ausgedrückt, ist eine Kontur eine geschlossene Linie mit einigen Knoten, die miteinander interagieren. Diese Definition mag vielleicht nicht ganz genügen, doch eine weitere Präzision überlassen wir den Mathematikern. Das wichtigste für uns ist, den Handelsvorgang als eine Art geschlossener Sequenz von Aktivitäten abzubilden.

Nicht alle erforderliche Information kann durch die global Kontur übertragen werden. Ein Teil dieser Information kann nicht übertragen werden, da MetaTrader 5 ein derartiges Übertragen nicht unterstützt und diese Information zudem nicht explizit existiert. Die Abfolge der Handelsaktivitäten ist:

  1. Ein Händler platziert eine Order zum Kaufen.
  2. Die Order wird in einer gewissen Zeit ausgeführt.
  3. Die Handelsumgebung ändert sich Die ausgeführte Order kommt in die Liste der historischen Orders. Die zusammengefasst Position des Symbols ändert sich
  4. Der Händler oder ein Expert Advisor bemerkt die Veränderung in der Handelsumgebung und trifft die nächste Entscheidung.

Zwischen der ersten und der vierten Aktivität verstreicht eine gewissen Zeit. Das kann von Bedeutung sein. Wenn nur ein Händler auf dem Konto handelt, dann weiß er, welche Aktivitäten unternommen wurden und wartet auf die entsprechenden Antwort vom Server. Wenn jedoch mehrere Händler oder Expert Advisors gleichzeitig auf dem Konto handeln, kann es zu Verwaltungsfehlern kommen.

So kann z.B. der zweite Händler eine Oder zum Schließen einer bestehenden Position in der Zeit zwischen dem ersten und dem vierten Schritt platzieren. Erkennen Sie das mögliche Problem? Die zweite Order wird platziert, wenn die erste gerade ausgeführt wird. Anders gesagt: eine Order zum Schließen einer Position wird zweimal gesendet.

Dieses Beispiel erscheint vielleicht etwas weit hergeholt und unwahrscheinlich, wenn der Händler auf dem Konto alleine und manuell handelt und zudem seine Orders mit synchronen Methoden platziert. Sobald aber mehrere Roboter auf dem Konto handeln und unabhängige Handelsoperationen ausführen, ist die Wahrscheinlichkeit solcher Fehler ziemlich hoch.

Da ein HedgeTerminal ist ein "Position-Verwalter", der im asynchronen Modus arbeitet und die simultane parallele Arbeit vieler Experts sicherstellt, kann er daher also sehr nahe an diesen Fehlern liegen. Um dem vorzubeugen, synchronisiert das HedgeTerminal alle Aktivitäten zwischen all seinen gestarteten Kopien (egal ob dies die HedgeTerminalAPI-Library oder das visuelle Panel ist) mit Hilfe des Mechanismus der lokalen Kontur , die als multi-threaded Lesen und Ändern der ActivePositions.xml -Datei implementiert ist. Die Interaktion mit der ActivePositions.xml -Datei ist das Herzstück der lokalen Kontur und der wichtigste Teil des HedgeTerminals. Die Mechanismen sind unten beschrieben.

Vereinfacht gesagt, reicht die Arbeit des HedgeTerminals bis hinunter zur Zusammenarbeit mit einer lokalen und globalen Kontur, wie auf folgender Abbildung dargestellt:

Abb. 38 Vereinfachtes Schema des Informationsaustausches zwischen globaler und lokaler Kontur

Abb. 38 Vereinfachtes Schema des Informationsaustausches zwischen globaler und lokaler Kontur

Jede Handelsaktivität (die Kennzeichnung Start auf dem Diagramm) im HedgeTerminal beginnt mit dem Schreiben eines speziellen Schlagworts in ActivePositions.xml, das weitere Änderungen auf der Position, die gerade geändert wird, blockiert.

Nachdem die "Position-Blockierung" eingerichtet und die lokale Kontur erfolgreich übertragen wurde, sendet das HedgeTerminal eine Handelsorder an den Server, z.B. eine Gegen-Order zum Schließen der Position. Nach einiger Zeit wird die Order ausgeführt und die Handelsumgebung verändert sich. HedgeTerminal verarbeitet diese Änderung und entdeckt, dass die globale Kontur erfolgreich übertragen und die Order ausgeführt wurde. Es de-blockiert die Position und kehrt zu einem Ursprungszustand zurück (die Kennzeichnung Ende auf dem Diagramm).

Es kann aber auch Situationen geben, in denen eine Order nicht ausgeführt werden kann. In so einem Fall de-blockiert HedgeTerminal ebenfalls die Position und legt einen Eintrag über den Grund dieses Misserfolgs im Protokoll des MetaTrader 5 Terminals an.

In Wirklichkeit ist das Muster der Informationskommunikation weitaus komplexer. Wie bereits angesprochen, können in einem MetaTrader5 mehrere HedgeTerminal Kopien laufen. Sie können die Library oder das visuelle Panel sein. Und jede Kopie kann als Zuhörer und als Schreiber fungieren. Wenn das HedgeTerminal eine Handelsaktivität ausführt, ist dies ein Schreiber, da es die Position für Veränderungen mit Hilfe der Einträge des dezidierten xml-Schalgworts blockiert. Alle anderen Kopien des HedgeTerminals sind Zuhörer, da sie die ActivePositions.xml-Datei mit einer gewissen Periodizität lesen und eine Position für Veränderungen blockieren, auf die sie im Blockier-Schlagwort gestoßen sind.

Dieser Mechanismus gewährleistet die Aufteilung von Informationen zwischen unabhängigen Threads und erleichtert die parallele Arbeit zwischen mehreren Panels und Experts mit Hilfe der HedgeTerminalAPI-Library.

Ein realistisches Diagramm, das die Arbeit des HedgeTerminals unter den Bedingungen der multi-threaded Zusammenarbeit zeigt, ist unten abgebildet:

Abb. 39 Annähernd wirklichkeitsgetreues Muster des Informationsaustausches zwischen Kopien des HedgeTerminals

Abb. 39 Annähernd wirklichkeitsgetreues Muster des Informationsaustausches zwischen Kopien des HedgeTerminals

Die Effizienz derartiger Datenorganisation ist ziemlich hoch. Lese- und Schreibvorgänge der ActivePositions.xm-Datei brauchen normalerweise weniger als 1 Millisekunde, wohingegen das Übertragen der globalen Kontur mit Senden und Ausführung von Order bis zu 150-200 Millisekunden dauern kann. Um den Unterschied zwischen der Skala dieser Werte zu erkennen, sehen Sie sich das Diagramm an.

Die Breite des grünen Rechtecks stellt die Zeit der Übertragung der lokalen Kontur dar, und die Breite des blauen Rechtecks die Zeit für die Ausführung der Handelsorder:

Abb. 40 Zeitskala für das Anlegen eines Eintrags in der Datei und der für die Ausführung der Order benötigten Zeit

Abb. 40 Zeitskala für das Anlegen eines Eintrags in der Datei und der für die Ausführung der Order benötigten Zeit

Wie Sie sehen, sieht das grüne Rechteck eher wie eine senkrechte Linie aus. In Wirklichkeit ist der Unterschied zwischen den Skalen noch weitaus größer.

Schnelle Lese- und Eintragsabläufe können einen komplexen Datenaustausch zwischen Experts erleichtern und verteilte Handelssysteme mit hoher Häufigkeit erzeugen.


3.2 Speichern von globaler und lokaler Information

Alle, vom HedgeTerminal verwendeteten Handelsinformationen können konventionell in zwei Teile unterteilt werden:

  • Lokale Information Sie wird in den Computerdateien gespeichert und wird ausschließlich durch die lokale Kontur übertragen;
  • Globale Information. Diese Information wird auf dem Handelsserver gespeichert und durch die globale Kontur übertragen. Sie ist von jedem Terminal, das an das Konto angeschlossen ist, abrufbar.

Orders, Abschlüsse und die Information über das Konto gehören zu globalen Informationen. Auf diese Informationen kann mittels spezifischer Funktionen des MetaTrader 5 zugegriffen werden, wie HistoryOrdersGetInteger() oder AccountInfoInteger(). Diese Informationen werden vom HedgeTerminal hauptsächlich verwendet und au diesem Grund zeigt HedgeTerminal die folgenden Daten an:

  • Aktive und historische Positions des HedgeTerminal;
  • StopLoss aktiver und historischer Orders;
  • Ausgelöste TakeProfit Stufen historischer Positions;
  • Eingehender Kommentar einer aktiven Position und eingehende und abgehende Kommentare historischer Positions;
  • Alle anderen Eigenschaften zu aktiven und historischen Positions sind in der Liste der lokalen Informationen nicht enthalten.

All diese Eigenschaften sind global und ihre Anzeige für alle Kopien des HedgeTerminals, die auf unterschiedlichen Computern laufen, eindeutig. Wird z.B. eine bidirektionale Position in einem der Terminals geschlossen, wird sie im anderen HedgeTerminal auch geschlossen, selbst wenn dieser auf einem anderen Computer gestartet wird.

Und zusätzlich zu den globalen Daten, verwendet der HedgeTerminal bei seiner Arbeit lokale Informationen. Sie steht nur innerhalb eines Computers zur Verfügung und stellt die Grundlage folgender Eigenschaften dar:

  • TakeProfit Stufen aktiver Positions;
  • TakeProfit Stufen historischer Positions, die nicht ausgelöst wurden;
  • Abgehender Kommentar einer aktive Position;
  • Service-Marker, der die Änderung einer bidirektionale Position blockiert.

Nicht ausgelöste TakeProfit Stufen werden in der HistoryPositions.xml-Datei abgelegt. Alle übrigen lokalen Information werden in der ActivePositions.xml-Datei abgelegt.

Speicherung lokaler Daten bedeutet, dass, wenn Sie eine TakeProfit platzieren, sie nur in den Kopien des HedgeTerminals sichtbar wird, die auf Ihrem Computer laufen. Sonnst kennt niemand diese Stufe.


3.3 Stop Loss- und Take Profit-Stufen. Orderssystem-Probleme und OCO-Orders

Sowohl in MetaTrader 5 als auch in MetaTrader 4 gibt es das Konzept der StopLoss und TakeProfit Stufen - beide sind schützende Stufen. Ähnlich wie in MetaTrader 4, schließen sie eine Position sobald sie eine gewisses Verlust- (StopLoss) oder Gewinn-Stufe (TakeProfit) erreicht hat. In MetaTrader 4, sind derartige Stops allerdings für jede offene Order einzeln aktiv. In MetaTrader 5 funktionieren diese Stops für die gesamte Netto-Position.

Das Problem hierbei ist, dass eine Netto-Position nicht mit den bidirektionalen Positions des Experts und v.a. des HedgeTerminals zusammenhängen. Das heißt: reguläre StopLoss und TakeProfit Stufe können für bidirektionale Positions nicht verwendet werden, doch können diese Stufen als separate pending Orders dargestellt werden Wenn Sie also eine Long Position offen haben, ahmen die zwei pending Orders die Arbeit des TakeProfit bzw. StopLoss nach: eine davon ist SellLimit, und wird über dem Eröffnungskurs dieser Position platziert, und die andere ist SellStop und wird unterhalb dieser Linie platziert.

Erreicht also der Kurs nach der Eröffnung in der Tat das SellLimit der Order, wird diese Order die Position schließen; erreicht der Kurs die SellStop Order, wird er diese Position mit Verlust schließen. Der einzige Nachteil hierbei ist, dass nachdem eine Order ausgelöst wurde, die zweite Order weiterhin bestehen bleibt, sodass, wenn der Kurs seine Richtung ändert, die zweite Order nach der ersten ausgelöst werden kann.

Da es zu diesem Zeitpunkt keine Position gibt, eröffnet das Auslösen der zweiten Order eine neue Netto-Position, anstatt die vorherige zu schließen.

Die Abbildung unten veranschaulicht dieses Problem anhand des Beispiels des Einsatzes von schützenden Stops bei einer Long Position:

Abb. 41  Nachahmung von StopLoss und TakeProfit mit Hilfe der SellStop- und SellLimit-Orders

Abb. 41 Nachahmung von StopLoss und TakeProfit mit Hilfe der SellStop- und SellLimit-Orders

Zur Vermeidung solcher Ungereimtheiten werden im Börsenhandel OCO-Orders ("Eine Order storniert die andere") verwendet.

Hierbei handelt es sich um zwei pending Orders, die miteinander verknüpft sind, sodass das Auslösen der einen die andere storniert. In unserem Beispiel, wird die zweite Order, nachdem eine Order ausgelöst wurde, vom Handelsserver storniert und deshalb keine neuen Positions eröffnet - und genau das wollen wir ja. Das folgende Diagramm zeigt die Arbeit dieses Typs von Orders:

Abb. 42 OCO-Orders als StopLoss und TakeProfit

Abb. 42 OCO-Orders als StopLoss und TakeProfit

MetaTrader 5 unterstützt keine OCO-Orders. Da ein Bündel von drei Orders nicht verwendet werden kann, sind Orders, die gleichzeitig als StopLoss und TakeProfit agieren, nicht geeignet. Ein Paar von zwei Orderss kann jedoch verwendet werden! Und das kann entweder StopLoss oder TakeProfit sein. 

Wenn also eine pending Order, die mit der ausgeführten Order, die eine neue bidirektionale Position initialisiert, verknüpft ist, platziert wurde (z.B. StopLoss), dann ist so eine Konstruktion sicher. Es wird keine zwei pending Order geben, und daher kann auch keine neue bidirektionale Position eröffnet werden. In der Tat gibt es diesbezüglich nur drei Szenarien:

  • Eine pending Order wird aus irgendeinem Grund von einem Makler oder Anwender storniert;
  • Eine pending Order wird ausgelöst;
  • Eine pending Order wird nicht ausgelöst.

Andere Szenarien gibt es nicht. Wird eine pending Order storniert, ist das genauso, als würde man StopLoss oder TakeProfit stornieren. Wird eine pending Order ausgelöst, schließt sie die Position. Wird sie nicht ausgelöst, bleibt eine bidirektionale Position mit einem platzierten StopLoss aktiv.

Selbst wenn HedgeTerminal deaktiviert ist, wenn die pending Order ausgelöst wird, kann es später, wenn es dann gestartet wird, dieses Auslösen verarbeiten und erkennen, dass die Position von dieser Order geschlossen wurde. Man kann feststellen, ob die Position von StopLoss oder TakeProfit geschlossen wurde, wenn das Feld mit der magischen Zahl die spezielle Dienstinformation enthält, die angibt, ob die schließende Order eine reguläre Order, TakeProfit oder StopLoss ist. Wie die Verknüpfung und die Dienstinformation in diesem Feld mit der magischen Zahl gespeichert werden, wird im nächsten Abschnitt detailliert erklärt.

Da zwei echte schützende Stops nicht zu gleicher Zeit verwendet werden können, hat man sich beim Design des HedgeTerminals auf einen Kompromiss geeinigt:

Bidirektionale Positions werden im HedgeTerminal von den echten Orders BuyStop und SellStop geschützt, die die Rolle eines StopLoss übernehmen. TakeProfit Stufen sind virtuell und soweit unterstützt, wenn die HedgeTerminal -Kopien auf einem Computer laufen und sind auf globaler Ebene nicht verfügbar.

Es wurden die StopLoss Stufen gewählt, da sie die einzigen sind, die ein hohes Maß an zuverlässigem Auslösen besitzen müssen. Sollte TakeProfit nicht funktionieren, ist das keine Katastrophe und das Konto wird auch nicht von einem Margen-Aufruf geschlossen. Wird jedoch StopLoss nicht ausgelöst, dann kann das zu kompletten Bankrott des Kontos führen.

Nichtsdestotrotz gibt es eine algorithmische Gelegenheit, eine Art des Nachhängens einer Position zu wählen: Sie haben die Wahl zwischen einem echten StopLoss und virtuellen TakeProfit oder einem virtuellen StopLoss und einem echten TakeProfit. Die StopLoss und TakeProfit Stufen können zudem ebenfalls virtuell sein. Derzeit ist dieses Merkmal noch nicht implementiert worden, doch sollte es dafür eine Nachfrage geben, dann wird dies sicher geschehen.

Die Virtualisierung der TakeProfit Stufe reduziert ihre allgemeine Zuverlässigkeit, allerdings nicht sehr. Die TakeProfit Stufen werden lokal verteilt und stehen daher jeder Kopie des HedgeTerminal zur Verfügung. Es genügt, mindestens eine Kopie des HedgeTerminal als einen Expert Advisor laufen zu haben, der die Library oder das HedgeTerminal-Panel verwendet, damit TakeProfit ausgeführt werden kann. Sollten mehrere Kopien von HedgeTerminal laufen, wird nur eine davon TakeProfit ausführen. Sie wird die erste sein, die die bidirektionale Position mit einem "Blockier-Schlagwort" versehen wird. In diesem Sinne stehen Instanzen des HedgeTerminals im Multi-Thread Modus miteinander im Wettbewerb, wer die Daten liest und wer sie schreibt.

Für einen Anwender - egal ob er durch das HedgeTerminal Panel manuell handelt oder die Virtualisierungs-Library in den EAs nutzt, unterscheidet sich die Arbeit mit TakeProfit nicht von der Arbeit mit StopLoss. Alle tatsächlichen Unterschiede zwischen diesen Stufen sind verborgen und laufen im Hintergrund des HedgeTerminals ab. Ein Händler muss nur "TakeProfit" und "StopLoss" eingeben - das genügt. Diese Stufen zeigen sich dann automatisch und besitzen dieselbe farblich gekennzeichnet Warnung bzgl. des Auslösens einer dieser Stufen.


3.4 Können OCO-Orders Probleme beim Schutz bidirektionaler Positions lösen?

OCO-Orders erlauben den gleichzeitigen Einsatz von echten StopLoss und TakeProfit Stufen. Doch sind sie wirklich so vielseitig bei der Organisation von bidirektionalem Handel? Unten finden Sie ihre Merkmale. Wir wissen ja bereits, dass man mit OCO-Orders eine Order löschen kann, wenn die andere ausgelöst wird, und

anscheinend schützt dies unsere bidirektionale Position von beiden Seiten, da in diesem Fall Stop-Loss und Take-Profit echte Orders sein können, und das HedgeTerminal dabei nicht auf einem Computer laufen muss. Die Sache ist nur die: bei der Ausführung der Börsenorder ist es notwendig, die teilweise Order-Ausführung mit zu berücksichtigen. Diese Eigenschaft kann die Business-Logik der Anwendung kaputt machen. Betrachten wir uns ein einfaches Beispiel:

  1. Eine Long Position mit dem Volumen von 10 Kontrakten wird eröffnet. Zwei verknüpfte OCO-Orders, die StopLoss und TakeProfit Stufen implementieren, werden platziert;
  2. Die SellLimit Order wird teilweise ausgeführt, wenn die TakeProfit Stufe erreicht wird. 7 der 10 Kontrakte werden von ihr geschlossen und die restlichen 3 bleiben als Long Position offen;
  3. Die SellStop Order, die die StopLoss Stufe implementiert, wird gelöscht, da die mit ihr verknüpfte SellLimit Order nur teilweise ausgeführt wurde.
  4. Die Position in drei Kontrakten besitzt nun keinen schützenden Stop mehr.

Die unten stehende Abbildung zeigt dieses Szenario:

Abb. 43 Teilweise Ausführung von schützenden Stops

Abb. 43 Teilweise Ausführung von schützenden Stops

Man kann hier durchaus einwenden, dass OCO-Orders so konzipiert werden können, dass sie eine teilweise Ausführung berücksichtigen, mit deren Hilfe eine derartige Leerung von schützenden Stops vermieden werden kann. Die Volumen zweier OCO-Orders können miteinander verknüpft werden. In diesem Fall wird eine teilweise Ausführung definitiv vorgesehen. Doch dies verkompliziert die bereits schon sehr komplexe Logik des Order-System, die im Netto-Handel verwendet wird, noch zusätzlich.

Das Hauptproblem hier ist, dass OCO-Order die gleichen Möglichkeiten wie MetaTrader 4 bieten, und selbst eine teilweise Ausführung berücksichtigen. So wird z.B. die Platzierung einer pending Order mit TakeProfit und StopLoss Stufen schwierig. Das liegt daran, dass zwei miteinander verknüpfte Order das Auslösen der eröffnenden Order nicht berücksichtigen können.

Um einen wirklich vielseitigen Algorithmus zu schreiben, das die Verwaltung von Positions ähnlich wie in MetaTrader 4 erlaubt, müssen OCO-Orders die folgenden Merkmale besitzen:

  1. Jede verknüpfte Order muss ihr Volumen je nach Ausführungsgrads der mit ihr verknüpften Order anpassen. Hat also TakeProfit 7 von 10 Kontrakten ausgeführt, muss der mit ihr verknüpfte StopLoss sein Volumen von 10 auf 3 ändern (10 - 7 = 3);
  2. Jede der verknüpften Orders muss das Volumen der Ausführung der eröffnenden Order berücksichtigen. Sollte also ein Händler eine pending Order vom Typ BuyLimit platzieren und sie mit StopLoss und TakeProfit in Form von Orders schützen. heißt da noch lange nicht, dass BuyLimit auf jeden Fall das gesamte Volumen ausführt. Diese Fälle müssen durch gepaarte Orders behandelt werden.
  3. Zusätzlich zu der Bedingung für eine Stornierung, muss eine gepaarte Order über eine zusätzliche Bedingung für das Auslösen verfügen. Sie kann nur dann auslösen, wenn eine zusätzliche, mit ihr verknüpfte Order auslöst. D.h.: eine OCO-Order muss eine Verknüpfung zu zwei Orders haben. Die erste Verknüpfung ist zu der Order, deren Auslösen die aktuelle Order aktivieren wird. Die zweite Verknüpfung ist zu der Order, deren Auslösen die aktuelle Order stornieren wird. So ein Mechanismus erlaubt die Erzeugung einer Position mit einer pending Initialisierungs-Order;

Derartige Mechanismen, selbst wenn sie auftreten, sind für Anwender mit noch keiner umfassenden Erfahrung, sehr komplex. Und ob sie geeignet sind, ist zudem fraglich. Virtualisierung auf Seite des Clients, wie die derzeit im HedgeTerminal verwendete, ist daher erheblich leichter zu verwenden.

Als Alternative zu OCO-Orders, könnte MetaQuotes sich eine Möglichkeit überlegen, spezifische, algorithmische TakeProfit und StopLoss Stufen einzuführen, die den Schutz einer bestimmten Handels-Order gewährleisten. Klar, das ist nur reine Theorie, hat aber dennoch einen rationalen Kern. Solche algorithmischen Stufen können den Großteil der Implementierung und Konfiguration auf Seiten des Handelsserver verbergen, und den Endanwendern einen einfach zu verwendenden Schutzmechanismus anbieten.

Als Zusammenfassung unseres kleinen Diskurses über die Perspektiven der Integration von OCO-Orders in die MetaTrader 5 Plattform lässt sich sagen:

OCO-Orders sind nicht effektiv bei der teilweisen Ausführung von Orders, da sie nicht zuverlässig genug und zu komplex sind, um von einem normalen Anwender der Plattform eingesetzt werden zu können. 


3.5 Speichern von Verknüpfungen zu initialisierenden Orders

In diesem Abschnitt wird die interne Speicherung der Verknüpfungen zu anderen Orders und der Bindungsmechanismus zwischen ihnen detailliert beschrieben. Wie bereits erwähnt, enthält das Feld "Order-Magie" den Identifikator des Expert Advisors, der eine Order platziert hat. Das heißt, dass jeder Händler einen ganzzahligen Wert in dieses Feld mittels der MQL5 Programmiersprache eingeben kann. In solchen Fällen kann es zu einer Kollision kommen, nämlich dann, wenn die Order, die eine neue Position initialisiert, den Identifikator eines Expert Advisors enthält, der mit dem Identifikator einer bestehenden Order übereinstimmt. Und dann taucht eine falsche Verknüpfung zur Order auf.

Verwendet ein Händler eine Identifikator für die EAs, er nahe "0" ist, wie "1", "7" oder "100", und die Orderzahlen sind erheblich größer als diese Zahlen, wie z.B. "10002384732", können diese Bedingungen vermieden werden. Es wäre reichlich naiv, davon auszugehen, dass Händler daran denken. Und aus diesem Grund speichert HedgeTerminal Verknüpfungen zu Orders auf spezielle Weise, sodass die Gefahr einer Kollision sehr gering ist und ihre Algorithmen keine Zweideutigkeiten zulassen und Kollisionen, sobald sie auftreten, automatisch eliminieren.

Das "Order-Magie" Feld, das die Verknüpfung speichert, benötigt 64 Bit. Aufgrund seiner Breite, kann dieses Feld eine sehr lange Zahl aufnehmen. In Wirklichkeit ist der Arbeitsbereich der Order-Identifikatoren erheblich geringer. Damit kann Hedge Terminal also höhere Ziffer/Stellen dieses Feldes sicher für seine Zwecke verwenden und auf bestimmte Weise eine Verknüpfung zu der Order anlegen. Kommen wir zu dem Schema zurück, dass zeigt, wie HedgeTerminal eine Verknüpfung zu einer initialisierenden Order speichert:

Abb. 44 Speicherungsmuster einer Verknüpfung zur initialisierenden Order im HedgeTerminal

Abb. 44 Speicherungsmuster einer Verknüpfung zur initialisierenden Order im HedgeTerminal

Die oberste Ziffer/Stelle des Feldes (63) wird stets mit "1" markiert. Damit ist eine schnelle Wiederholung über alle Order möglich. Und wenn die nächste Ziffer/Stelle nicht = "1" ist, kann die Order ganz klar natürlich keine Verknüpfung mit einer anderen Order enthalten und kann daher übersprungen werden. Zudem wird die magische Zahl sehr lang, wenn man den Wert von "1" der höchsten Ziffer/Stelle zuweist und dass erhöht den Abstand zwischen dem Arbeitsbereich der Order-Identifikatoren und dem Arbeitsbereich der Verknüpfungen im HedgeTerminal, was die Wahrscheinlichkeit einer Kollision minimiert.

HedgeTerminal kann die folgenden drei Bits mit Dienstinformationen füllen. Anders als der Order-Identifikator, speichert das HedgeTerminal Order-Identifikatoren in diesem Feld andersherum. Er füllt zunächst die höheren Stellen und dann erst die niedrigeren, was durch den blauen Pfeil Richtung SI (Service-Information) in Abb. 44 hervorgehoben ist. Diese Art der Speicherung lässt die Bereiche der Dienstinformation und die Order-Identifikatoren sich auf halbem Weg treffen. Und ggf. kann so ihre Zusammensetzung noch verändert werden. Die Größe der Dienstinformation kann durch die Stellen zur Speicherung des Order-Identifikators erhöht werden. Mit Hilfe dieser Information kann man die Art der schließenden Order identifizieren. indetifizieren

Punkt ist, dass aktive Orders in MetaTrader 4 von TakeProfit oder StopLoss geschlossen werden können. Dies sind bestimmte Kursstufen an denen Orders mit festem Gewinn oder Verlust geschlossen werden. In MetaTrader 5, können TakeProfit und StopLoss nur auf Netto-Positions angewendet werden und sie sind nicht für gekoppelte Orders geeignet. Nur gewöhnliche pending Orders können die Rolle von TakeProfit and StopLoss Orders übernehmen.

Im HedgeTerminal werden solchen Orders spezielle Identifikatoren zugewiesen, die festlegen, ob es sich um eine TakeProfit oder StopLoss Order handelt. Da die magische Zahl im Handelsserver gespeichert ist, steht die Dienstinformationen allen Händlern mit Zugriff auf das Handelskonto zur Verfügung. Auf diese Weise haben selbst mehrere HedgeTerminal Kopien, die auf verschiedenen Computern laufen die Informationen über die Art der ausgelösten Orders und können diese Information auf geschlossenen Positions korrekt anzeigen.

Die verwiesenen Informationen über den Order-Identifikator wird im Stellenbereich 0 - 59 gespeichert. Sie wird in der Standardrichtung gespeichert, mittels Stellen von rechts nach links, was durch einen blauen Pfeil Richtungs-Order-ID gekennzeichnet wird. Zur Bewertung der zugewiesenen Speichermenge, berechnen wir einmal die erforderliche Menge zur Speicherung des Bereichs aller, während eines Jahres an die Moskauer Börse gesendeten Orders.

Mein Maklerbericht vom 13.06.2013 enthält eine Order mit dem Identifikator 10 789 965 471 . Diese Stelle braucht 33.3297 Bits  (log2(10 789 965 471)) oder 34 von 64 Stellen. Der Identifikator der am 25.09.2014 platzierten Orders lautet 13 400 775 716. Diese Ziffer braucht 33.6416 Bits. Obwohl 2,6 Milliarden Orders in 16 Monaten platziert wurden, nahm die Größe des Identifikators um nur 0,31263 Bit zu, also weniger als nur eine Order. Ich will hier nicht behaupten, dass es absolut unmöglich ist, dass die Größe des Order-Identifikators die 59.Stelle erreichen kann, doch bin ich ziemlich sicher, dass dazu noch Millionen von Jahren vergehen müssen

HedgeTerminal speichert eine Verknüpfung nicht öffentlich. Dazu verschlüsselt es das Feld Order-Magie, und lässt dabei die ranghöchste Stelle unberührt. Der Code des HedgeTerminal beruht auf der umkehrbaren Neuordnung der durch die spezielle Verschlüsselungsfunktion, die auf dem Schlüssel der Variablenlänge arbeitet, implementierten Stellen. Nach so einer Verschlüsselung werden die Dienstinformation und der Order-Identifikator miteinander vermischt und unter einer speziellen Maske verborgen, sodass sie beim Verlassen eine gleichmäßige Verteilung von Einsen und Nullen darstellen. Verschlüsselt wird aus zwei Gründen:. 1. Die Neuanordnung der Stellen verringert die Wahrscheinlichkeit, dass sich Verknüpfungen und Order-Identifikatoren überlappen und 2. schützt somit den internen Algorithmus des HedgeTerminals vor einem absichtlichen oder unabsichtlichen, externen Einfluss.

Diese Verfahren ist absolut sicher, umkehrbar und für Kollisionen unanfällig. Es gewährleistet nämlich, dass, ungeachtet aller Aktivitäten, die ein Händler mit Hilfe von Expert Advisors unternimmt, sie alle nicht die Zuverlässigkeit der internen HedgeTerminal Algorithmen beeinflussen. Dies ist sehr wichtig, da in einer echten Situation eine Verwaltung dieser Verknüpfungen ohne komplexe, dezidierte Algorithmen unmöglich ist.

Gleichzeitig ist das Versagen der Business-Logik, wenn wir uns darauf beschränken, nur die Verknüpfungen zu kontrollieren, unvermeidlich. Die nun folgenden Abschnitte erklären, warum das so ist, denn sie bieten eine detaillierte Beschreibung dieser Algorithmen. Verschlüsselung wird zudem auch deswegen eingesetzt, um dieses Versagen zu vermeiden. Die andere Seite der Medaille dieser Beschränkung ist, dass es keine andere Möglichkeit gibt, die HedgeTerminal Positions zu verwalten.


3.6 Einschränkungen bei der Arbeit mit dem HedgeTerminal

Die Besonderheit der Struktur der Verknüpfungsspeicherung verlangt, das HedgeTerminal, Verknüpfungen zu den Orders gleichmäßig speichert, mit Hilfe von Ziffern von 9223372036854775808 - 18446744073709551615. Wird ein Feld mit 64 Stellen als eine Ziffer mit dem Zeichen des Typs 'long' dargestellt, dann sind diese Stellen negativ. Und jetzt kommt es zu drei Einschränkungen bei der Arbeit mit dem HedgeTerminal.

Die erste betrifft den Handelsroboter, der mit dem HedgeTerminal arbeitet. Sie ist nicht strikt und kann eher als Empfehlung angesehen werden:

Ein Handelsroboter oder ein Expert Advisor, der mit dem HedgeTerminal arbeitet, muss einen Identifikator haben (die magische Zahl des Experts), die den Wert 9223372036854775808 nicht überschreitet.

In Wirklichkeit erreichen normale Expert Advisors diese Einschränkung nie, da Identifikatoren mit mehr als 5-6 Stellen sehr selten verwendet werden. Der geläufigste Identifikator für einen Expert ist "12345" oder so ähnlich). Diese Einschränkung kann auf die Roboter zutreffen, die Dienstinformationen wie z.B. Verknüpfungen zu anderen Verknüpfungen in ihren magischen Zahlen speichern. HedgeTerminal ist nicht kompatibel mit solchen Experts und kann nicht mit ihnen zusammen arbeiten.

Sollte aus irgendeinem Grund die erwähnte Obergrenze überschritten werden, liegt die Wahrscheinlichkeit einer Kollision bei Null, also wirklich gering, da ein Zufall in so einem Bereich wirklich sehr unwahrscheinlich ist. Und selbst dann wird HedgeTerminal diese Kollision mit Hilfe seiner Algorithmen bereinigen. Dieser Vorgang verlangsamt seine Arbeit, da die Entzifferung einer Verknüpfung, der Vergleich dieser Verknüpfung mit den bestehenden Orders und die Analyse dieser Order für ihre Eignung zur Paarung mit einer anderen Oder, extra Zeit in Anspruch nimmt. Um dies zu vermeiden, ist es daher besser, keine langen Ziffern mit einem Negativzeichen zu verwenden.

Die zweite Einschränkung ist heftig, betrifft aber nur den Makler und die Börse, an die das HedgeTerminal angeschlossen werden soll:

Order-Identifikatoren müssen Ziffern von 0 - 2^59 oder 576 460 752 303 423 488 verwenden.

Dies ist klar, da nur 59 Stellen zur Speicherung der Order-Identifikatoren, anstelle von 64, verwendet werden. Sollte also Ihr Makler Order-Identifikatoren verwenden, die größer als dieser Wert sind, können Sie nicht mit dem Hedge Terminal arbeiten.

Die dritte Einschränkung folgt aus der Art und Weise, wie Positions dargestellt werden:

HedgeTerminal ist nicht kompatibel mit irgendeinem anderen System zur Verwaltung von Positions. Es ist nicht kompatibel mit externen Handels-Panels, die die Funktion des Schließens von Positions besitzen und kann daher nicht mit ihnen zusammen verwendet werden.


3.7 Mechanismus der Paarung von Orders und Handlungsdeterminismus

Wir haben uns bislang im Einzelnen die Darstellung von Positions im HedgeTerminal und die Struktur ihrer Verknüpfungen angesehen. Jetzt betrachten wir uns die Algorithmus-Beschreibung zur Verwaltung von gebundenen Orders. Wir haben z.B. aus einer Reihe anderer Orders zwei Orders ausgewählt und müssen diese miteinander verknüpfen. Wenn wir uns nicht auf die Regel verlassen, dass eine Verknüpfung zur Order eindeutig sein muss und nur von einer Order "besessen" werden darf, können alle daraus entstehenden, möglichen Situationen in drei Gruppen unterteilt werden:

  1. Auf diese Order wird nicht von irgendwelchen anderen Orders verwiesen;
  2. Auf diese Order wird von einer Order verwiesen;
  3. Auf diese Order wird von zwei oder mehreren Orders verwiesen.

Die erste Gruppe bringt keine Probleme mit sich und so eine Order gilt einfach als offene Position. Auch bei der dritten Gruppe ist alles ziemlich klar, da ein Order-"Paar" eine geschlossene Position ergibt. Was können wir mit den Fällen aus der dritten Gruppe machen? Was passiert, wenn auf eine Order von zwei anderen Orders verwiesen wird? Welche von ihnen soll mit der ersten Order verknüpft werden und was geschieht dann mit der zweiten Order? Diese Frage lässt sich leicht beantworten, wenn wir uns den Koppelungsprozess als eine Sequenz vorstellen:

  1. Wir stoßen auf eine Order, die keine Verknüpfung auf eine andere Order enthält. Sie wird in den Bereich der aktiven Orders (Positions) übertragen und danach geht die Wiederholung über die Orders weiter;
  2. Dann stoßen wir auf eine weitere Order, die einen Verweis auf die erste Order besitzt. Danach wird die Order, auf die verwiesen wird, im Bereich der aktiven Orders gesucht. Befindet sich diese Order in diesem Bereich, dann wird sie mit der aktuellen Order gepaart und beide werden in den Bereich der abgeschlossenen Transaktionen in Form historischer Positions übertragen;
  3. Während weiterer Wiederholung, stoßen wir auf noch eine Order, die eine Verknüpfung zu der unter Punkt 1 beschriebene Order, besitzt. Danach wird die Order, auf die verwiesen wird, im Bereich der aktiven Orders gesucht. Doch diesmal führt die Suche nicht zu einem Erfolg, da die gesuchten Orders ja von diesem Bereich bereits in den Bereich der abgeschlossenen Transaktionen übertragen wurden. Da die Order, auf die durch die aktuelle Order verwiesen wird, ja nicht gefunden wurde, ist die aktuelle Order, trotz ihrer Verknüpfung, eine aktive Order und wird in den Bereich der aktiven Positions übertragen.

Und da die Order-Identifikatoren in einheitlicher Manier gefüllt werden und ihre Liste nach Zeit sortiert ist, kann ihre sequentielle Wiederholung durchgeführt werden. Also wird die initialisierende Order mit er allerersten Order gepaart, die eine Verknüpfung zu ihr besitzt, ungeachtet der Anzahl anderer Orders, die die gleichen Verknüpfungen aufweisen. Alle anderen Orders mit Verknüpfungen zur initialisierten Order werden in die Liste der aktiven initialisierenden Positions aufgenommen.

Wie bereits angesprochen, muss der Algorithmus, der so eine Wiederholung ausführt, komplett deterministisch und einheitlich sein. HedgeTerminal verwendet in seiner Arbeit so einen "Iterations-Algorithmus". Tatsächlich handelt es sich hierbei nicht um eine einfache "Iteration", sondern eine Wiederholung aller Handelsaktivitäten, die ab dem Zeitpunkt des ersten Abschlusses ausgeführt wurden. Im Endeffekt baut das HedgeTerminal bei jedem Start konsequent eine Kette von Handelsaktivitäten vom allerersten Beginn bis zum aktuellen Zeitpunkt. Dank dessen ist seine aktuelle Position-Darstellung das Ergebnis eines rückwirkenden Handels zum Zeitpunkt seines Starts .

Da die Wiederholung über alle Orders in der History sequentiell ausgeführt wird, müssen analog auch die Handelsaktivitäten sequentiell durchgeführt werden. Dies legt die Art und Weise der Ausführung von Orders im HedgeTerminal fest. Angenommen, eine aktive bidirektionale HedgeTerminal-Position, die von einem StopLoss geschützt ist, muss geschlossen werden. Wir wissen, dass so eine bidirektionale Position im Grunde aus zwei Orders besteht: die ausgeführte Order zur Initialisierung einer aktiven Position und einer pending Buy-Stop oder Sell-Stop Order, die als eine StopLoss-Order fungiert. Um eine solche Position zu schließen, muss die pending Order gelöscht und die aktive bidirektionale Position von einer Gegen-Order mit demselben Volumen geschlossen werden. Also müssen zwei Handelsaktivitäten durchgeführt werden. HedgeTerminal führt alle Handelsorders asynchron aus.

Somit können Orders gleichzeitig ausgeführt werden, also die erste Orer kann platziert werden, um die pending Order zu löschen und die zweite Order kann platziert werden, um die Gegen-Order auszuführen, die dann die Position schließt. Das allerdings bringt den Handlungsdeterminismus durcheinander und HedgeTerminal kann dies nicht leisten. Wird aus irgendeinem Grund die pending Order nicht gelöscht und die Position eben nicht durch die Gegen-Order geschlossen, kommt es zu Zweideutigkeiten, da die Position geschlossen wird und ihr StopLoss dennoch weiter besteht. Und schließlich kann die Order, die StopLoss implementiert, ausgelöst werden und eine neue bidirektionale Position erzeugen. Und das gilt es zu vermeiden. Deshalb storniert das HedgeTerminal StopLoss und platziert, bei erfolgreicher Stornierung, eine Gegen-Order. Es besteht die Möglichkeit, dass im zweiten Schritt die Gegen-Order nicht oder nur teilweise ausgeführt wird. In so einem Fall wird eine Zweideutigkeit beseitigt, da selbst eine teilweise ausgeführte Order einen Teil der aktiven Position schließen wird. Dies ist ein ganz normaler Vorgang.

Es gibt noch eine komplexere Handlungsabfolge, die vom HedgeTerminal implementiert wird. Nehmen wir ein Beispiel, das dem vorherigen ähnelt, doch diesmal werden wir einen Teil der Position schließen. Das bedeutet, dass HedgeTerminal drei Handlungen ausführen muss:

  1. Löschen der pending Order, die als die StopLoss Order fungiert hat;
  2. Ausführung der Gegen-Order, die einen Teil des Volumens einer bidirektionalen Position schließt;
  3. Platzierung eines neuen StopLoss mit einem neuen Volumen zum Schutz des restlichen Teils der aktiven Position.

All diese Handlungen werden konsequent ausgeführt, um eine Störung des Handlungsdeterminismus zu vermeiden. Was man normalerweise jetzt erwarten könnte, wäre eine Zunahme der Geschwindigkeit der Order-Ausführung aufgrund der zeitgleichen Order-Platzierung, doch kann in diesem Fall eine sequentielle Ausführung der Handelsaktivitäten nicht garantiert werden, sodass durchaus die Möglichkeit von Zweideutigkeiten besteht. Eine sequentielle Bearbeitung von Order bringt keinerlei Zweideutigkeiten mit sich.


3.8 Aufteilung und Verbindung von Abschlüssen - die Grundlage der Order-Arithmetik

Ein sequentieller Umgang mit Orders reicht nicht aus. Hier sollte auf zwei Dinge hingewiesen werden:

  • Eine Order kann mehrere Abschlüsse beinhalten. Die Zahl dieser Abschlüsse kann zufällig sein;
  • Zudem ist es auch wichtig, eine teilweise Ausführung einer Order zu berücksichtigen sowie einen eher gängigeren Fall, wenn ein Volumen einer schließenden Order nicht gleich dem Volumen einer initialisierenden Order ist;

Die Order kann gleichzeitig von mehreren Abschlüssen ausgeführt werden und sie kann teilweise ausgeführt werden. Sollten Sie nicht wissen, warum dies passiert, dann lesen Sie sich den Beitrag durch, in dem die Börsenkursentwicklung beschrieben wird: "Die Prinzipien der Börsenkursbildung anhand des Beispiels des Derivatemarkts der Moskauer Börse". Die Frage "warum kann das Volumen der schließenden Order nicht gleich dem Volumen der eröffnenden Order sein", verlangt nach einer Antwort. Was können wir in so einem Fall machen?

In der Tat können ihre Volumina nicht gleich sein, wenn wir von der Gelegenheit eines teilweisen Schließens einer aktiven Position ausgehen. Wenn wir eine aktive Position mit dem Volumen von 50 Kontrakten öffnen und einen Teil der Positions mit einer Gegen-Order mit dem Volumen von 20 Kontrakten schließen, wird die aktive Postion in zwei Teile unterteilt. Der erste Teil macht eine neue historische Position mit dem Volumen von 20 Orders mit der Gegen-Order aus und der zweite Teil öffnet sich immer noch, wobei sein Volumen jedoch um die o.g. 20 Kontrakte auf 30 Kontrakte abnimmt.

Dieser Algorithmus eines teilweisen Schließens einer Position ist im HedgeTerminal implementiert. Wird ein neuer Volumen-Wert in das Feld "Volumen" des HedgeTerminal Panels eingetragen, dann findet ein teilweises Schließen statt. Im Ordner "History" erscheint eine neue Position und das Volumen der aktuellen Position ist gleich dem neuen Wert. HedgeTerminal kann die Situation selbst dann verarbeiten, wenn das Volumen der schließenden Order größer ist als das Volumen der eröffnenden! Zu so einer Situation kann es kommen, wenn HedgeTerminal aus irgendeinem Grund ein falsches Volumen der schließenden Order platziert oder der Makler hintersinnig mehrere Abschlüsse storniert, die in der eröffnenden Order waren, sodass das ausgeführte Volumen plötzlich geringer wird.

Um einen potenziellen Unterschied in den Volumina zu berücksichtigen, muss man einen universellen Algorithmus einsetzen, der auf der Berechnung des Gesamtvolumens aller Abschlüsse beruht, die mit der Order zusammenhängen. In diesem Fall sind es die Abschlüsse, und nicht die Orders, die alles bestimmen. Das Order-Volumen ist die Menge ihrer Abschlüsse. Der Kurs einer ausgeführten Order ist der Durchschnittskurs ihrer Abschlüsse.

HedgeTerminal arbeitet mit dem Agorithmus, der Orders miteinander verknüpft oder sie aufteilt. Er beruht auf der Addition oder Subtraktion von Abschlüssen und funktioniert auf Basis der Vereinigung der Abschlüsse zwischen der eröffnenden und der schließenden Order mit der folgenden Bildung einer historischen Position.

Um die Funktionsweise dieses Algorithmus verstehen zu können, nehmen wir mal an, dass es zwei Orders gibt, die gepaart werden müssen, um eine historischen Position zu ergeben. Beide Orders haben die gleiche Anzahl Abschlüsse, und auch ihr ausgeführtes Volumen ist identisch. Aus Gründen der Einfachheit ist die Anzahl der Abschlüsse dreistellig:

Order Nr.1 (Einstiegs-Order)Volumen (10/10)
Abschluss Nr. 2833
Abschluss Nr. 2882
Abschluss Nr. 2945

Tabelle 3 Order Nr. 1 und ihre Abschlüsse


Order Nr.2 (Ausstiegs-Order)Volume (10/10)
Abschluss Nr. 8711
Abschluss Nr. 8823
Abschluss Nr. 9216

Tabelle 4 Order Nr. 2 und ihre Abschlüsse

Fügen wir ihre Abschlüsse mit den Volumina zusammen:

Tabelle 5 Orders zusammenfügen

Tabelle 5 Orders zusammenfügen

Wählen wir die zwei letzten Orders aus jeder Spalte: Nr. 294 und Nr. 921. Generell können sie nicht auf der gleichen Stufe zueinander sein (wie in diesem Beispiel).

Wählen wir einen Abschluss mit dem geringsten Volumen, nämlich. Abschluss Nr. 294 mit dem Volumen 5. Teilen wir den entgegengesetzten Abschluss Nr. 921 in zwei. Der erste Abschluss ist gleich dem Volumen des Abschlusses Nr. 294 (5 Kontrakte) und der zweite Abschluss enthält das restliche Volumen von 1 Kontrakt (6 Kontrakte – 5 Kontrakte = 1 Kontrakt). Verbinden wir Abschluss Nr. 294 mit dem Volumen 5 mit dem ersten Teil des Volumens Nr. 921 mit dem ähnlichen Volumen:

Tabelle 6 Subtraktion der Volumina

Tabelle 6 Subtraktion der Volumina

Übertragen wir den verbundenen Teil in eine neue Spalte mit den Abschlüssen der historischen Position.

Dies ist grün unterlegt. Lassen wir den restlichen Teil des Abschlusses Nr. 921 mit dem Volumen 1 in der eröffnenden Spalte der aktiven Position. Dies ist grau unterlegt.

Tabelle 7 Abschlüsse teilen und übertragen

Tabelle 7 Abschlüsse teilen und übertragen

Wir haben soeben den ersten Schritt in der Vereinigung von zwei Orders gemacht und sie zu einer historischen Position übertragen. Rekapitulieren wir die Handlungsabfolge nochmals kurz:

Tabelle 8 Abschlüsse teilen und übertragen. Schritt 1

Tabelle 8 Abschlüsse teilen und übertragen. Schritt 1

Das Volumen des Abschlusses Nr. 294 wurde komplett in den Abschnitt der historischen Positions übertragen. Der Abschluss wurde komplett vernichtet, da er ja geteilt in den Abschnitt der historischen Positions übertragen wurde. Deswegen können wir beim nächsten Schritt mit dem folgenden Abschluss Nr. 288 mit Volumen 2 weitermachen. Abschluss Nr. 921 ist immer noch vorhanden und sein Volumen ist gleich des übrig gebliebenen zweiten Teils des Abschlusses. Im nächsten Schritt nun wird dieses Volumen mit dem Volumen von Abschluss Nr. 288 interagieren.

Wiederholen Sie im zweiten Schritt das Vorgehen an Abschlüssen Nr. 288 und Nr. 921. Diesmal wird das übrig gebliebene Volumen von Abschluss Nr. 921 (1 Kontrakt) mit dem Volumen von Abschluss Nr. 288 vereinigt, nachdem es in die Spalte mit den historischen Orders gelangt ist. Das restliche Volumen von Abschluss Nr. 288 = 1 Kontakt und verbleibt in der Spalte der aktiven Position:

 Tabelle 9 Abschlüsse teilen und übertragen. Schritte 1-2

Tabelle 9 Abschlüsse teilen und übertragen. Schritte 1-2

Genauso bei Abschlüssen Nr. 288 und Nr. 882 verfahren:

Tabelle 10 Abschlüsse teilen und übertragen. Schritte 1-3

Tabelle 10 Abschlüsse teilen und übertragen. Schritte 1-3

Schritte IV und V auf die gleiche Weise ausführen:

Tabelle 11 Abschlüsse teilen und übertragen. Schritte 1-5

Tabelle 11 Abschlüsse teilen und übertragen. Schritte 1-5

Nach Schritt V, wird das Volumen der schließenden Order ganz genau das gleiche sein, wie das Volumen der eröffnenden Order-Abschlüsse. In die Spalte der historischen Positions übertragene Abschlüsse machen eine vollständige historische Transaktion aus. Die übrig gebliebenen Abschlüsse der aktiven Position machen eine aktive Position aus. In diesem Fall sind in der Spalte der aktiven Position keine Abschlüsse mehr übrig. Das bedeutet, dass nach so einer Verbindung die aktive Position nicht mehr besteht. Es erscheint eine neue historische Position und umfasst alle Abschlüsse der aktiven Position.

Nachdem die Abschlüsse übertragen wurden, werden viele von ihnen in Teile aufgeteilt und belegen mehrere Zeilen. Um das zu vermeiden, kann der Algorithmus der Verbindung/Teilung um eine Option zur Sammlung von Abschlüssen ergänzt werden. Verbinden Sie einfach das Volumen der Abschlüssen mit denselben Identifikatoren in:

Tabelle 12 Abschlüsse in einer Ebene verbinden

Tabelle 12 Abschlüsse in einer Ebene verbinden

Nach dieser Vereinigung stimmt die Anzahl der Abschlüsse und ihr Volumen vollständig mit den eröffnenden Abschlüssen und Volumina überein. Dies geschieht nur, weil ihre Volumina anfänglich übereingestimmt haben. Wären ihre Volumina unterschiedlich gewesen, hätten die Abschlüsse auch nach dieser Verbindung immer noch unterschiedliche Volumina.

Dieser Algorithmus ist universell, da er nicht dieselbe Anzahl an Abschlüssen für die eröffnende und schließende Order verlangt. Es gibt noch ein weiteres Beispiel, das auf dieser Eigenschaft beruht. und das sehen wir uns jetzt an:

Tabelle 13 Verbindung von Orders mit einer unterschiedlichen Anzahl von Abschlüssen

Tabelle 13 Verbindung von Orders mit einer unterschiedlichen Anzahl von Abschlüssen

Wie wir gesehen haben, war die Verbindung von Orders in eine historische Position erfolgreich. Denn trotz der unterschiedlichen Anzahl von Abschlüssen, hat ihr Volumen wieder übereingestimmt.

Stellen wir uns jetzt einmal vor, dass das zusammengefasste Volumen der schließenden Order (12 Kontrakte) geringer ist als das Volumen der Abschlüsse der eröffnenden Order (22 Kontrakte). Wie funktioniert die Vereinigung jetzt?

Tabelle 14 Verbindung von Orders mit unterschiedlichen Volumina

Tabelle 14 Verbindung von Orders mit unterschiedlichen Volumina

Wie wir sehen, ist im zweiten Schritt das Volumen der Abschlüsse der schließenden Order gleich "0", wobei die eröffnende Order zwei weitere Abschlüsse enthält: Nr. 321 mit Volumen 4 und Nr. 344 mit Volumen 6. Es gibt einen Überschuss der Abschlüsse der aktiven Order. Dieser Überschuss wird als eine bidirektionale Position bestehen. Des gibt jedoch auch eine historische Position mit den Abschlüssen, die in die grüne Spalte übertragen wurden. Ihre Einstiegs- und Ausstiegsvolumina von 12 Kontrakten stimmten abermals miteinander überein.

In dem Fall wenn das Volumen der schließenden Order größer ist als das der eröffnenden, kann es auch zu einem Überschuss kommen, wobei er sich jedoch diesmal auf Seiten der schließenden Order befindet:

Tabelle 15 Verbindung von Orders mit unterschiedlichen Volumina

Tabelle 15 Verbindung von Orders mit unterschiedlichen Volumina

Wir wir sehen, machen die eröffnende Order mit Volumen 4 und die schließende Order mit Volumen 6 zwei Positions aus, wovon die erste eine historische Position mit Volumen 4 und Abschlüssen Nr. 625 der eröffnenden Order und Nr. 719 und Nr. 720 der schließenden Order ist. Die zweite Position ist ein Überschuss der gekoppelten Abschlüsse dieser Orders und enthält Abschluss Nr. 719 mit Volumen 2. Dieser Abschluss und die Order machen eine aktive Position in der Registerkarte "Aktiv" des HedgeTerminal Panels aus.

Abschlüsse und Orders können durch den Algorithmus in historische und aktive Positions geteilt werden. Die Volumina können dabei unterschiedlich sein Der wichtigste Punkt hier ist, dass man mit Hilfe des Algorithmus die Volumina der eröffnenden und schließenden Orders zusammenbringen kann, indem man eine historische Position mit gleichen Einstiegs- und Ausstiegsvolumina bildet. Damit wird der Unmöglichkeit einer Situation entgegengewirkt, wenn diese Volumina nicht gleich sind und es daher aufgrund der Fehler der Darstellung der Position zu einer Asymmetrie der Position kommt.

Nehmen wir an, dass der Makler im ersten Beispiel einen Abschluss, der in einer schließenden Order war, storniert hat:

Tabelle 16 Simulation einer Stornierung eines Abschlusses aus der History

Tabelle 16 Simulation einer Stornierung eines Abschlusses aus der History

Eine neue Netto-Position mit dem Volumen von 6 Kontrakten. Sie ist gleich dem Volumen der stornierten Abschlüsse. Sehen wir uns mal an, wie der Algorithmus des Hedge Terminals in diesem Fall funktioniert:

Tabelle 17 Wiederherstellung der Integrität der Darstellung

Tabelle 17 Wiederherstellung der Integrität der Darstellung

Wie wir sehen, gibt es in schritt 2 einen Überschuss von 6 Kontrakten (3+2+1). Dieser Überschuss wird zu einer aktiven Position und daher sind Volumen und Richtung der bidirektionalen Position gleich denen der Netto-Position.

Zusammengefasst heißt das: der Algorithmus zur Vereinigung von Abschlüssen garantiert die Gleichheit der Volumina von eröffnenden und schließenden Orders in den historischen Positions aufgrund von überschüssigen, nicht gebundenen Abschlüssen. Dieser Überschuss an Abschlüssen macht eine bidirektionale Position aus, die in MetaTrader 5 die Netto-Position mit der Netto-Position aller aktiven Positions im HedgeTerminal gleichsetzt.

Dieser Mechanismus funktioniert sowohl rückwirkend als auch in Echtzeit und das wiederum bedeutet, dass die Netto-Positions im Hedge Terminal mit der Netto-Position in MetaTrader 5 gleichgesetzt wird, und zwar ungeachtet der Intervention des Maklers, die Handelsaktivitäten zu stornieren. Die Kombinationen bei der Änderung einer Netto-Position und der Stornierung eines Abschlusses können deshalb sein, weil sie nicht zu einer Asymmetrie zwischen der Netto-Position des Terminals und der Netto-Position des HedgeTerminals führen.

Der Mechanismus des teilweisen Schließen einer Position beruht auf der Fähigkeit dieses Algorithmus, unterschiedliche Volumina zusammenbringen zu können. Dieser Algorithmus ist einer der wichtigsten teile des HedgeTerminals, da er eine stabile Arbeit des Terminals als ein sich selbst anpassendes System gewährleistet, bei dem keinerlei Einstellungen notwendig sind.


3.9 Virtualisierung von Orders und Abschlüssen

Jede Order und jeder Abschluss im HedgeTerminal haben einen echten Prototypen mit einem entsprechenden Identifikator. Dennoch kann, vom HedgeTerminal aus betrachtet, eine Order eine aktive Position ausmachen und zugleich auch Teil einer historischen sein. Abschlüsse und Orders in MetaTrader 5 sind untrennbare Einheiten. Eine Order in der Plattform ist entweder pending oder ausgeführt. Ein Abschluss hat auch einen konstanten Wert und ist immer eine ausgeführte Transaktion.

Im HedgeTerminal können die gleichen Order und Abschlüsse in unterschiedlichen, bidirektionalen Positions vorhanden sein. Der gleiche Abschluss oder Order in ihm kann eine aktive und eine historische Position ausmachen Anders gesagt: Orders und Abschlüsse sind im HedgeTerminal in mehrere virtuelle Order und Abschlüsse aufgeteilt. Diese Darstellung der Daten unterscheidet sich sehr von der Darstellung der Daten in MetaTrader 5. Doch erlaubt genau diese Darstellung ihre eigene Flexibilität und ihre Anpassung an rückwirkende Änderungen der Handelsinformation, sodass Orders und Abschlüsse zusammengebracht werden können.


3.10 Mechanismus zum Verbergen von Orders

Im Abschnitt zur Installation des HedgeTerminals haben wir den Mechanismus zum Verbergen von Orders angesprochen. HedgeTerminal kann in der Tat einige Orders ignorieren. Damit eine Order oder ein Abschluss für das HedgeTerminal nicht mehr existiert, genügt es seinen Identifikator in die dezidierte Datei ExcludeOrderss.xml einzutragen.

Mal angenommen, wir haben mehrere ausgeführte Kauf- oder Verkauf-Orders auf einem Symbol. Das zusammengefasste Volumen der Verkauf-Orders ist gleich dem zusammengefassten Volumen der Kauf-Orders. Damit haben wir, egal wie viel Orders es wirklich gibt, als Gesamt-Position einen Wert = "0".. Befinden sich die Identifikatoren dieser Orders nicht in der Datei ExcludeOrderss.xml, zeigt das HedgeTerminal jede einzelne als bidirektionale Position an. Ihre Gesamt-Position bleibt aber dennoch "0". Wenn also eine Netto-Position in MetaTrader 5 "0" ist, kann der Beitrag diese Reihe von Order zur Netto-Position schlichtweg ignoriert werden.

Nehmen wir jetzt mal an, dass wir zum Zeitpunkt t eine Netto-Position auf dem Symbol S haben und eine Reihe von Orders N zu diesem Zeitpunkt auch auf diesem Symbol ausgeführt. Da es ja keine Position auf diesem Symbol gibt, ist das Gesamtvolumen der Reihe von Orders N unbedeutend. Die Anzahl der Orders und ihr Volumen sind tatsächlich irrelevant, da es keine Position gibt und diese Orders auch nicht zur gesamten Netto-Position beitragen. Das heißt: solche Orders können einfach ignoriert werden und es besteht kein Anlass, sie als bidirektionale Positions darzustellen.

Und genau diesen Mechanismus wendet HedgeTerminal im Moment seiner Installation an. Im Moment der Installation t , nimmt das HedgeTerminal, Wenn es keine Netto-Position gibt, die Reihe von Orders N in die Liste mit den Ausnahmen auf. Ihr Gesamtvolumen und Gesamtzahl sind irrelevant, da keine Netto-Position vorhanden ist. Gibt es im Moment der HedgeTerminal-Installation jedoch eine Netto-Position, wird das Terminal einfach nicht installiert, bevor nicht die Netto-Position geschlossen ist. Nach der Installation verändern neue Orders den Status der Netto-Position und dieser Status wird jedoch mit dem Netto-Volumen der bidirektionalen Positions im HedgeTerminal synchronisiert.

Anscheinend müssten wir also gar keine, im Moment des HedgeTerminals ausgeführten, Orders in die Liste mit den Ausnahmen aufnehmen. Es kann jedoch zugleich auch passieren, dass es eine Menge Orders im Moment der Installation gibt und von der Logik des HedgeTerminals betrachtet, werden sie alle zu bidirektionalen Positions und ihr Gesamtvolumen kann vom Netto-Volumen in MetaTrader 5 abweichen.

Der Mechanismus zum Verbergen von Orders ist daher extrem nützlich, will man sich vor einer Korrumpierung der Konto-Historie schützen. Und so funktioniert er. Nehmen wir an, es gibt ein gewisse Order-History. Wird HedgeTerminal auf diesem Konto gestartet, wird er alle Orders wiederholen und auf ihrer Grundlage eine bidirektionale Position anlegen. Sind vom Zeitpunkt der Eröffnung alle Orders verfügbar und die Daten über diese Orders nicht korrumpiert, entspricht die Netto-Position dieser Orders der Netto-Position in MetaTrader 5. Augenscheinlich ist die Netto-Position im HedgeTerminal gleich der Summe dieser Orderss. Das folgende Diagramm zeigt dies sehr gut:

Abb. 45 Diagramm der integralen History

Abb. 45 Diagramm der integralen History

Ein Teil der History kann fehlen oder die Information über Orders kann falsch sein.

Es ist nicht wichtig, falls nur eine oder evtl. mehrere Orders fehlen und es spielt auch keine Rolle ob am Anfang oder in der Mitte der Konto-Historie Information fehlt. Eine Netto-Postion, die im HedgeTerminal auf so einem Konto läuft ist gleich der Netto-Position aller vorhandenen Orders. Die Netto-Position der Orders wird, wegen des fehlenden Teils der Historie, eben nicht gleich der tatsächlichen Netto-Position des Terminals sein. Diese Situation wird in Diagramm B veranschaulicht:

Abb. 46 Teilweise korrumpierte History

Abb. 46 Teilweise korrumpierte History

Zur Synchronisierung einer Netto-Position im HedgeTerminal mit der tatsächlichen Netto-Position in MetaTrader 5, müssen wir nicht wissen, welche Orders verschwunden oder korrumpiert sind. Wir müssen lediglich die Differenz zwischen diesen Netto-Positions berechnen. Im obigen Beispiel ist eine Position zum Kaufen mit dem Volumen von 5 Kontrakten im MetaTrader 5 Terminal offen. Im HedgeTerminal entspricht dies einer Long Gasamtposition von 8 Kontrakten. Die Differenz zwischen beiden Positions ist also 3 Kontrakte zum Kaufen, denn 8 Kaufen – 5 Kaufen = 3 Kaufen.

Nachdem die Kontrakt-Differenz berechnet wurde, muss man unbedingt eine entsprechende Kauf- oder Verkauf-Order mit einem, der Differenz entsprechenden Volumen platzieren. In unserem Beispiel müssen wir daher eine Order für den Kauf von 3 Kontrakten platzieren. Wird die Order ausgeführt, zeigt HedgeTerminal sie in der Registerkarte der aktiven Positions und ihre Gesamt-Netto-Position erhöht sich um 3 Kontrakte und liegt dann bei 11 Kontrakten zum Kaufen.

Die Position in MetaTrader 5 erhöht sich ebenfalls und macht nun 8 Kontrakte aus. Der Identifkator dieser Order muss in die Liste der ExcludeOrderss.xml eingetragen werden, und anschließend das Terminal neu gestartet werden. Ist also der Identifikator unserer Order = 101162513, muss die folgende Kennzeichnung in die Datei geschrieben werden:

<Orders-Exclude>
        ...
        <Order AccountID="10052699" ID="101162513"></Order>
</Orders-Exclude>

Nach dem Neustart des HedgeTerminals wird diese bidirektionale Position verschwinden. Auf diese Weise stimmt eine Netto-Position in MetaTrader 5 mit einer Netto-Position im HedgeTerminal überein und macht 5 Kontrakte zum Kaufen aus. Die eben beschriebene Handlungsabfolge ist im unten stehenden Diagramm dargestellt:

Abb. 47 Diagramm der Wiederherstellung der Datenintegrität

Abb. 47 Diagramm der Wiederherstellung der Datenintegrität

Das Finanzergebnis der verschwundenen Position taucht nicht in der Statistik des HedgeTerminals auf. Denn leider fließen verborgene, bidirektionale Positions nicht in die Handelsstatistik mit ein, denn

in Wirklichkeit ist die Wahrscheinlichkeit, dass ein Teil der Historie nicht verfügbar oder korrumpiert ist, extrem gering. Ein derartiger Mechanismus muss aber dennoch eingerichtet sein, selbst Wenn die meisten MetaTrader 5 Benutzer niemals in eine Situation geraten, wo sie ihn anwenden müssten. Denn man kann die Möglichkeit von Programmfehlern von HedgeTerminal halt doch nicht ganz ausschließen. Und selbst in diesem Fall sollte ein zuverlässiges Instrument zur Behebung dieser Fehler zur Verfügung stehen.


3.11 Anpassungsmechanismen

Wir haben Mechanismen betrachtet mittels denen das HedgeTerminal bidirektionale Positions in der Netto-Umgebung von MetaTrader 5 darstellen kann, und zwar folgende drei:

  1. Sequentielle Wiederholung von Abschlüssen;
  2. Mechanismus des Aufteilung und Verbindens von Abschlüssen;
  3. Mechanismus des Verbergens von Orders.

Jede dieser Mechanismen bearbeitet seine Probleme und vermeidet so Zweideutigkeiten und Fehler auf ihren Stufen. Bringen wir diese Probleme und ihre Lösungen mal in eine Tabelle. Die erste Spalte enthält die Probleme und möglichen Fehler der Bindung und die zweite Spalte die Mechanismen zu ihrer Lösung:

Probleme, Fehler und Zweideutigkeiten, die bei der Organisation von bidirektionalem Handel auftretenMechanismen zur Fehlerkorrektur
Fehler bei den Verknüpfungen zu den Eröffnungs-Orders; Verknüpfungskollision; Long magische Zahlen in Experts; Löschen von Orders aus der History; Fehler bei der Ausführung von Handelsabläufen.Sequentielle Wiederholung über Orders. Handlungsdeterminismus.
Volumenfehler; übereinstimmende Orders mit verschiedenen Volumen; teilweise Ausführung der Orders; Löschen von Abschlüssen aus der History; Abdeckung eines kleineren Volumens mit einem größeren.Mechanismus des Aufteilung und Übereinstimmung von Abschlüssen.
Installation des HedgeTerminal auf dem Konto mit einer großen Anzahl ausgeführter Orders; korrumpierte History; Störungen des HedgeTerminals bei der Arbeit mit Orders.Mechanismus des Verbergens von Orders.

Tabelle 18. Mögliche Fehler und Mechanismus zu ihrer Beseitigung

Alle drei Mechanismen, zusammen mit dem System der Speicherung der Verknüpfungen, gewährleisten stabile Darstellung von Daten. Im Grunde decken diese Mechanismen alle möglichen Fälle unvorhergesehener Ausfälle ab und gewährleisten eine Übereinstimmung der Netto-Positions im HedgeTerminal mit den Netto-Positions in MetaTrader 5.


3.12 Leistung und Verwendung des Speichers

HedgeTerminal ist eigentlich eine Objekt-orientierte Anwendung. Aufgrund der seiner Architektur zugrunde liegenden OOP-Prinzipuen, ist das Termial höchst effizient und belastet den Speicherplatz nur wenig. Die einzige Aufgabe, die wirklich Ressourcen frisst, ist die Extraktion der Orders- und Abschluss-History in den Speicher des Computers zum Zeitpunkt des Terminalstarts auf einem Chart.

Sind dann alle erforderlichen Transaktionen in den Speicher extrahiert worden, druckt das Terminal eine Meldung, mit genauer Angaben der für diese Aufgabe gebrauchten Zeit und benutzten Speicherplatz. Der Start des HedgeTerminal-Panels auf dem Konto mit über 20.000 Abschlüsse dauerte auf einem Computer mit dem Intel i7 Prozessor weniger als 30 Sekunden und benötigte 118 MB RAM:

2014.11.20 16:26:19.785 hedgeterminalultimate (EURUSD,H1)       We begin. Parsing of history deals (22156) and orders (22237) completed for 28.080 sec. 118MB RAM used.

Die HedgeTerminalAPI-Library arbeitet sogar noch schneller und braucht wesentlich weniger Speicher, da eine grafische Darstellung der Transaktionen nicht erforderlich ist. Unten sehen Sie das Ergebnis des Starts auf dem gleichen Konto:

2014.11.20 16:21:46.183 TestHedgeTerminalAPI (EURUSD,H1)        We are begin. Parsing of history deals (22156) and orders (22237) completed for 22.792 sec. 44MB RAM used.

Eine einfache Berechnung zeigt, dass die Extraktion einer Position, je nach Programmtyp, zwischen 1 bis 1,26 Millisekunden dauert. Das Speichern einer Transaktion benötigt: (22.156 Abschlüsse + 22.237 Orders) / 44 MB = 1 KB RAM. Das Speichern zusätzlicher grafischer Darstellung einer Transaktion benötigt ungefähr: (118 MB – 44 MB) * 1024 / (22.156 Abschlüsse + 22.237 Orders) = 1,71 KB Speicher.

Die Code-Profilerstellung zeigt, dass die meiste Zeit mit dem einzigen Block der Orders-Analyse draufgeht. Der Großteil dieses Blocks ist der Aufruf der Systemfunktion. In zukünftigen Versionen wird dieser Block noch optimiert, sodass sich die Effizienz des HedgeTerminals bei seinem Start um weitere 10-15% erhöhen wird.


Fazit

Wir haben uns die wichtigsten Punkte der Arbeit mit dem visuellen Panel HedgeTerminal angesehen. Es handelte sich dabei um ein Beispiel der Erzeugung einer neuen Panel-Klasse mit der Möglichkeit einer flexiblen Konfiguration.

Schemata und Spezifikationen haben uns ein umfassendes Bild der Organisationsprinzipien des bidirektionalen Handels vermittelt. Wenn Sie Ihre eigenen Virtualisierungs-Libraries anlegen, wird Ihnen das zweite Kapitel dieses Beitrags beim Design einer solchen Library helfen.

Der Charakter der Börsenausführung verlangt, dass man die Schlüsselpunkte im Darstellungsprozess eines Abschlusses und einer Orders als bidirektionale Positions berücksichtigt. Dieser Beitrag hat gezeigt, dass ohne die Virtualisierung von Abschlüssen und Orders eine derartige Darstellung unmöglich ist. Virtualisierung ist ein Mechanismus des "Aufbrechens" des Volumens ausgeführter Abschlüsse und des "Klonens" echter Orders, sodass eine Order Teil mehrerer Transaktionen sein kann.

Diese "Eingriffe" in die Handelsumgebung sind eher mutig, doch der Großteil der bei der Virtualisierung benötigten Information ist auf dem Handelsserver abgelegt, sodass eine derartige Darstellung durchaus als zuverlässig angesehen werden kann.