Und in diesem Fall gibt es keine Möglichkeit, den Begrenzer zu umgehen. Oder gibt es eine Möglichkeit?
Ich schließe Positionen, indem ich einen Take-Out zum aktuellen Kurs setze. Aber der Takeout erfolgt nicht immer in Form eines Limits (hängt von der Software des Brokers ab). Deshalb ist diese Lösung nicht immer geeignet.
Wenn es notwendig ist, mit einem Limiter genau zu sein. Ich setze einen Limiter und schließe im Falle einer Absicherung gegenläufige Positionen über OrderCloseBy.
Ich nehme an, dass der Take so gewählt ist, dass Sie zur Absicherung eine Take-Anfrage an den Server senden können, anstatt 2 separate Limit- und CloseBy-Anfragen zu stellen? Und für das Netting macht es keinen Unterschied.
Übrigens, soweit ich mich erinnere, war es an der Börse nicht möglich, einen Take oder Stop Loss direkt in den aktuellen Kurs zu setzen, es sollte eine Einkerbung geben.
Ich gehe davon aus, dass der Take so gewählt ist, dass Sie zur Absicherung eine Take-Anfrage an den Server senden können, anstatt zwei separate Limit- und CloseBy-Anfragen? Und für Netting macht es keinen Unterschied.
Die CloseBy-Operation ist kein Handel, daher gibt es keinen großen Unterschied.
Ich werde die Besonderheit der Verwendung von MT5-Stil und MT4-Stil zusammen mit dieser Funktion als Beispiel zeigen.
// Ausgabe aller teilweise ausgeführten Transaktionen.#include <MT4Orders.mqh>
inputdatetime inFrom = D'2020.01.01';
voidOnStart()
{
if (HistorySelect(inFrom, INT_MAX))
{
for (int i = HistoryDealsTotal() - 1; i >= 0; i--)
{
constulong TicketDeal = HistoryDealGetTicket(i);
if (IsPartial(TicketDeal))
{
Print(TicketDeal);
if (OrderSelect(TicketDeal, SELECT_BY_TICKET) && // Nach OrderSelect by ticket wird die Historientabelle geändert,HistorySelect(inFrom, INT_MAX)) // daher sollte sie bei Bedarf zurückgegeben werden.
OrderPrint();
}
}
}
}
// Während der Suche kann sich die Anzahl der Aufträge ändern
wird überprüft, dass sich die Anzahl der Aufträge ändern kann. Streng genommen kann es aber vorkommen, dass sich die Anzahl der Aufträge nicht geändert hat, aber die Aufträge selbst haben sich geändert, z. B. 1 geschlossener und 1 neuer offener. Und dann kann sich die Nummerierung in der Mitte des Falles ändern. Eine solche Situation ist während der gesamten Nutzungsdauer noch nie aufgetreten? Ist das Fehlen strengerer Überprüfungen ein Fehler oder ein absichtliches Ignorieren einer unwahrscheinlichen Situation, um den Code nicht zu sehr zu verkomplizieren? Oder habe ich etwas übersehen und es gibt hier keinen Fehler?
wird geprüft, ob sich die Anzahl der Aufträge ändern kann. Streng genommen kann es aber vorkommen, dass sich die Anzahl der Aufträge nicht geändert hat, aber die Aufträge selbst haben sich geändert, z. B. 1 geschlossener und 1 neuer offener. Und dann kann sich die Nummerierung in der Mitte des Falles ändern. Eine solche Situation ist während der gesamten Nutzungsdauer noch nie aufgetreten? Ist das Fehlen strengerer Überprüfungen ein Fehler oder ein absichtliches Ignorieren einer unwahrscheinlichen Situation, um den Code nicht zu sehr zu verkomplizieren? Oder habe ich etwas übersehen und es gibt hier keinen Fehler?
Ich kann mich nicht erinnern. Ich weiß nur, dass ich eine Menge Stresstests durchgeführt habe, um alle Situationen zu prüfen.
ORDER_TIME_SETUP(_MSC) für den Zeitpunkt der Ausführung des ersten (vielleicht vorletzten) Geschäfts. Das heißt, es ist nicht möglich, aus der Historie zu ermitteln, wann z. B. BuyLimit platziert wurde.
Infolgedessen kann eine Hedge-Position einen Bruchteil des Eröffnungskurses aufweisen, wie dies beim Netting häufig zu beobachten ist.
In diesem Fall wird über MT4Orders OrderOpenPrice/OrderOpenTime einer solchen MT4-Position den entsprechenden Werten des ersten MT5-Geschäfts entsprechen.
D.h. es gibt leider keinen Bruchteilspreis für die Eröffnung einer Position. Dies ist eine seltene Situation, aber sie kommt vor.
Der Kurs hat den Takeout einer offenen Position erreicht.
MT5 hat eine Market-Order generiert. Eine entsprechende Limit-Order wurde an den Liquiditätsanbieter gesendet.
Die Limit-Order wird erneut registriert. Dann wird die MT5-Order, die dem Take entspricht, gelöscht.
Wechseln Sie zu Punkt 1.
Gute Umsetzung, da man in der Historie die Ablehnungen der Provider sehen kann. Gute und erzwungene interne Umsetzung von Takeouts als Limiter.
MT4Orders zeigt diese MT5-Aufträge in solchen Situationen eines Teejk-Rejacks nicht an, ebenso wie in Fällen, in denen der Take-Auftrag teilweise ausgeführt und dann gelöscht wurde. Und das ist richtig so!
Neueste Version MT5 2361 mit MT4Orders, real, hedge. Mehrere EAs, verschiedene Magics. Situation von einem der Expert Advisors.
Eine BUY-Order wurde platziert, Ticket 216684. Nach einiger Zeit war es an der Zeit, die Position zu schließen, ein SELL-Limit wurde platziert, um sie zu schließen, und ein weiteres SELL-Limit, um eine umgekehrte Position zu eröffnen, Tickets 216975 und 216978. Alle Aufträge haben die gleiche Losgröße. Als das Limit 216978 ausgelöst wurde, wurden 216684 und 216978 über CloseBy aufgelöst und nur 216975 blieb übrig.
Teil des Protokolls aus dem Journal
2020.04.1507:33:24.203 : deal #107485 sell 0.15 XXXXXX at 1.05555 done (based on order #216978)
2020.04.1507:33:24.203 : close position #216684 buy 0.15 XXXXXX by position #216978 sell 0.15 XXXXXX
2020.04.1507:33:24.305 : accepted close position #216684 buy 0.15 XXXXXX by position #2169782020.04.1507:33:24.307 : deal #107487 sell 0.15 XXXXXX at 1.05555 done (based on order #216986)
2020.04.1507:33:24.307 : close position #216684 buy 0.15 XXXXXX by position #216978 done in 103.841 ms
2020.04.1507:33:24.309 : deal #107489 sell 0.15 XXXXXX at 1.05563 done (based on order #216975)
D.h. wir können sehen, dass es 3 Aufträge gab. Aber während des Zusammenbruchs von 2 Orders und des Wechsels zum Markt der 3. Order war die Liste der Orders leer, obwohl 1 hätte übrig bleiben müssen. Diese Situation kann zur doppelten Eröffnung einer Position führen.
Ich erhalte Aufträge durch den folgenden Code
int PrevTotal;
ulong OrderTickets[];
do
{
PrevTotal=OrdersTotal();
for(int i=PrevTotal-1;i>=0;--i)
{
int Total=OrdersTotal();
if(Total!=PrevTotal)
{
PrevTotal=Total;
i=PrevTotal;
ArrayFree(OrderTickets);
continue;
}
if(!OrderSelect(i,SELECT_BY_POS,MODE_TRADES) || OrderMagicNumber()!=inTradeMagic)
continue;
ArrayResize(OrderTickets,ArraySize(OrderTickets)+1);
OrderTickets[ArraySize(OrderTickets)-1]=OrderTicket();
}
}while(PrevTotal!=OrdersTotal());
Und so habe ich eine Prüfung eingefügt, für den Fall, dass sich die Anzahl während der Aufzählung ändert. Aber sie scheint zu fehlen. Ist das ein Fehler, ein Feature oder habe ich einen unfertigen Bereich betreten?
Торговая деятельность в платформе связана с формированием и отсылкой рыночных и отложенных ордеров для исполнения брокером, а также с управлением текущими позициями путем их модификации или закрытия. Платформа позволяет удобно просматривать торговую историю на счете, настраивать оповещения о событиях на рынке и многое другое. Открытие позиций...
Wenn Sie kein Benutzerkonto haben, registrieren Sie sich
Erlauben Sie die Verwendung von Cookies, um sich auf der Website MQL5.com anzumelden.
Bitte aktivieren Sie die notwendige Einstellung in Ihrem Browser, da Sie sich sonst nicht einloggen können.
Sie sind angemeldet. Die Zwei-Faktor-Authentifizierung wurde deaktiviert. Richten Sie sie erneut ein und scannen Sie einen neuen QR-Code oder fahren Sie mit deaktivierter Zwei-Faktor-Authentifizierung fort.
Und in diesem Fall gibt es keine Möglichkeit, den Begrenzer zu umgehen. Oder gibt es eine Möglichkeit?
Ich schließe Positionen, indem ich einen Take-Out zum aktuellen Kurs setze. Aber der Takeout erfolgt nicht immer in Form eines Limits (hängt von der Software des Brokers ab). Deshalb ist diese Lösung nicht immer geeignet.
Wenn es notwendig ist, mit einem Limiter genau zu sein. Ich setze einen Limiter und schließe im Falle einer Absicherung gegenläufige Positionen über OrderCloseBy.
Ich nehme an, dass der Take so gewählt ist, dass Sie zur Absicherung eine Take-Anfrage an den Server senden können, anstatt 2 separate Limit- und CloseBy-Anfragen zu stellen? Und für das Netting macht es keinen Unterschied.
Übrigens, soweit ich mich erinnere, war es an der Börse nicht möglich, einen Take oder Stop Loss direkt in den aktuellen Kurs zu setzen, es sollte eine Einkerbung geben.
Ich gehe davon aus, dass der Take so gewählt ist, dass Sie zur Absicherung eine Take-Anfrage an den Server senden können, anstatt zwei separate Limit- und CloseBy-Anfragen? Und für Netting macht es keinen Unterschied.
Die CloseBy-Operation ist kein Handel, daher gibt es keinen großen Unterschied.
Ich werde die Besonderheit der Verwendung von MT5-Stil und MT4-Stil zusammen mit dieser Funktion als Beispiel zeigen.
Berücksichtigen Sie dies, wenn Sie mit HistorySelect+MT4Orders arbeiten.
Es gibt mehrere Stellen, an denen die Auswahl der Positionsreihenfolge erfolgt. Mit dem Kommentar
// Während der Suche kann sich die Anzahl der Aufträge ändernwird überprüft, dass sich die Anzahl der Aufträge ändern kann. Streng genommen kann es aber vorkommen, dass sich die Anzahl der Aufträge nicht geändert hat, aber die Aufträge selbst haben sich geändert, z. B. 1 geschlossener und 1 neuer offener. Und dann kann sich die Nummerierung in der Mitte des Falles ändern. Eine solche Situation ist während der gesamten Nutzungsdauer noch nie aufgetreten? Ist das Fehlen strengerer Überprüfungen ein Fehler oder ein absichtliches Ignorieren einer unwahrscheinlichen Situation, um den Code nicht zu sehr zu verkomplizieren? Oder habe ich etwas übersehen und es gibt hier keinen Fehler?
Es gibt mehrere Stellen, an denen die Auswahl der Positionsreihenfolge erfolgt. Mit Kommentar
wird geprüft, ob sich die Anzahl der Aufträge ändern kann. Streng genommen kann es aber vorkommen, dass sich die Anzahl der Aufträge nicht geändert hat, aber die Aufträge selbst haben sich geändert, z. B. 1 geschlossener und 1 neuer offener. Und dann kann sich die Nummerierung in der Mitte des Falles ändern. Eine solche Situation ist während der gesamten Nutzungsdauer noch nie aufgetreten? Ist das Fehlen strengerer Überprüfungen ein Fehler oder ein absichtliches Ignorieren einer unwahrscheinlichen Situation, um den Code nicht zu sehr zu verkomplizieren? Oder habe ich etwas übersehen und es gibt hier keinen Fehler?
Ich kann mich nicht erinnern. Ich weiß nur, dass ich eine Menge Stresstests durchgeführt habe, um alle Situationen zu prüfen.
ORDER_TIME_SETUP(_MSC) für den Zeitpunkt der Ausführung des ersten (vielleicht vorletzten) Geschäfts. Das heißt, es ist nicht möglich, aus der Historie zu ermitteln, wann z. B. BuyLimit platziert wurde.
Infolgedessen kann eine Hedge-Position einen Bruchteil des Eröffnungskurses aufweisen, wie dies beim Netting häufig zu beobachten ist.
In diesem Fall wird über MT4Orders OrderOpenPrice/OrderOpenTime einer solchen MT4-Position den entsprechenden Werten des ersten MT5-Geschäfts entsprechen.
D.h. es gibt leider keinen Bruchteilspreis für die Eröffnung einer Position. Dies ist eine seltene Situation, aber sie kommt vor.
Forum zum Thema Handel, automatisierte Handelssysteme und Testen von Handelsstrategien
Bibliotheken: MT4Orders
fxsaber, 2020.03.18 03:47
Tie Reject.
Diese Situation kann häufig auftreten:
MT4Orders zeigt diese MT5-Aufträge in solchen Situationen eines Teejk-Rejacks nicht an, ebenso wie in Fällen, in denen der Take-Auftrag teilweise ausgeführt und dann gelöscht wurde. Und das ist richtig so!
Neueste Version MT5 2361 mit MT4Orders, real, hedge. Mehrere EAs, verschiedene Magics. Situation von einem der Expert Advisors.
Eine BUY-Order wurde platziert, Ticket 216684. Nach einiger Zeit war es an der Zeit, die Position zu schließen, ein SELL-Limit wurde platziert, um sie zu schließen, und ein weiteres SELL-Limit, um eine umgekehrte Position zu eröffnen, Tickets 216975 und 216978. Alle Aufträge haben die gleiche Losgröße. Als das Limit 216978 ausgelöst wurde, wurden 216684 und 216978 über CloseBy aufgelöst und nur 216975 blieb übrig.
Teil des Protokolls aus dem Journal
Ein Teil des Protokolls des Expert Advisors
D.h. wir können sehen, dass es 3 Aufträge gab. Aber während des Zusammenbruchs von 2 Orders und des Wechsels zum Markt der 3. Order war die Liste der Orders leer, obwohl 1 hätte übrig bleiben müssen. Diese Situation kann zur doppelten Eröffnung einer Position führen.
Ich erhalte Aufträge durch den folgenden Code
Und so habe ich eine Prüfung eingefügt, für den Fall, dass sich die Anzahl während der Aufzählung ändert. Aber sie scheint zu fehlen. Ist das ein Fehler, ein Feature oder habe ich einen unfertigen Bereich betreten?
war die Auftragsliste leer, obwohl 1 hätte bleiben müssen. Die Situation kann zu einer doppelten Positionseröffnung führen.
Dies ist ein Fehler von MT5.
Forum zum Thema Handel, automatisierte Handelssysteme und Testen von Handelsstrategien.
Bibliotheken: MT4Orders
fxsaber, 2019.11.19 07:26 AM.
Der Thread ist umfangreich, unten ist eine Liste der Beiträge von Interesse.
https://www.mql5.com/ru/forum/93352/page11#comment_4071950
SO