[ARCHIV] Alle Fragen von Anfängern, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht vorbei. Nirgendwo ohne dich - 3. - Seite 309
![MQL5 - Sprache von Handelsstrategien, eingebaut ins Kundenterminal MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Sie verpassen Handelsmöglichkeiten:
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Registrierung
Einloggen
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Wenn Sie kein Benutzerkonto haben, registrieren Sie sich
Das stimmt: Es gehört zum guten Ton, den eigenen Müll aufzuräumen...
Aber wie kann man in diesem Zusammenhang sagen, ob der "Müll" jetzt bereinigt werden muss oder umgekehrt: Es ist kein Müll - es sind die notwendigen Daten für weitere Berechnungen.
So wie ich es verstehe, sollte deinit() verwendet werden, um den Papierkorb aufzuräumen, aber... Sie wird nicht nur ausgeführt, wenn das Diagramm eines Handelsinstruments gelöscht oder der Expert Advisor entfernt wird, sondern auch, wenn die TF geändert wird. In diesem Fall gehen alle akkumulierten Daten für den TF verloren und der Expert Advisor beginnt seine Arbeit mit einem Null-Array, wenn er zum vorherigen Zeitrahmen zurückkehrt. Dasselbe geschieht, wenn wir einen der Parameter des Expert Advisors ändern.
Es hat sich herausgestellt, dass die "Müllabfuhr" in manchen Situationen ein komplexer logischer Prozess ist und keine einfache Änderung der Feldgröße.
Nun, es ist nicht kompliziert. In der Schleife initialisieren Sie das Array mit Werten. Dann arbeiten wir mit dem resultierenden Array. Wenn die Arbeit getan ist, machen wir sie zu einer Null-Länge. Im Zweifelsfall können Sie dies am Ende des Codes kurz vor return(0) tun.
Bitte schlagen Sie den folgenden Code vor, um die Protokolldatei zu lesen. Liest automatisch die aktuelle Protokolldatei nach Datum und gibt sie auf dem Drucker aus.
Wo:
Die Datei wird aus Teilen zusammengesetzt. Ich benötige aber nicht die gesamte Datei, sondern nur die letzte Zeile. Bitte helfen Sie bei der Korrektur.
Nun, das ist nicht schwer. In der Schleife wird das Array mit Werten initialisiert. Dann haben wir mit dem resultierenden Array gearbeitet. Wenn die Arbeit beendet ist, machen wir daraus ein Array der Länge Null. Im Zweifelsfall können Sie dies am Ende des Codes kurz vor return(0) tun.
Ich wurde missverstanden.
Im Kontext dieses Gesprächs (wenn ich die Prämisse dieses Gesprächs richtig verstanden habe), ist die Schleife der EA selbst. Jedes Mal, wenn ein Tick kommt, vergrößert sich das Array entweder oder bleibt gleich, je nachdem, ob ein neuer Wert hineingeschrieben werden muss.
Wie können wir wissen, dass die Arbeit abgeschlossen ist und nicht nur eine Person beispielsweise den Zeitrahmen ändert? Sogar aus Versehen... In diesem Fall wird deinit() aufgerufen und alle Daten gehen verloren. Der Expert Advisor beginnt mit der Speicherung (Schreiben in ein dynamisches Array) dieser Werte auf der Grundlage der im neuen Zeitrahmen(einem neuen Zyklus) erhaltenen Werte.
Ich meine es ernst.
Ich wurde nicht verstanden.
Im Kontext unserer Diskussion (wenn ich die Prämisse dieser Diskussion richtig verstanden habe), ist der Zyklus die Arbeit des Expert Advisors selbst. Jedes Mal, wenn ein Tick kommt, wird das Array entweder vergrößert oder es bleibt unverändert, je nachdem, ob ein neuer Wert hineingeschrieben werden muss.
Woran erkennt man, dass eine Arbeit abgeschlossen ist und nicht nur eine Person, die beispielsweise den Zeitplan ändert? Sogar aus Versehen... In diesem Fall wird deinit() aufgerufen und alle Daten gehen verloren. Der Expert Advisor fängt an, sie zu akkumulieren (sie in ein dynamisches Array zu schreiben), und zwar auf der Grundlage der im neuen Zeitrahmen(einem neuen Zyklus) erhaltenen Werte.
Mein Standpunkt ist folgender.
Mir ist eine Besonderheit des Terminals aufgefallen. Da die Berechnung des Auftragsgewinns den OrderSwap() nicht berücksichtigt, möchte ich, dass der Auftrag sofort geschlossen wird.
Das bedeutet, dass wir diese Formel verwenden sollten, um den Auftrag mit einem Gewinn abzuschließen:
(OrderProfit()+OrderSwap()+OrderCommission())>0
Ich habe noch nie mit Provisionen gearbeitet und Provisionen werden in der Demo nicht verwendet, deshalb kann ich sie nicht im Konto überprüfen.
Sind meine Berechnungen korrekt?
Wenn Sie ins Detail gehen, können Sie diese Funktion nutzen. Sie wird Ihnen den Grund für die Deinitialisierung mitteilen.
Stimmt genau... :)
Ich habe es vergessen. Nun, da ich die Angewohnheit habe, "idiotensicher" zu verwenden, werden wir es benutzen...
ObjectGetValueByShift(), um Ihnen zu helfen
Und wie Sie damit arbeiten werden - das wissen nur Sie...
Vielen Dank, lieber Mann!
Kann ich die Losgröße eines schwebenden Auftrags ändern?
Nein, das können Sie nicht.
alles, was Sie ändern können, wird hier erklärt https://docs.mql4.com/ru/trading/OrderModify