Merkmale der Sprache mql4, Feinheiten und Techniken - Seite 35

 
fxsaber #:

Jetzt frage ich mich, wie ich ALLE Bestellungen auf einmal durchgehen kann.

Ich bin mir nicht sicher, was ich tun soll, aber ich versuche, es so zu schreiben, dass solche Ausrutscher nicht zu kritischen Konsequenzen führen.

Die Wahrscheinlichkeit sinkt, allerdings ohne die Diversifizierung und die Komplikationen bei der Kontoführung.

 
Andrei Trukhanovich #:

Alternativ können Sie die Bots auch auf verschiedene Konten verteilen.

Dann verbieten Sie zum Beispiel den Verfall der Einlagerungsaufträge. Generell eine Krücke.

Eine grundlegende Notwendigkeit mit einer so unglücklichen Besonderheit. Offensichtlich soll das irgendwie über Schnappschüsse geschehen.

 
fxsaber #:

Vielen Dank für die ausführliche Antwort! Jetzt frage ich mich, wie ich ALLE Bestellungen auf einmal durchgehen kann.

Wie wäre es, wenn Sie sich die erste und letzte Bestellung (Ticket) merken?

und nach Abschluss des Zyklus prüfen, ob die erste und die letzte Bestellung die gleichen Tickets haben wie vor der Zählung

   int n  = OrdersTotal();
   
   if(n == 0) return(0.0);
   else if(n == 1 && OrderSelect(0, SELECT_BY_POS)) return(OrderLots());
   
   int t_last = OrderSelect(n - 1, SELECT_BY_POS) ? OrderTicket() : -1;
   int t_first = OrderSelect(0, SELECT_BY_POS) ? OrderTicket() : -1;


SZY: logischerweise sollte OrderSelect() für diese Kollision verantwortlich sein - es sollte false zurückgeben, wenn sich die Auftragstabelle geändert hat, aber ich kann mich nicht erinnern, irgendwo im Forum gelesen zu haben, dass OrderSelect() false zurückgegeben hat, und ich habe auch keine Fehlerhandler für OrderSelect() gefunden.

 
Igor Makanu #:

sich an die erste und letzte Bestellung (Ticket) erinnern kann?

Ohne ein vollständiges Einprägen der Ticketreihenfolge wird eine solche Lösung scheitern.

 
fxsaber #:

Wenn Sie sich die Reihenfolge der Tickets nicht vollständig merken können, wird diese Lösung fehlschlagen.

Und das vollständige Speichern von Tickets führt ebenfalls zu Fehlern, da sich während des Durchlaufs einer Schleife der Status von bereits bearbeiteten Aufträgen ändern kann.


Ich bin mir natürlich nicht sicher, aber wenn ein Auftrag geschlossen wird, während wir uns im Zyklus befinden, ändert sich die OrderTotal()

wenn der Auftrag geschlossen wird und ein neuer Auftrag eröffnet wird, wird das Ticket und/oder OrderSelect(0) oder OrderSelect(OrderTotal()-1) geändert


und welche Situation könnte Ihrer Meinung nach eintreten, so dass die vorherigen "extremen Aufträge" und die OrderTotal() selbst erhalten bleiben?

 
Igor Makanu #:

und welche Situation könnte Ihrer Meinung nach eintreten, um die gleichen "extremen Aufträge" und die OrderTotal() selbst zu behalten?

Höchstwahrscheinlich wird sich die Auftragssumme ändern, wenn die Auftragstabelle aufgerüttelt wird.

Und dann ist es möglich, dass die Begrenzer wieder aufgefüllt werden und eine zusätzliche Position geschaffen wird.

 
Igor Makanu #:

Können wir uns die erste und letzte Bestellung (Fahrkarte) merken?

die Erinnerung an das erste nichts bewirkt

 
fxsaber Aufruf der Funktion bestand? Oder wird sie doppelt gezählt.

Das heißt, was passiert mit der Indizierung, wenn ein Auftrag gelöscht wird oder während der Aufzählung erscheint?

Ich sammle eine Reihe von Karten und arbeite mit ihnen.
Wenn sich die Auftragssumme, der Saldo oder die Marge geändert hat, muss die Liste neu erstellt werden.

EA arbeitet also immer nur mit seinen eigenen ausgewählten Tickets

 
Andrei Trukhanovich #:

das Erinnern an das Erste bringt nichts

dies sind Eigenheiten der Architekturimplementierung, die nicht dokumentiert sind und die niemand in Zukunft garantieren kann...

Beachten Sie OrderTotal() undOrdersHistoryTotal(), und die Tickets der letzten Bestellungen

wenn sich diese Werte nach den Berechnungen in der Schleife ändern, dann verarbeiten


Es kann jedoch keine universelle und zuverlässige Lösung geben - die Aufgabe besteht hier darin, zu erraten, was auf dem Server passiert, wie die Daten über das Netzwerk geliefert werden und was in den angrenzenden Diagrammen im Terminal )))) vor sich geht.


Das Einzige, was zu hoffen ist, ist die Geschwindigkeit von OrderSelect() - wenn ich mich richtig erinnere, sind es mehr als eine Million Aufrufe pro Sekunde

 
fxsaber #:

Ohne eine vollständige Erinnerung an den Ablauf der Ticketausstellung wird eine solche Lösung scheitern.

Es mag nicht teuer sein, sich das zu merken, aber es kann teuer sein, den vollen Status zu behalten. Ich stimme den Vorrednern zu, reduzieren Sie die Belastung durch die Logik der Vernunft und der Prioritäten.

Die asynchrone Welt, in der wir leben, garantiert nicht die Reihenfolge der Antworten auf die Reihenfolge der Anfragen, noch garantiert sie überhaupt eine Reihenfolge.
Grund der Beschwerde: