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

 

Das war's, ich habe meinen Fehler gefunden. Manche Menschen müssen ihre Frage äußern, um später zu verstehen, warum sie es falsch gemacht haben.

Leider bin ich anscheinend eine dieser Personen. (((

 

Ich nehme an, Sie meinen mitTicketnummer?

Gibt es Fallstricke?

 
Decromor:

Grüße!


Ein Auftrag kann mit dem Befehl OrderSelect über seine Nummer aufgerufen werden.

Frage: Ist es möglich, die Anzahl der bestehenden Aufträge im Voraus zu kennen, um nicht alle Aufträge durchzugehen? Wir können uns diese Nummer zum Beispiel merken, wenn wir einen neuen Auftrag eröffnen.

Mir ist bekannt, dass diese Nummer in der Reihenfolge von 1 an vergeben wird. Was sind die möglichen Nuancen?

Ich danke Ihnen im Voraus.

  1. Sie können es über seinen Index in der Liste der Aufträge (wenn Sie es in der Schleife versuchen) oder über sein Ticket (wenn es im Voraus bekannt ist) ansprechen.
  2. Nicht erwünscht - im Falle eines Fehlers (Neustart des Expert Advisors, Neustart des Terminals, Systemfehler, usw.) können die gespeicherten Tickets verloren gehen. Sie müssen also entweder in globalen Variablen des Terminals oder in einer Datei gespeichert werden, was zwar machbar, aber schwieriger ist als die übliche Suche, die nicht bei jedem Tick, sondern nur bei Bedarf durchgeführt wird.
  3. Nein. Beginnend mit Nummer 1 und in aufsteigender Reihenfolge - nur im Testgerät.
  4. Bitte sehr.
 
Artyom Trishkin:
  1. Sie können sich auf ihn über seinen Index in der Liste der Aufträge (bei der Suche in der Schleife) oder über sein Ticket (wenn es im Voraus bekannt ist) beziehen
  2. Nicht erwünscht - im Falle eines Fehlers (Neustart des EA, Neustart des Terminals, Systemausfall usw.) können die gespeicherten Tickets verloren gehen. Sie müssen also entweder in globalen Variablen des Terminals oder in einer Datei gespeichert werden, was zwar machbar, aber schwieriger ist als die übliche Suche, die nicht bei jedem Tick, sondern nur bei Bedarf durchgeführt wird.
  3. Nein. Beginnend mit Nummer 1 und in aufsteigender Reihenfolge - nur im Testgerät.
  4. Ich bitte Sie.

Ist es möglich, den Code OnInit() in der Schleife OrdersTotal() auszuführen und alle Informationen über offene Aufträge zu sammeln, insbesondere OrderTicket()?

string orders[][3];

int OnInit() {
   for (int n = OrdersTotal() + 1; n >= 0; n--) {              
      if (OrderSelect(n, SELECT_BY_POS, MODE_TRADES)) {
         int i = (ArraySize(orders) / 3);
         ArrayResize(orders, i + 1);
         orders[i][0] = IntegerToString(OrderTicket());
         orders[i][1] = IntegerToString(OrderType());
         orders[i][2] = DoubleToString(OrderOpenPrice(), Digits);   
      } 
   }
   return(INIT_SUCCEEDED);
}


Wenn ein Auftrag automatisch durch TP oder SP geschlossen wird, ist es dann möglich, die Daten dieses Auftrags zu erhalten?

 
Decromor:

Ist es möglich, das Programm im OnInit()-Körper auszuführen und alle Informationen über offene Aufträge, insbesondere OrderTicket(), in der OrdersTotal()-Schleife zu sammeln?


Wenn ein Auftrag automatisch durch TP oder SP geschlossen wird, ist es dann möglich, die Daten dieses Auftrags zu erhalten?

  1. Ja, das können wir. Und was dann? Die Aufträge können sich im Laufe der Zeit ändern, und die bei der Initialisierung erfassten Informationen sind veraltet.
  2. Wir müssen den letzten abgeschlossenen Auftrag finden und alle notwendigen Informationen darüber einholen.
 
Artyom Trishkin:
  1. Sie können. Und was dann? Aufträge können sich im Laufe der Zeit ändern, und die bei der Initialisierung gesammelten Informationen über sie werden veraltet sein.
  2. Sie müssen den letzten abgeschlossenen Auftrag finden und alle erforderlichen Informationen dazu erhalten.

Bei BUY, SELL speichere ich die erforderlichen Daten in einem Array und rolle dann dieses Array und nehme je nach Preis die erforderlichen Änderungen vor (SL auf Breakeven übertragen, Order nach dem Reverse schließen, etc.), wobei ich mich über das Ticket an die gewünschte Order wende.

Aber ich habe Aufträge mit TP und SL, die ohne mein Wissen geschlossen werden können. Ich mag es nicht, wenn ich bei jedem Tick die letzte geschlossene Order nachschlagen und in meinem Array nach ihr suchen muss, um sie zu korrigieren.

"Aufträge können sich im Laufe der Zeit ändern, und die bei der Initialisierung erfassten Informationen sind dann nicht mehr aktuell." Ich nehme an, dass dies gemeint ist - den Auftrag abzuschließen?

Die einzige Möglichkeit, die ich sehe, ist, 2 Schleifen in einem Tick, meine mit Bestellungen undOrdersTotal() und ich mag es auch nicht.

"Aber komplizierter als die übliche Aufzählung, die nicht bei jedem Tick, sondern nur bei Bedarf erfolgt" Bitte teilen Sie diesen Algorithmus.

 
Decromor:

Ist es möglich, das Programm im OnInit()-Körper auszuführen und alle Informationen über offene Aufträge, insbesondere OrderTicket(), in der OrdersTotal()-Schleife zu sammeln?


Wenn ein Auftrag automatisch durch TP oder SP geschlossen wird, ist es dann möglich, die Daten dieses Auftrags zu erhalten?

Und warum müssen wir das alles in eine Zeichenkette umwandeln? Handelt es sich um einen Stringtyp?

 
Decromor:

Ist es möglich, das Programm im OnInit()-Körper auszuführen und alle Informationen über offene Aufträge, insbesondere OrderTicket(), in der OrdersTotal()-Schleife zu sammeln?


Wenn ein Auftrag automatisch durch TP oder SP geschlossen wird, ist es dann möglich, die Daten dieses Auftrags zu erhalten?

struct SOrders
{
     int ticket,
         type;
     double price;
} orders[];

int OnInit() {
   for (int n = 0; n < OrdersTotal(); n++)
   {              
      if(!OrderSelect(n, SELECT_BY_POS, MODE_TRADES)) continue;
      int i = ArraySize(orders);
      if(ArrayResize(orders, i+1) < i+1) continue;
      orders[i].ticket = OrderTicket();
      orders[i].type   = OrderType();
      orders[i].price  = OrderOpenPrice();
   }
   return(INIT_SUCCEEDED);
}
 
Konstantin Nikitin:
Vielen Dank für die Informationen, das ist neu für mich.
 
Alexey Viktorov:

Warum all dies in eine Zeichenkette übersetzen? String-Typ?

Ein Ticket hat zum Beispiel den Typ Int, ein Preis den Typ Double, und ein Array kann nur einen Typ haben.