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
Erfassung aller Ereignisse pro Tick, Vergleich mit zuvor aufgezeichneten Daten.
Alles in Arrays.
Manchmal gibt es sogar Bremsen, wenn es sehr viele Zecken gibt. Deshalb habe ich eine Verzögerung zwischen den Prüfungen von 1 Sekunde festgelegt.
Es geht um die Überwachung vieler Positionen.
Und wenn Sie nur Positionen eines bestimmten Roboters überwachen, ist es natürlich einfacher.
Ich habe eine einfache Aufgabe, und es sind nicht mehr als zwei oder drei Dutzend Aufträge in Arbeit.
Und deshalb werde ich einen Timer verwenden, um zu überprüfen, was in OrdersTotal() steht, und bei jeder Iteration die Mengen in neue und alte Variablen mit Substitution schreiben, und wenn sich die Menge geändert hat - weitere Schritte unternehmen.
Ich habe eine einfache Aufgabe, und es sind nicht mehr als zwei oder drei Dutzend Aufträge in Arbeit.
Und deshalb werde ich einen Timer verwenden, um zu überprüfen, was in OrdersTotal() steht, und bei jeder Iteration die Mengen in neue und alte Variablen mit Substitution schreiben, und wenn sich die Menge geändert hat - weitere Schritte unternehmen.
Das Volumen ändert sich nicht, wenn ein schwebender Auftrag ausgelöst wird.
Das Volumen wird sich nicht ändern, wenn der schwebende Auftrag ausgelöst wird.
Nun, ich filtere die Aufträge in der Schleife nach Typ und berechne das Volumen der offenen kumulativen Position.
Es macht mich traurig, dass ich Ressourcen und Zeit verschwenden muss, während man im MT5 einfach auf ein bestimmtes Ereignis warten kann, ohne Stress zu haben.
Nun, ich filtere die Aufträge in der Schleife nach Typ und berechne das Volumen der offenen kumulativen Position.
Es ist traurig, dass man auf diese Weise trainieren und Ressourcen verschwenden muss, während man in MT5 einfach auf ein bestimmtes Ereignis warten kann, ohne Stress zu haben.Nun, mt5 ist um eine Größenordnung höher als mt4.
Dies gilt auch für andere Funktionen.
In meiner speziellen Situation, wenn wir einmal am Tag handeln und einmal am Tag ein Ereignis bekommen, haben wir 60*60*24=86.400 zusätzliche Bemühungen. Und es gibt noch keinen anderen Weg.
Das hängt von der jeweiligen Aufgabe ab.
Wenn wir das Öffnen/Schließen (nicht teilweise) einer Position und das Setzen/Löschen eines Auftrags erfassen wollen, müssen wir die Liste nicht jedes Mal in einer Schleife durchgehen.
Wir können einfach die aktuellen und vorherigen Werte von OrdersTotal() überprüfen. Wenn wir einen Unterschied feststellen, haben wir ein Ereignis, und dann schauen wir uns den Wert an.
Ich habe alles mit der Hash-Summe der Ordnungs- und Positionseigenschaften gemacht. Sobald sich etwas verändert hat - wir haben ein Ereignis - dann schauen wir, was sich dort genau verändert hat.
Aber ich hatte eine Aufgabe, um alles und alle Änderungen zu verfolgen.
In meinem konkreten Fall, wenn die Geschäfte einmal pro Tag ausgeführt werden und ein Ereignis einmal pro Tag stattfindet, müssen wir 60*60*24=86.400 zusätzliche Anstrengungen unternehmen. Und es gibt keinen anderen Weg.
Es gibt auch diesen Ansatz (wenn das Erscheinen eines neuen Auftrags nur von der EA-Seite aus möglich ist):
Wenn der Auftrag vorhanden ist, aktualisieren Sie seine Daten, falls erforderlich. Dies ist der Fall, wenn eine Überwachung von SL/TP/Volumen erforderlich ist. Wenn es nicht erforderlich ist, machen wir gar nichts anderes.
Wenn der Auftrag in der Liste der geschlossenen Aufträge gefunden wird (OrderCloseTime() > 0), dann wird er aus dem Array gelöscht. Das Array wird erst wieder aufgefüllt, wenn der Auftrag von einem EA geöffnet wird.
So müssen wir nicht bei jedem Tick die gesamte Liste der Aufträge durchgehen. Operationen sind nur mit einem eigenen Array möglich.
Ich werde versuchen, die OrdersTotal()-Werte zu vergleichen (dank @Artyom Trishkin), das sollte reichen. Ich werde keine Teilverschlüsse haben.
Während der Initialisierung werde ich dem alten Auftrag den Wert -1 zuweisen, so dass beim Start immer die vollständige Prüfung durchgeführt wird, unabhängig vom Vorhandensein von Aufträgen auf dem Markt.
Danach erscheint entweder ein neuer Auftrag (Ereignis) oder der alte wird gelöscht (Ereignis), und selbst das Symbol spielt keine Rolle - wir können alles komplett überprüfen, es ist immer noch um ein Vielfaches weniger häufig als endloses Herumfummeln.
Ich werde versuchen, die OrdersTotal()-Werte zu vergleichen (dank @Artyom Trishkin), das sollte reichen. Ich werde keine Teilverschlüsse haben.
Während der Initialisierung werde ich dem alten Auftrag den Wert -1 zuweisen, so dass beim Start immer die vollständige Prüfung durchgeführt wird, unabhängig vom Vorhandensein von Aufträgen auf dem Markt.
Danach erscheint entweder die neue Bestellung (Ereignis) oder die alte wird gelöscht (Ereignis), und selbst das Symbol spielt keine Rolle - wir können eine vollständige Überprüfung aller Bestellungen durchführen, das ist immer noch um ein Vielfaches weniger häufig als endloses Herumstochern.
Aber es muss vorsichtig gehandhabt werden, heute stand ich vor dem Problem, dass eine Position geschlossen und die andere auf einer anderen eröffnet wurde, und zwar fast zur gleichen Zeit zwischen den Ticks.
Am Ende blieb OrdersTotal() 8. Die Logik des Expert Advisors ist durcheinander geraten - er hat die neuen Daten nicht neu berechnet