Sie verpassen Handelsmöglichkeiten:
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Registrierung
Einloggen
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Wenn Sie kein Benutzerkonto haben, registrieren Sie sich
Guten Tag zusammen! Können Sie bitte mitteilen, wie man eine Auftragslöschung in einem EA einrichtet?
Die Situation stellt sich wie folgt dar:
Wir platzieren 2schwebende Aufträge in verschiedenen Richtungen, sobald einer von ihnen ausgelöst wird, wird der andere entfernt und nicht mehr ausgestellt.
Ich wäre für jede Hilfe sehr dankbar.
Ich danke Ihnen.
Zum Beispiel:
// удаляет отложенные ордера по type +
//+------------------------------------------------------------------+
void DeleteOrders(int type)
{
int cnt = OrdersTotal();
for (int i=cnt-1; i>=0; i--) {
if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) continue;
//По желанию
if (OrderSymbol() != Symbol()) continue;
//По желанию
if (OrderMagicNumber() != mn) continue;
if (OrderType() != type) continue;
if (type == OP_BUYSTOP || type == OP_SELLSTOP)
{
bool Del_1 = OrderDelete(OrderTicket());
if(!Del_1)
Print("Ошибка удаления ордера. Код ошибки=",GetLastError());
else
Print("Ордер успешно удален.");
}
if (type == OP_BUYLIMIT || type == OP_SELLLIMIT)
{
bool Del_2 = OrderDelete(OrderTicket());
if(!Del_2)
Print("Ошибка удаления ордера. Код ошибки=",GetLastError());
else
Print("Ордер успешно удален.");
}
}
}
//+------------------------------------------------------------------+
Und vorher feststellen, dass es eine Position gibt und es Zeit ist, den zusätzlichen Auftrag zu löschen
//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |
//+----------------------------------------------------------------------------+
//| Версия : 16.06.2008 |
//| Описание : Удаление ордеров, противоположных позиции |
//+----------------------------------------------------------------------------+
//| Параметры: |
//| sy - наименование инструмента ("" - любой символ, |
//| NULL - текущий символ) |
//| op - операция (-1 - любая позиция) |
//| mn - MagicNumber (-1 - любой магик) |
//+----------------------------------------------------------------------------+
void DeleteOppositeOrders(string sy="", int op=-1, int mn=-1) {
bool eb, es;
switch (op) {
case OP_BUY : eb=ExistPositions(sy, OP_BUY , mn); break;
case OP_SELL: es=ExistPositions(sy, OP_SELL, mn); break;
default: eb=ExistPositions(sy, OP_BUY , mn);
es=ExistPositions(sy, OP_SELL, mn); break;
}
if (eb) {
DeleteOrders(sy, OP_SELLLIMIT, mn);
DeleteOrders(sy, OP_SELLSTOP , mn);
}
if (es) {
DeleteOrders(sy, OP_BUYLIMIT, mn);
DeleteOrders(sy, OP_BUYSTOP , mn);
}
}
Um Ihnen ein Beispiel zu geben:
// удаляет отложенные стоп ордера SELLSTOP или BUYSTOP по type +
//+------------------------------------------------------------------+
void DeleteOrders(int type)
{
int cnt = OrdersTotal();
for (int i=cnt-1; i>=0; i--) {
if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) continue;
//По желанию
if (OrderSymbol() != Symbol()) continue;
//По желанию
if (OrderMagicNumber() != mn) continue;
if (OrderType() != type) continue;
if (type == OP_BUYSTOP || type == OP_SELLSTOP)
{
bool Del_1 = OrderDelete(OrderTicket());
if(!Del_1)
Print("Ошибка удаления ордера. Код ошибки=",GetLastError());
else
Print("Ордер успешно удален.");
}
if (type == OP_BUYLIMIT || type == OP_SELLLIMIT)
{
bool Del_2 = OrderDelete(OrderTicket());
if(!Del_2)
Print("Ошибка удаления ордера. Код ошибки=",GetLastError());
else
Print("Ордер успешно удален.");
}
}
}
//+------------------------------------------------------------------+
Wie sieht die Aufteilung nach Art aus? Was bewirkt es? Würde es einen Unterschied machen, wenn es so geschrieben wäre?
{
bool Del_1 = OrderDelete(OrderTicket());
if(!Del_1)
Print("Ошибка удаления ордера. Код ошибки=",GetLastError());
else
Print("Ордер успешно удален.");
}
Warum sind die Balken in mt4 und mt5 auf meinem iPhone unterschiedlich? Die Öffnungs- und Schließungszeiten der Bars sind jedoch identisch. Es verhindert offensichtlich, dass Sie die Linie gestern um 14:00 Uhr auf MT4 durchbrechen.
Warum sind die Balken in mt4 und mt5 auf meinem iPhone unterschiedlich? Die Öffnungs- und Schließungszeiten der Bars sind jedoch identisch. Dies ist eindeutig ein Hindernis, weil gestern auf mt4 die Linie nicht um 14:00 Uhr durchbrochen hat.
Warum sind die Balken in mt4 und mt5 auf meinem iPhone unterschiedlich? Die Öffnungs- und Schließungszeiten der Bars sind jedoch identisch. Es stört offensichtlich, weil die Linie gestern um 14:00 Uhr auf MT4 nicht durchbrochen wurde.
- последние четыре строчки в общем понятны, вопрос лишь в функции PlaySound, код которой необходимо вставить после каждой строчки "Print("..." в таком виде:
bool PlaySound(
string payment // Dateiname
)
; ...
Oder wird es auch irgendwie umgewandelt?
Deklarieren Sie
außerdem, was wird Print ausgeben? Und unter welchen Bedingungen?
Was ist der Sinn dieser Aktion? Um einen Ton abzuspielen, wenn ein Auftrag geschlossen wird und um einen Kommentar zu schreiben (auf TP oder SL) ?
Grüße. Ich habe mich umgehört, aber noch keine Antwort gefunden. Könnten Sie mir bitte sagen, warum der folgende Eintrag
if (x!=maxpr1){x=maxpr1; OrderDelete(ticketD);}
if (z!=minpr1){z=minpr1; OrderDelete(ticketUP);}
Das System erzeugt ständig Fehler
: ungültiges Ticket für OrderDeletefunction
OrderDelete-Fehler 4051
Laut dem Nachschlagewerk ist es
Ungültiger Wert des Funktionsparameters
Die Parameter scheinen jedoch dieselben zu sein.
Wenn Sie jedoch die Bedingung entfernen und nur noch
OrderDelete(ticketD);
OrderDelete(ticketUP);
es wird erfolgreich gelöscht (aber ich brauche es nach Bedingung). Was mache ich falsch? Hier ist die ganze Sache:
https://www.mql5.com/ru/forum/160683/page31#comment_3911573
Der Expert Advisor liest die Min- und Max-Werte der letzten X Bars und platziert die Orders nach diesen Werten. Wenn sich der Höchst- oder Mindestwert verringert hat, sollten wir den entsprechenden Auftrag löschen und ihn mit den neuen Daten öffnen.
Ich habe gerade damit begonnen, es zu studieren, und das Löschen, anstatt es zu ändern, geschah, um die Funktion zu studieren, und ich fragte mich, warum es nicht funktionierte.