Eine Frage an MQL-Experten - Seite 10

 
FAQ:
Wenn Ihr Auftrag geöffnet wird, prüfen Sie, ob er geöffnet wird, und wenn er geöffnet wird, können Sie den zweiten Auftrag mit der Prüfung öffnen...

Ich habe zwei Funktionen geschrieben, die sich je nach Situation unterschiedlich öffnen, und ich werde am Ende jeder dieser Funktionen (ich denke, es wird eine separate Funktion sein) prüfen, welche und wie viele Aufträge offen sind und welche Aufträge verpasst und neu geöffnet werden.

Wenn Sie ein Experte auf dem Gebiet der Positionierung der EA in Bezug auf Forex sind, können Sie daran interessiert sein, mehr über sie zu erfahren und verwenden Sie es in Ihrem Trading-Roboter. Ich möchte meinen Dank wiederholen (entschuldigen Sie den Mangel an Details).

 

Guten Morgen.

Es ist ein Problem aufgetreten. Ich kann die Funktion nicht finden, die die Größe der "aggregierten" Position eines bestimmten Instruments zurückgibt! Ich habe das ganze Forum durchsucht, einschließlich I.KIMs Zweig,https://www.mql5.com/ru/forum/131859 - es gibt - verschiedene Funktionen für viele, außer der, die ich brauche!

Wenn zum Beispiel mehrere Kaufgeschäfte in EUR offen sind, können Sie mir sagen, wie man den Gesamtbetrag ermittelt?

GetLot(EURUSD, OP_BUY, magic)

double GetLot(string sy="", int op=-1, int mn=-1) {// возвращает сувокупный размер поз.
   double   l=-1;
  int      i, k=OrdersTotal();

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if (OrderSymbol()==sy || sy=="") {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) {

              I = ------  ???????????
              ------ ????????????
              

            }
          }
        }
      }
    }
  }
  return(l);
}
 

Frage geklärt! Es wurde eine Funktion entdeckt:

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                     |
//|  Описание : Возвращает сумму лотов открытых позиций                        |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
double GetAmountLotFromOpenPos(string sy="", int op=-1, int mn=-1) {
  double l=0;
  int    i, k=OrdersTotal();
 
  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if (OrderSymbol()==sy || sy=="") {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) {
              l+=OrderLots();
            }
          }
        }
      }
    }
  }
  return(l);
}
 
Das ist es nicht )
 

Wieso ist das falsch? Was gibt diese Funktion dann zurück?

"Gibt die Summe vieler offener Positionen zurück" - steht das nicht geschrieben?

https://www.mql5.com/ru/code/9394

 
Rita:

"Ergibt die Summe vieler offener Stellen" - heißt es nicht so?

Das ist richtig. Es geht nie um das Gesamtvolumen einer Position. Sie können eine Menge öffnen und überprüfen.
 

Ich muss die Loci nicht berücksichtigen. Oder besser gesagt, so geht's:

Was ich brauche, ist dies. Wenn es mehrere offene Verkaufs- und Kaufpositionen gibt, muss ich die Gegenpositionen (Ausgleichspositionen) entfernen, um nur in einer Richtung zu bleiben.

Ich wollte zuerst die Summe aller "Buchten" und dann die Summe aller "Verkäufe" berechnen. Ermitteln Sie anschließend die Differenz (d. h., wessen Gesamtgröße größer ist). Und dieser "Unterschied" sollte auf dem Markt belassen werden, - und alle anderen entfernt werden!

Also, diese Funktion GetAmountLotFromOpenPos wird hier nicht funktionieren? Zum Beispiel, wenn ich

GetAmountLotFromOpenPos(EURUSD,OP_SELL, -1)

-Wird nicht die Gesamtzahl der Lose aller Verkaufspositionen zurückgegeben?

 
Rita:

-wird sie mir nicht die Summe der Lose aller Verkaufspositionen zurückgeben?

Tut mir leid, wenn das so ist, aber es ist OK. Montag. Mein Kopf ist noch nicht ganz bei der Sache :)
 
Rita:

Ich muss die Loci nicht berücksichtigen. Oder besser gesagt, so geht's:

Was ich brauche, ist dies. Wenn es mehrere offene Verkaufs- und Kaufpositionen gibt, muss ich die Gegenpositionen (Ausgleichspositionen) entfernen, um nur in einer Richtung zu bleiben.

Ich wollte zuerst die Summe aller "Buchten" und dann die Summe aller "Verkäufe" berechnen. Ermitteln Sie anschließend die Differenz (d. h., wessen Gesamtgröße größer ist). Und dieser "Unterschied" sollte auf dem Markt belassen werden, - und alle anderen entfernt werden!

Also, diese Funktion GetAmountLotFromOpenPos wird hier nicht funktionieren? Zum Beispiel, wenn ich

GetAmountLotFromOpenPos(EURUSD,OP_SELL, -1)

-Wird nicht die Gesamtzahl der Lose aller Verkaufspositionen zurückgegeben?

Im allgemeinen Fall:

SummLot = GetAmountLotFromOpenPos("0", OP_BUY, MagicNumber)- GetAmountLotFromOpenPos("0", OP_SELL, MagicNumber);

 
Ja, das habe ich getan, um eine "saubere" Bilanz zu erhalten.