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

 
Vitaly Muzichenko:

Danke, aus irgendeinem Grund funktioniert das mit dem Los nicht so.

double GetLotLastOrder(string sy="", int op=-1, int mn=-1) {
double   r=-1;
  if (sy=="0") sy=Symbol();
  for (int i=0; i<OrdersTotal(); i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if (OrderSymbol()==sy || sy=="") {
        if (OrderType()>1 && OrderType()<6) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) {
              if (r>OrderLots() || r==-1) {
                r=OrderLots();
  }}}}}}}
  return(r);
}

Wie gebe ich das Lot des vierzehnten Verkaufsstopps auf dem Snapshot Lot= 0,03 zurück?

 
Marina Korotkih:

Danke, aus irgendeinem Grund funktioniert das mit dem Los nicht so.

double GetLotLastOrder(string sy="", int op=-1, int mn=-1) {
  if (sy=="0") sy=Symbol();
  double r=MarketInfo(sy, MODE_MINLOT);
  for (int i=0; i<OrdersTotal(); i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if (OrderSymbol()==sy || sy=="") {
        if (OrderType()>1 && OrderType()<6) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) {
              if (r>OrderLots()) {
                r=OrderLots();
  }}}}}}}
  return(r);
}
Dies ist das Minimum, wenn Sie die letzte Bestellung benötigen, dann werde ich es jetzt tun
 
Vitaly Muzichenko:

Dies ist das Minimum, wenn Sie die letzte Bestellung benötigen, dann werde ich es jetzt tun

Hier suchen wir das Los, das am weitesten vom Preis entfernt ist

double GetLotLastOrder(string sy="", int op=-1, int mn=-1) {
datetime t=0;
double r=-1,l=0;
if (sy=="0") sy=Symbol();
  for (int i=0; i<OrdersTotal(); i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if (OrderSymbol()==sy || sy=="") {
        if (OrderType()>1 && OrderType()<6) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) {
              if (r>OrderOpenPrice() || r==-1) {
                r=OrderOpenPrice();
                l=OrderLots();
  }}}}}}}
  return(l);
}
 
Marina Korotkih:

Danke, aus irgendeinem Grund funktioniert das mit dem Los nicht so.

double GetLotLastOrder(string sy="", int op=-1, int mn=-1) {
double   r=-1;
  if (sy=="0") sy=Symbol();
  for (int i=0; i<OrdersTotal(); i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if (OrderSymbol()==sy || sy=="") {
        if (OrderType()>1 && OrderType()<6) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) {
              if (r>OrderLots() || r==-1) {
                r=OrderLots();
  }}}}}}}
  return(r);
}

Wie kann ich das Lot des vierzehnten Verkaufsstopps im Snapshot Lot= 0,03 zurückgeben?



Nein, die Funktion funktioniert richtig, warum ist der Rückgabewert nicht 1 und14 Aufträge, sondern 2?

Ist es ein Prüfgerät?

Bei mir funktioniert es einwandfrei.

 
Vitaly Muzichenko:

Hier suchen wir das Los, das am weitesten vom Preis entfernt ist


Vielen Dank, das macht Sinn. Gefunden, jetzt können Sie alles darüber herausfinden )

 
Alekseu Fedotov:

Nein, die Funktion funktioniert richtig, warum ist der Rückgabewert nicht 1 und14 Aufträge, sondern 2?

Ist es ein Prüfgerät?

Bei mir funktioniert es einwandfrei.

Sie müssen nach dem Preis sortieren, da Sie nicht nach der Größe suchen können. Das Raster kann gemischt sein, und Sie werden entweder das größte oder das kleinste finden, aber nicht das erste und nicht das letzte
 
Marina Korotkih:

Vielen Dank, das macht Sinn. Gefunden, jetzt erfahren Sie alles, was Sie darüber wissen müssen )

Um alle Informationen über einen Auftrag oder eine Position zu erhalten, ist es besser, ein Ticket zu verwenden

if(OrderSelect(i, SELECT_BY_TICKET)) {
  // всё что угодно
}
 
Alekseu Fedotov:

...warum ist der Rückgabewert nicht 1 und14 Aufträge, sondern 2?


Denn ich nenne es so

GetOrderOpenPrice(Symbol(),OP_SELLSTOP,_Magic)
 
Vitaly Muzichenko:

Um die vollständigen Details eines Auftrags oder einer Position zu erfahren, ist es besser, dies über das Ticket zu tun

if(OrderSelect(i, SELECT_BY_TICKET)) {
  // всё что угодно
}

Dazu müssen wir aber zunächst das Ticket der letzten Bestellung kennen 14

Der Auftrag muss also immer noch zuerst durchsucht werden, wie in der ersten Funktion?

Oder einfach SELECT_BY_POS durch SELECT_BY_TICKET ersetzen

 
Marina Korotkih:

Dazu müssen Sie aber zuerst das Ticket der letzten Bestellung herausfinden 14

Der Auftrag muss also immer noch zuerst durchsucht werden, wie in der ersten Funktion?

Oder einfach SELECT_BY_POS durch SELECT_BY_TICKET ersetzen

Das hängt davon ab, was Sie überprüfen müssen. In der Tat können wir hier alles herausfinden, die Bestellung nach Preis auswählen und dann die erforderlichen Parameter dafür schreiben und alles zurückgeben.

Schleifen ein weiteres Mal zu verwenden ist keine gute Idee, daher ist es besser, alles in einer Schleife zu realisieren; im realen Handel fällt das nicht auf, aber die Tests im Tester laufen sehr lange. Es hängt jedoch alles von der Aufgabe ab, jemand schreibt Programme für den Prüfer und jemand für den Handel, so dass Sie mehr als einen Zyklus verwenden können.

P.S. Wenn der Expert Advisor ein Pipsqueak ist, ist es natürlich besser, keinen einzelnen Zyklus zu verwenden.)
Grund der Beschwerde: