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

 
TYRBO:
Problem durch Preisvergleich gelöst
Im Prüfgerät? In einem realen Markt auf einem Floating-Spread-Konto ändert sich der Break-even-Preis nach einem Tick
 
Artyom Trishkin:

In diesem Zusammenhang möchte ich auf Folgendes hinweisen:

  1. Wir müssen so wenige Zyklen pro Tick wie möglich erreichen.
  2. Wir benötigen ein konstantes Array mit den Daten der Marktaufträge und Positionen und ein Array mit den Daten der gelöschten/geschlossenen Aufträge und Positionen
  3. Wenn wir das Array lokal in einer Funktion haben, muss es bei wiederholtem Aufruf erneut gefüllt werden. Ich schlage vor, dass es nur einmal bei einem neuen Tick gefüllt wird - das Array ist also global, sonst würden wir es beim Verlassen der Funktion verlieren.
  4. Um etwas darin (im Array) zu finden, brauchen wir ein gefülltes Array und Funktionen, die die gefundenen Daten zurückgeben. Innerhalb von Funktionen können wir Hilfsarrays für notwendige Berechnungen deklarieren.

Aus diesem Grund wäre es besser, globale Arrays zu haben - für geschlossene und offene Aufträge und Positionen. Bei einem neuen Tick übergeben wir einmalig die erforderliche Anzahl von Aufträgen/Positionen und füllen damit die beiden Arrays. Und dann bekommen wir von ihnen alle notwendigen Daten auf denselben Tick. Beachten Sie, dass nicht nur der letzte geschlossene/offene Auftrag/die letzte offene Position und alle zugehörigen Daten berechnet werden, sondern auch alle übergeordneten und untergeordneten Ticks aller Positionen im Falle einer teilweisen Schließung durchsucht werden. So kann ich jederzeit sehen, welches Ticket von der einen oder anderen Position stammt, ob es teilweise mehrfach geschlossen wurde - all das funktioniert bereits in einer Klasse, die in einem Timer läuft. Ich habe viele andere Daten, die ich mit einer geringen Gesamtzahl von Zyklen benötige. Die erforderliche Tiefe der Historie für Arrays wird für den Prüfer festgelegt.

Und so weiter und so fort ...

Entschuldigung. Eine weitere Ergänzung (nicht als Gegengewicht, sondern als Ergänzung), möchte ich hinzufügen, dass lokale Arrays mitstatischen nicht verloren gehen. Das heißt, wenn die Bedingungen es erlauben, ohne sie global zu deklarieren.

 
P./S.: Ich vervollständige dies natürlich aus eigenem "Interesse"))). Denn ich kann in zulässigen Fällen lokale Statik anwenden.
 
Vitaly Muzichenko:

Ich schreibe es jetzt langsam für 5. Ich meine, dass sich der Preis sehr schnell ändern kann und das Niveau unter dem Stop-Loss-Wert liegen kann, was zu einem Fehler führen wird. Ich meine damit, dass sich der Preis sehr schnell ändern kann und das Niveau unter dem zulässigen Stopp-Niveau liegt, was zu einem Fehler führen würde.

Ich verstehe, dass diese"SymbolInfoTick" Sache benötigt wird, um den aktuellen Preis zu erhalten?

Um die aktuellen Ask- und Bid-Werte in mql4 zu erhalten, hätte der Refresh also ohnehin aufgerufen werden müssen. Und es stellt sich heraus, dass sich die Auslastung im Vergleich zum Aufruf von SymbolInfoTick() kaum ändern wird.

Aber hier ist eine weitere Ergänzung: Ich schreibe SymbolInfoTick() in die folgende Schleife, um genaue Preise zu erhalten

        do
         while(!SymbolInfoTick(_Symbol, mqlTick));

Wenn wir vom ersten Mal an normale Preise erhalten, wird diese Schleife die Ausführungszeit nicht erhöhen. Und wenn etwas schief geht, ist es besser, es zu wiederholen, als den gleichen Preis zu bekommen.

 
Alexey Viktorov:

Um die aktuellen Ask- und Bid-Werte in mql4 zu erhalten, müssen Sie also sowieso refresh aufrufen. Und es stellt sich heraus, dass sich die Auslastung im Vergleich zum Aufruf von SymbolInfoTick() kaum ändern wird.

Aber hier ist noch eine weitere Ergänzung: um die aktuellen Preise fehlerfrei zu ermitteln, habe ich SymbolInfoTick() in diese Schleife eingefügt

        do
         while(!SymbolInfoTick(_Symbol, mqlTick));

Wenn wir vom ersten Mal an normale Preise erhalten, wird diese Schleife die Ausführungszeit nicht erhöhen. Und wenn etwas schief geht, ist es besser, es zu wiederholen, als den gleichen Preis zu bekommen.

Verstehe, wo sollen wir sie einfügen, innerhalb oder vor der Schleife?
 
Vitaly Muzichenko:
Verstehe, aber wo soll ich sie anbringen, innerhalb des Zyklus oder davor?
Nun, es ist ein separater Zyklus, bis wir die aktuellen Preise erhalten. Wir haben bereits darüber gesprochen, wo wir sie unterbringen können. Wenn es einen Hinterhalt mit nicht aktuellen Preisen gibt, sollten wir ihn in der Schleife der Auftragsbewertung setzen.
 
Alexey Viktorov:

Um die aktuellen Ask- und Bid-Werte in mql4 zu erhalten, müssen Sie also sowieso refresh aufrufen. Und es stellt sich heraus, dass sich die Auslastung im Vergleich zum Aufruf von SymbolInfoTick() kaum ändern wird.

Aber hier ist noch eine weitere Ergänzung: um die aktuellen Preise fehlerfrei zu ermitteln, habe ich SymbolInfoTick() in diese Schleife eingefügt

        do
         while(!SymbolInfoTick(_Symbol, mqlTick));

Wenn wir vom ersten Mal an normale Preise erhalten, wird diese Schleife die Ausführungszeit nicht erhöhen. Und wenn etwas schief geht, ist es besser, es zu wiederholen, als den gleichen Preis zu bekommen.

Und wenn Sie sie gar nicht bekommen? Wie kann man die Schleife verlangsamen?
 
Artyom Trishkin:
Und wenn er sie gar nicht erhält? Wie kann man den Zyklus verlangsamen?

Ja, logischerweise könnte es z. B. sein, dass das Terminal die Verbindung verloren hat - dafür gibt es viele Gründe, bei mir hat es 50 Mal am Tag die Verbindung verloren.

Wie lassen sich die aktuellen Preise am besten ermitteln, und zwar ressourcenschonend - für den Netzbesuch.

 
Vitaly Muzichenko:

Ja, logischerweise könnte es z. B. sein, dass das Terminal die Verbindung verloren hat - dafür gibt es viele Gründe, bei mir hat es 50 Mal am Tag die Verbindung verloren.

Was ist der beste Weg, um aktuelle Preise zu erhalten und gleichzeitig weniger ressourcenintensiv zu sein - denken Sie daran - für die Netzsuche.

Schauen Sie 10 Seiten zurück, dort gibt es einen guten Plan
 
trader781:
Schauen Sie 10 Seiten zurück, dort gibt es einen ziemlich guten Schaltplan.
Ich konnte es nicht finden und kann mich auch nicht daran erinnern, dass es hier steht.
Grund der Beschwerde: