Home menu menu menu Bestellen Service Download Kontakt
menu menu Demoversion menu menu menu Impressum
menu menu menu menu menu menu menu AGB
Börse Software Screenshot menu menu menu menu
menu
menu


erste Schritte
erste Schritte







Daten

Charts

Automatische Trades

Einführendes:

Mit xtrade ist es möglich, die Trades der Omega Tradestation automatisch mit dem Broker: "Interactive Brokers" zu handeln und somit das Trading zu automatisieren. xtrade unterstützt beliebig viele Handelssysteme und diese können auch auf unterschiedlichen Accounts von IB gehandelt werden. Für jedes Handelssystem können auch mehrere Pyramiden gebaut werden. Außerdem unterstützt xtrade Bracketorders von IB. Das bedeutet, wenn Ihr Rechner einmal ausfallen sollte, und Sie im Markt sind, dann liegen die Orders im IB System. Und Sie sind in jedem Fall abgesichert.
Sicherheitsfeature:
Wenn der letzte Preis vom Bund Future bei 199,50 steht und Sie sich in den Markt einstoppen lassen wollen und eine Kauf Order mit dem Stoppreis von 119,47 übermitteln, dann wird diese Order von der Eurex mit einer Fehlermeldung zurückgewiesen. (da der Stop Preis kleiner dem letzten Trade ist ) xtrade sorgt nun dafür, dass ihr Orderwunsch dennoch berücksichtigt wird, in dem die komplette Order in eine Market Order umgewandelt wird. Sie brauchen sich um nichts zu kümmern.
Dasselbe gilt für (Trailing) Stop-Anpassungen wärend des Trades.

Hier ein kurzer Blick auf das TradeStation Automatisierungs Center:



Omega Center

Grundlegendes:

xtrade liest eine von der Tradestation erstellte Text Datei aus, diese Textdatei kann relativ simpel in der Tradestation erzeugt werden: Dazu ist der folgende einfache Code notwendig:




     vars: filename("C:\Programme\xtrade\Ausbruchssytem\Trade1.txt");
          vars: order1("") , order2("") , order3("") ,

          .
          .
          fileappend(filename, "BEGIN;" + numtostr(time,0) + newline + order1
                                newline + order2 + newline + order3);
    


Jedem Handelssystem wird in xtrade ein eigener Ordner zugewiesen, in dem die verschiedenen Dateien der verschiedenen Trades abgespeichert werden. Trades1.txt bis Trades6.txt enthalten die Bracketorders ( Pyramiden, Long-, Short-Orders)



Trades

Eine erzeugte Textdatei, die immer einen kompletten Trade enthält, muss folgendes Format erfüllen:




     BEGIN
     ZEIT;1715
     NAME;system1
     CONTRACT;GBL;DTB;FUT;2005;12
     ORDER;long
     T1;entry;buy;2;LMT;119.50;DAY;OCA
     T2;stop;sell;2;STP;119.40;DAY;OCA-Exit
     T3;target;sell;2;LMT;119.70;DAY;OCA-Exit
     END
    


Syntax:

Die erste Zeile enthält ein einfaches "BEGIN".
Es folgt die Zeit des Schreibens der Datei, der SystemName erscheint in der 3. Zeile. Danach folgt die Bracket Order. Die Target Order ist nicht zwingend notwendig. Es genügt die Einstieg- und die Ausstiegsorder, die immer miteiander gekoppelt werden.

Die zweite SPALTE der ORDERS enthält entry, target, oder stop

in der DRITTEN Spalte der ORDERS steht buy, sell oder CANCEL drin. Wichtig ist die Angabe der OCA ( one-cancels-all) Gruppe. Wenn ihr Gewinn-Ziel erreicht ist, wird die Ausstoporder vom IB-System automatisch gelöscht. Die Entryorder darf nicht dieselbe OCA Gruppe wie Exit Orders haben.

