22 April 2016
22 April 2016
Netting
In diesem System kann zur gleichen Zeit nur eine Position pro Symbol vorhanden sein:
Dabei ist es irrelevant, was den Trade in der entgegengesetzte
Richtung hervorgerufen hat — die Ausführung einer Marktorder oder
Auslösung einer Pending-Order.
Das Beispiel unten zeigt die Ausführung von zwei Buy-Trades EURUSD mit dem Volumen in Höhe von 0.5 Lots:
Aus der Ausführung dieser Trades ergab sich eine gemeinsame Position mit einem Volumen in Höhe von einem Lot.
Hedging-System
Beim Hedging kann man eine Vielzahl von Positionen auf einem und
demselben Symbol haben, darunter auch von entgegengesetzte Positionen.
Wenn eine offene Position für das Symbol vorhanden ist, und der Händler
einen neuen Trade ausführt (bzw. eine Pending-Order ausgelöst wird),
wird eine neue Position eröffnet. Die vorhandene Position ändert sich
nicht.
Das Beispiel unten zeigt die Ausführung von zwei Buy-Trades EURUSD mit dem Volumen in Höhe von 0.5 Lots:
Die Ausführung dieser Trades führte zur Eröffnung zwei separater Positionen.
Neuer Typ von Handelstransaktionen Close By
Für Konten mit Hedging wurde ein neuer Typ von Transaktionen
hinzugefügt — Schließung einer Position zur Gegenposition. Diese
Operation ermöglicht es, zwei gegensätzliche Positionen auf einem
Instrument gleichzeitig zu schließen. Wenn die Gegenpositionen
unterschiedliche Zahl von Lots haben, bleibt nur eine der Orders offen.
Ihr Volumen ist der Differenz der Lots dieser zwei geschlossener
Positionen gleich, und die Richtung der Position sowie der
Eröffnungspreis stimmen mit der größeren (nach Volumen) Position
überein.
Im Gegensatz zur einzelnen Schließung von zwei Positionen, lässt die Schließung zur Gegenposition einen Spread sparen:
Beim Schließen einer Position zur Gegenposition wird eine Order vom Typ "close by" platziert. Im Kommentar zur Order sind die Tickets der Positionen angegeben, die geschlossen werden. Die Schließung eines Paares gegenläufiger Positionen erfolgt durch zwei Trades vom Typ "out by". Der Gesamtgewinn/-verlust nach der Schließung der beiden Positionen wird nur in einem Trade angegeben.
Beim Import werden Tickets von
Orders und Positionen (Orders der Historie eingeschlossen) nicht
gespeichert, denn einem Satz in der Historie des MetaTrader 4 können bis
zu vier Sätze in der Historie des MetaTrader 5 entsprechen. Allen
Eintragungen werden neue Tickets zugewiesen.
Kontonummern können erhalten bleiben oder durch neue ersetzt werden, je nach dem, wie Ihr Broker den Import durchgeführt hat.
Beim Testen anhand realer Ticks kann viel Internet-Traffic über MQL5 Cloud Network übertragen werden. Dies kann sich auf den Endpreis für die Nutzung des Rechnernetzes auswirken.
class CAnimal { public: CAnimal(); // Konstruktor virtual void Sound() = 0; // rein virtuelle Funktion private: double m_legs_count; // Pfotenzahl };Die Sound() Funktion ist hier rein virtuell, weil diese mit dem Spezifikator der rein virtuellen PURE-Funktion (=0) deklariert wurde.
class CAnimal { public: virtual void Sound()=NULL; // PURE method, muss in der abgeleiteten Klasse neu definiert werden; die CAnimal Klasse selbst ist abstrakt geworden und kann nicht erstellt werden }; //--- abgeleitet von der abstrakten Klasse class CCat : public CAnimal { public: virtual void Sound() { Print("Myau"); } // PURE wurde neu definiert, die Klasse Ccar ist nicht abstrakt und kann erstellt werden }; //--- Beispiele für die falsche Anwendung new CAnimal; // Fehler 'CAnimal' - der Compiler zeigt die Fehlermeldung "cannot instantiate abstract class" an CAnimal some_animal; // Fehler 'CAnimal' - der Compiler zeigt die Fehlermeldung "cannot instantiate abstract class" an //--- Beispiele für die richtige Anwendung new CCat; // kein Fehler - die CCat Klasse ist nicht abstrakt; // kein Fehler - die Klasse CCat ist nicht abstraktBegrenzungen bei der Anwendung abstrakter Klassen
//+------------------------------------------------------------------+ //| Abstrakte Basisklasse | //+------------------------------------------------------------------+ class CAnimal { public: //--- rein virtuelle Funktion virtual void Sound(void)=NULL; //--- Funktion void CallSound(void) { Sound(); } //--- Konstruktor CAnimal() { //--- expliziter Aufruf der virtuellen Methode Sound(); //--- impliziter Aufruf (über eine dritte Funktion) CallSound(); //--- Konstruktor bzw. Destruktor ruft immer eigene Funktionen auf, //--- trotz der Virtualität und Neudefinierung der aufgerufenen Funktion in einer abgeleiteten Klasse //--- wenn die Funktion rein virtuell ist, //--- führt der Aufruf zum kritischen Ausführungsfehler: "pure virtual function call" } };Jedoch können Konstruktoren und Destruktoren abstrakter Klassen andere Memberfunktionen aufrufen.
typedef int (*TFunc)(int,int);Jetzt ist TFunc ein Typ, man kann die Pointer-Variable auf Funktion deklarieren:
TFunc func_ptr;In der Variablen func_ptr kann man die Funktionsadresse speichern, um diese später aufzurufen:
int sub(int x,int y) { return(x-y); } int add(int x,int y) { return(x+y); } int neg(int x) { return(~x); } func_ptr=sub; Print(func_ptr(10,5)); func_ptr=add; Print(func_ptr(10,5)); func_ptr=neg; // Fehler: neg hat nicht den Typ int (int,int) Print(func_ptr(10)); // Fehler: zwei Parameter müssen vorhanden seinPointers auf Funktionen können als Parameter gespeichert und übergeben werden. Man kann keinen Pointer auf eine nicht statische Methode der Klasse erhalten.
ulong PositionGetTicket( int index // Nummer in der Liste der Positionen );
bool PositionSelectByTicket(
ulong ticket // das Ticket der Position
);