Fragen von Anfängern MQL4 MT4 MetaTrader 4 - Seite 29

 
yaaarik777:

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);
  }
}
 
Vladimir Zubov:

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?

if (type > 1 && type < 6)
   {
     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. Dies ist eindeutig ein Hindernis, da die Linie gestern um 14:00 Uhr auf MT4 nicht durchbrochen wurde.
Dateien:
image.png  82 kb
image.png  81 kb
 
Guten Tag, können Sie mir bitte sagen, dass ich die mt4 636 Version auf Android heruntergeladen habe, aber die Liste der Makler nicht angezeigt wird. Wird die Terminalversion nicht mehr unterstützt?(( Wenn ja, wo kann ich eine funktionierende Version herunterladen?
 
MetaGSss:
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.
Sie wollen, dass Sie im Voraus wissen, wohin der Preis gehen wird
 
MetaGSss:
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.
der Aufstrich ist natürlich für extreme Menschen)))
 
MetaGSss:
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.
die Symbole sind auch leicht unterschiedlich)
 

- последние четыре строчки в общем понятны, вопрос лишь в функции PlaySound,  код которой необходимо вставить после каждой строчки "Print("..." в таком виде: 

bool PlaySound(

string payment // Dateiname

)

; ...

Oder wird es auch irgendwie umgewandelt?

Deklarieren Sie

bool PlaySound( im Programmkopf - Sie erhalten die Möglichkeit, den Ton in der Set-Datei ein- und auszuschalten extern bool Play = TRUE;

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) ?






DankeA1exPit für die ausführliche und klare Antwort ... "Der Sinn der Aktion" ist es, die Ereignisse "Schließung von Aufträgen bei Takeprofit und Staploss" zu erklingen zu lassen = ein anderer Sound für jeden ...
 

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.

Grund der Beschwerde: