Fragen von Neueinsteigern zu MQL4 und MQL5, Hilfe und Diskussion über Algorithmen und Codes - Seite 519

 
PolarSeaman:

Woher weiß ich, dass in der Geschichte dieser bestimmten Position einige davon geschlossen sind?

Ich habe eine Position mit 1,0 Loteröffnet, sie mit 0,5 und mit 10$ Verlust geschlossen. Später habe ich weitere 0,25 mit 5$ Gewinn geschlossen. Ich werde alles mit 50$ Gewinn schließen. Im Moment habe ich sogar 50 Dollar Gewinn.

Wie schließe ich -$10 und +$5 bei der Berechnung des aktuellen Gewinns? Mit 55 $ Gewinn abschließen

Siehe den Kommentar der Position (in mql4) - der geschlossene Teil hat ein Ticket des verbleibenden Teils (bis#1234556789), der verbleibende Teil hat ein Ticket des geschlossenen (von#123456788) - ich erinnere mich nicht, wo es Lücken gibt - Sie werden es selbst sehen

 
Artyom Trishkin:

Schauen Sie sich den Kommentar der Position (in mql4) an - der geschlossene Teil hat ein Ticket für den Rest (bis#1234556789), der Rest hat ein Ticket für den geschlossenen Teil (von#123456788) - ich weiß nicht mehr, wo die Leerzeichen sind - Sie werden es selbst sehen

Ich vergleiche den Kommentar der geschlossenen Position mit dem Ticket der offenen Position und erhalte "0.0".

double prof_cl_pos(string sy="0", int op=-1, int mn=-1) {
  datetime ta;
  int      i, k=OrdersHistoryTotal();
  double profit_=0;
  string comment="";

  if (sy=="" || sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
      if (OrderSymbol()==sy) {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) {
             // comment=OrderComment();
              if (ticket_op_pos(Symbol(), -1,mn)==OrderComment())
              profit_=OrderProfit();
            }
          }
        }
      }
    }
  }
  return(profit_);
}
  int ticket_op_pos(string sy="", int op=-1, int mn=-1) {
  datetime o;
  double   l=-1;
  string comment="";
  int     ticket, 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) {
                ticket=OrderTicket();
              }
            }
          }
        }
      }
    }

  return(ticket);
}
 
PolarSeaman:

Der Vergleich eines Kommentars zu einer geschlossenen Position mit einem Ticket zu einer offenen Position ergibt "0.0".

Im Kommentar sollte das Ticket hervorgehoben werden, d.h. zusätzliche Zeichen wie "von #" und "nach #" sollten entfernt werden. Das ist hier nicht der Fall.

 
Ihor Herasko:

Im Kommentar müssen Sie das Ticket hervorheben, d. h. zusätzliche Zeichen wie "von #" und "nach #" entfernen. Dies ist hier nicht der Fall.

Genau! Wie kann man "to #" ausschneiden?
 
PolarSeaman:
Genau! Wie kürzt man "bis #"?
das Vorkommen des Zeichens/der Teilzeichenkette # finden und (optional) sicherstellen, dass es "von" oder "bis" davor ist

den verbleibenden Teil in eine lange Version umwandeln

In 5e gibt es eine rudimentäre Regexp - es wird einfacher sein

 
Maxim Kuznetsov:
Vorkommen von Zeichen/Substring finden #
Womit finden?
 
PolarSeaman:
Wie kann ich sie finden?

Funktioniert die Website-Suche nicht? Haben Sie keine Dokumentation oben auf der Seite?

Документация по MQL5: Строковые функции / StringSubstr
Документация по MQL5: Строковые функции / StringSubstr
  • www.mql5.com
[in]  Длина извлекаемой подстроки. Если значение параметра равно -1 либо параметр не задан, то будет извлекаться подстрока, начиная с указанной позиции и до конца строки.
 
Artyom Trishkin:

Funktioniert die Website-Suche nicht? Haben Sie keine Dokumentation oben auf der Seite?

Danke, ich habe das getan.

              comment=OrderComment();
               substr = StringSubstr(comment, 4, 9);//пропускаю "to #" беру цифры
              if (ticket_op_pos(Symbol(), -1,mn)==substr)

aber die Funktion für die Suchhistorie begann, den aktuellen Gewinn der offenen Position anzuzeigen

double prof_cl_pos(string sy="0", int op=-1, int mn=-1) {
  datetime ta;
  int      i, k=OrdersHistoryTotal();
  double profit_=0;
  string comment="";
  string substr="";

  if (sy=="" || sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
      if (OrderSymbol()==sy) {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) {
              comment=OrderComment();
               substr = StringSubstr(comment, 4, 9);
              if (ticket_op_pos(Symbol(), -1,mn)==substr)
              profit_=OrderProfit();
            }
          }
        }
      }
    }
  }
  return(profit_);
}
 

> Danke, so habe ich es gemacht.

Tun Sie das nicht noch einmal :-) Sie können sich nicht auf die Länge oder den Anfang eines Fragments verlassen, wenn Sie mit undefinierten Zeichenfolgen arbeiten.

Es gibt eine schöne StringFind()-Funktion - suchen Sie nach "#" oder "von #".

ps/ sollten Sie ebenfalls nur eine Groß- oder Kleinschreibung verwenden. Leider gibt es kein Protokoll für die Kennzeichnung von Kommentaren, so dass es möglich ist, dass auf einem Server "FROM #" (in Großbuchstaben) steht;
insbesondere einige setzen [sl] und einige (sl) am Ende des Kommentars auf Stop-Loss. Und die Größe des Kommentars ist übrigens begrenzt. Und so weiter und so fort.
 

Was ist der Schaden einer solchen Konstruktion?

datetime tm1 = D'09.04.2018';
long     tm2 = TimeCurrent();

 if(tm1 > tm2) Print("Работает");

Oder ist es besser,datetime zu einem langen Typ zu machen?

Grund der Beschwerde: