Enrico ist es möglich, zu überprüfen, ob der Auftrag (oder die Position) teilweise geschlossen wurde.
In MT4 habe ich ein neues Ticket im Falle einer teilweisen Schließung. In der Tat ist es nicht eine neue Eingabe, sondern noch früheren Eintrag. Ich brauche also getrennte solche Aufträge. Diejenigen, die einen echten Markteintritt anzeigen und diejenigen, die nach einer teilweisen Schließung erscheinen (kein neuer Eintritt). Ist das mit Ihren Klassen möglich?
Enrico ist es möglich, zu überprüfen, ob der Auftrag (oder die Position) teilweise geschlossen wurde.
In MT4 habe ich ein neues Ticket im Falle einer teilweisen Schließung. In der Tat ist es nicht eine neue Eingabe, sondern noch früheren Eintrag. Ich brauche also getrennte solche Aufträge. Diejenigen, die einen echten Markteintritt anzeigen und diejenigen, die nach einer teilweisen Schließung erscheinen (kein neuer Eintritt). Ist das mit Ihren Klassen möglich?
Oder wäre es ein einziges COrder-Objekt, bis der Auftrag vollständig geschlossen ist? Ich meine, nach teilweiser Schließung kein neues COrder-Objekt?
Wenn ja, wie erhalte ich den Gesamtgewinn der Order?
Wie erhalte ich außerdem das anfängliche Auftragsticket oder den anfänglichen Auftragstyp?
Angenommen, ich habe einen Verkaufsauftrag zu 5,00 #1 bei 1,09246. Nächster Teilschlusskurs Kauf 2,00 #2 zu 1,08896. Und der letzte Abschluss ist der Kauf von 3,00 #3 zu 1,09161 (aufgrund des Trailing-Stops).
Dies ist mein Code:
COrders *orders=order_manager.OrdersHistory(); for(int i=order_manager.OrdersHistoryTotal()-1;i>=0;i--) { COrder *order=orders.At(i); if(!CheckPointer(order)) continue; order.OnTick(); if(!order.IsClosed()) continue; if(order.OrderType()!=0 && order.OrderType()!=1) continue;
Zur Vereinfachung nennen wir alle diese 3 Aufträge als Position.
Die Methode IsClosed() gibt true zurück, wenn die Position geschlossen wird (bei der letzten Order #3). Aber wie bekomme ich den Positionstyp, das erste Orderticket der Position und den offenen Preis der Position. Das anfängliche Volumen der Position kann mit der Methode InitVolume() berechnet werden. Was ist mit dem Rest?
Angenommen, ich habe einen Verkaufsauftrag zu 5,00 #1 bei 1,09246. Nächster Teilschlusskurs Kauf 2,00 #2 zu 1,08896. Und der letzte Abschluss ist der Kauf von 3,00 #3 zu 1,09161 (aufgrund des Trailing-Stops).
Dies ist mein Code:
Zur Vereinfachung nennen wir alle diese 3 Aufträge als Position.
Die Methode IsClosed() gibt true zurück, wenn die Position geschlossen wird (bei der letzten Order #3). Aber wie bekomme ich den Positionstyp, das erste Orderticket der Position und den offenen Preis der Position. Das anfängliche Volumen der Position kann mit der Methode InitVolume() berechnet werden. Was ist mit dem Rest?
Ich bin mir nicht ganz sicher, was Sie zu tun versuchen, aber um den nicht realisierten Gewinn/Verlust in MQL5 auf einer COrder-Instanz zu erhalten, besteht eine Möglichkeit darin, das verbleibende Volumen zu ermitteln und es dann mit der Differenz zwischen dem aktuellen Marktpreis (Geld- oder Briefkurs) und dem COrder-Eingangskurs zu multiplizieren, und dann mit dem Tick-Wert zu multiplizieren. Schwieriger wird es, wenn der Punkt des Symbols nicht der Tickgröße entspricht (dann müssen Sie die Differenz durch die Tickgröße dividieren). Bei Gold war das früher so, aber jetzt nicht mehr, soweit ich weiß. Es ist einfach besser, einen Broker zu finden, der mehr Liquidität bietet. Die gleiche COrder-Instanz wird bis zum Ende verwendet. In MQL4 müssen Sie nur das Orderticket auswählen und die Funktion OrderProfit() aufrufen.
When one sends a trade request, there are only two outcomes: processed or not processed. If the trade was not processed, it means that there was no deal, as the trade server was not able to process it for some reason (usually due to errors). Now, if the trade is processed, in MQL5, the client and the server have a deal. In this case, the order can be fully executed or partially executed.
Das ist nicht ganz genau, man kann auch eine Zeitüberschreitung haben. Das bedeutet, dass Sie nicht wissen, ob die Bestellung bearbeitet wurde oder nicht. Natürlich wird eine Order am Ende entweder ausgeführt oder nicht, aber es ist wichtig, den Timeout auf einem Live-Konto zu kennen und zu verarbeiten.
MetaTrader 4 hat diese Möglichkeit nicht, da die Order nur ganz oder gar nicht ausgeführt wird (fill or kill).
...
In MQL4 ist die Berechnung des Volumens sehr einfach. Immer wenn ein Expert Advisor eine Handelsanfrage sendet, wird das Volumen der Anfrage mit einbezogen, und sie würde entweder abgelehnt oder angenommen.
Das ist nicht exakt. MT4 kann auch teilweise ausgefüllte Aufträge haben. Natürlich sollte dies bei Forex, das hauptsächlich mit MT4 gehandelt wird, selten sein, aber es kann technisch gesehen vorkommen.
Im Allgemeinen sehe ich den Nutzen der Klassen, die Sie in diesem Artikel zur Verfügung gestellt haben, nicht, da Sie immer noch einen spezifischen MT4/MT5 im Hauptcode und Compiler-Direktiven benötigen. (Vielleicht ist es auf weitere Artikel angesprochen, ich habe sie noch nicht gelesen).

- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Neuer Artikel Cross-Plattform Expert Advisor: Orders :
MetaTrader 4 und MetaTrader 5 verwenden unterschiedliche Konventionen, um den Handel durchzuführen. Dieser Artikel diskutiert die Möglichkeit, mit einem Klassenobjekt die Aufgaben des Handels mit den Server durchzuführen, unabhängig davon, auf welcher Handelsplattform oder in welchem Modus ein Cross-Plattform Expert Advisor arbeitet.
Der EA macht auch einen Eintrag im "Experts Tab". Diese Nachricht ist aber nicht über die Ausführung der Positionen, sondern nur, dass die Funktion ExpertRemove ausgeführt wurde, im Vergleich zum MetaTrader 4, der diese Nachricht in den "Experts Tab" schreibt:
Autor: Enrico Lambino