Wenn Sie diesen Trade wieder löschen wollen, dann auf folgende Art und Weise: Wenn die Entryorder gelöscht wird, werden auch die Stop und Target Order gelöscht, da diese miteinander verbunden sind.




     BEGIN
     ZEIT;1715
     NAME;system1
     CONTRACT;GBL;DTB;FUT;2005;12
     ORDER;long
     T1;entry; cancel;;;;;
     T2;stop; cancel;;;;;
     T3;target; cancel;;;;;
     END
    


xtradeTrans.dll zur Rückmeldung des Systemstatus in die Tradestation !



Mit der xtradeTrans.dll ist es möglich, den aktuellen (reellen) Orderstatus in der Tradestation auszuwerten.
xtrade sendet dazu während des Handelsverlaufs den aktuellen SystemStatus an die DLL. Dieser wird dort gespeichert, und kann innerhalb der Tradestation ausgewertet werden.

Von der DLL werden folgende Funktionen zur Verfügung gestellt.

- Function getsystemrunning ( System : integer) : integer;
- Function getposition ( System : integer; TradeNR: integer) : integer;
- Function getmaxstatus ( System : integer; TradeNR: integer) : integer;
- Function getlastfilldate ( System : integer, TradeNR : integer) : integer;
- Function getlastfilltime ( System : integer; TradeNR : integer) : integer;
- Function getlastfillprice ( System : integer; TradeNR : integer) : double;

Wichtig ist, dass bei DLL's die Groß- und Kleinschreibung der Funktionsnamen wichtig und zu berücksichtigen ist.

Die Zugriffe erfolgen anhand von ID's. Die ID´s werden von xtrade vergeben und können selber nicht geändert werden. (und sind einfach fortlaufend nummeriert) Bei Löschung eines Systems wird diese ID auch nicht noch einmal vergeben.

Erklärung Function getsystemrunning:

----------------------------------------------------------------------

Die Funktion liefert als Ergebnis, ob in xtrade das System ein oder ausgeschaltet ist. Empfohlen wird, bei ausgeschaltetem System keine Trades in den Transfer-Dateien abzulegen. Welches System man haben möchte, muss im ersten Parameter "System" angegeben werden. Die notwendige System ID erfahren Sie im Tradestation Automatisierungs Center, (rechte Maustaste, Eigenschaften). Die ID wird von xtrade beim Einrichten des Systems vorgegeben. Die Funktion gibt einen Integer Wert zurück, der 0 oder 1 sein kann.

Hier ein kleines Beispiel für die Verwendung:




     DefineDLLFunc:
     "C:\Programme\xtrade\bin\xtradeTrans.dll",int,int,"getsystemrunning",int;

     var: Systemrunning(0);

     Systemrunning = getsytemrunning(0);
                  {gibt an, ob System mit ID 0 an oder eingestaltet}
                  {ist, kann den Wert 0 oder 1 liefern}

     if Systemrunning = 1 then begin {System läuft}
        {Textdatei schreiben}
     END
    


Erklärung Function getposition:

Die Funktion liefert als Ergebnis den aktuellen Systemstatus eines bestimmten Systems in xtrade zurück. Welches System man haben möchte, muss im ersten Paramenter "System" angeben werden. Die notwendige System ID erfahren Sie im Tradestation Automatisierungs Center, (rechte Maustaste, Eigenschaften). Die ID wird von xtrade beim Einrichten des Systems vorgegeben. Die zweite Variable ist der Parameter "TradeNR". Dieser kann die Wert von 0,1 und 2 .. 6 beeinhalten.
Wenn dieser Parameter

0 ist: dann wird der GESAMT-Status vom System x zurückgeliefert
1 ist: dann wird der Status vom 1. Trade ( erste Pyramide) geliefert
2 ist: dann wird der Status vom 2. Trade ( zweite Pyramide) geliefert.
usw.

Der Gesamtstatus des Handelssystems ist im Prinzip die Summe von allen Trades ( Pyramiden ) (Die Zahlen entsprechen den Zahlen in xtrade)

Hier ein kleines Beispiel, wie diese Funktion in der Tradestation zu verwenden ist.




     DefineDLLFunc:
     "C:\Programme\xtrade\bin\xtradeTrans.dll",int,int,"getposition",int;int;

     var: statusTrade1(0);
          statusTrade2(0);
          statusTrade3(0);

     gesamtstatus = getposition(1,0); {Gesamtstatus von System mit ID 1}
     statusTrade1 = getposition(1,1); {Status von Trade 1 von System mit ID 1}

     statusTrade1 = getposition(1,2); {Status von Trade 2 von System mit ID 1}

     if date = currentdate and time > 730 then begin
               if gesamtstatus > 0 then buy {h[0] stop};
               if gesamtstatus < 0 then sell {h[0] stop};
               if gesamtstatus = 0 then exitlong;
               if gesamtstatus = 0 then exitshort;
     END;

     setexitonclose;

    


Erklärung Function getmaxstatus:

Die Vorgehensweise ist analog zu getposition. Die Funktion getmaxstatus liefert den maximalen Status eines Trades (Bracketorder) während der Trade offen war, und auch nachdem der Trade beendet ist. der MaxStatus wird auf Null gesetzt, wenn der nächste Trade eröffnet wird/eröffnet ist.




     DefineDLLFunc:
     "C:\Programme\xtrade\bin\xtradeTrans.dll",int,int,"getmaxstatus",int;int;

     var: MaximalstatusTrade1(0);

     MaximalstatusTrade1 = getmaxstatus(5,1);
                           {Maximaler Status von Trade 1}
                           {während dieser offen war von System mit ID 5}

    


Erklärung Function getlastfilldate +getlastfilltime + getlastfillprice:

So bindet man diese drei Funktionen in der Tradestation ein. Der erste Parameter ist die System ID und der zweite die Tradenummer.




     DefineDLLFunc:
         "C:\Programme\xtrade\Trans.dll",int,"getlastfilldate", int,int;
     DefineDLLFunc:
         "C:\Programme\xtrade\Trans.dll",int,"getlastfilldate", int,int;
     DefineDLLFunc:
         "C:\Programme\xtrade\Trans.dll",double,"getlastfillprice",int,int;

     var lastfilldate(0);
         lastfilltime(0);
         lastfillprice(0);

     lastfilldate  = getlastfilldate(1,3);
         {Datum des letzten Trades von TradeNr.: 3 des System1}
     lastfilltime  = getlastfilltime(1,3);
         {Zeit des letzten Trades von TradeNr.: 3 des System1}
     lastfillprice = getlastfillprice(1,3);
         {Ausfühhrungspreisdes letzten Trades von TradeNr.: 3 des System1}
    


Erklärung getlastfilldate:

Die Funktion liefert als Ergebnis das Datum (ein Integer Wert) des letzten gefillten Trades zurück. Als Parameter benötigt die Funktion die ID des Trading Systems und die Tradenummer. Sollte noch kein Trade zustande gekommen sein, dann liefert die Funktion Null zurück.

Die Funktion liefert für den 20. 03. 2004 einen Integerwert "1040320" zurück. Nach meinen Recherchen sollte dieser in der Tradestation mit der Funktion "Date" vergleichbar sein.



Erklärung Function getlastfilltime:

Diese Funktion liefert als Ergebnis die Zeit (Integer) des letzten Fills zurück. Als Parameter benötigt die Funktion die Nummer des Trading Systems und die Tradenummer. Sollte noch kein Trade zustande gekommen sein, so liefert auch diese Funktion Null.

BSP: Die Funktion getlastfilltime liefert für 19:24:50 Uhr den Integerwert "192450". Wenn die in der Omega Tradestation gebräuchliche Angabe der Uhrzeit ohne Sekunden benötigt wird, so kann man das Ergebnis mit der Funktion: "IntPortion(192450/100) = 1924 selbst errechnen.

Im Zusammenspiel mit der Funktion getlastfilltime ist es somit für den Easy Language Programmierer möglich, für den Backtest als auch für den Realtime Handel den selben Quellcode zu benutzen. (incl. DLL) Sollte also der Funktionswert Null sein, wird das Ergebnis der Funktion getlastfilldate nicht berücksichtigt. Sollten wir uns allerding im Realtime Handel befinden, und das Datum und die Zeit größer oder gleich des letzten Trade Zeitpunktes sein, so kann das Ergebnis der DLL als wahr angenommen werden und eventuell ein Abgleich der Position in der Tradestation erfolgen, ohne dass ein Tick nachgetragen werden muss. Das könnte ungefähr so aussehen:




     if lastfilltime < > 0 and lastfilltime < > 0 then
        begin
          if gesamtstatus = 0 then exitlong;
          if gesamtstatus = 0 then exitshort;
                  end; { von Time >= lastfilltime and Date >= lastfilldate}
        end; { von gettime < > 0 }
    


Erklärung Function getlastfillprice

Diese Funktion liefert als Ergebnis den Ausführungs Preis (Double) des letzten Fills zurück. Als Parameter benötigt die Funktion die Nummer des Trading Systems und die Tradenummer: Sollte noch kein Trade zustande gekommen sein, so liefert auch diese Funktion Null.



Sonstiges: Testtool GetDLL

GetDLL ist ein Testtool, um die Werte, die sich in der xtradeTrans.dll befinden, anzeigen zu lassen.

Der Pfad zur DLL muss korrekt sein, die DLL befindet sich im xtrade\bin Verzeichnis. Wichtig ist ausserdem, dass bei DLL Exporten die Groß und Klein-Schreibung zu beachten ist. In dem Fall werden alle Funktionen klein geschreiben ! (am besten so übernehmen).

Da die Arbeitsweise der DLL im Backtest Betrieb nicht zu sehen ist, habe ich ein Programm GetDLL zum Download zur Verfügung gestellt. Mit diesem kann man mal während des realen Handels ein wenig herumspielen, und die Statuswerte aus der DLL auslesen, umd zu sehen, wie das ganze funktioniert.

Das Programm GetDLL kann hier downgeloaded werden.

http://www.xtrade.de/download/GetDLL.zip



Getdll

So sieht das Programm aus.

Dann gibt man noch ein, für welches System ( ID) man den Status möchte, und dann trägt man noch ein WELCHEN Status man möchte. Nach drücken des Buttons kann man so oft man will den entsprechenden Systemstatus auslesen.

Anolog dazu kann man lastfilldate und lastfilltime und lastfillprice auslesen.



In xtrade selber:

In xtrade selber kann man im Programm Modul "TradeStation Center" zum Testen der DLL manuell den Systemstatus + eine beliebige Zeit hineinschreiben. Diese Feature dient nur zu TESTZWECKEN und darf nicht während des Tradings verwendet werden, um etwa den Systemstatus verändern zu wollen !

Die Werte kann man mit folgendem Formular eintragen. Zu diesem Formular kommt man, indem man auf das System mit der rechten Maustaste klickt, und den Menüpunkt "SystemStatus setzen" auswählt. In das Feld T1 bis T5 trägt man den gewünschten Status der Trades (Pyramiden) vom entsprechenden Handelssystem ein. Nach dem betätigen des Buttons "Setzen" werden die Daten in die xtradeTrans.dll hineingeschrieben. ( ... \xtrade\bin\xtradeTrans.dll) und können von der Omega Tradestation oder mit dem Testtool "GetDLL" ausgelesen werden).



Status setzen

Zu beachten:



Bracket

In xtrade selber:

Die System sollten während eines laufenden Trades nicht ausgeschaltet werden. Alle Order ID´s werden bis jetzt nur im Speicher gehalten, und nirgendwo auf Festplatte gesichert. Sollte also der Rechner mal abstürzen, und Windows neu gebootet werden müssen. Dann den automatischen Handel ERST wieder beginnen, wenn das entsprechende System gerade FLAT ist, also nicht mitten im Trade anfangen, xtrade einzuschalten.





Atelier Habibus