Fragen von Anfängern MQL5 MT5 MetaTrader 5 - Seite 1220
![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
Eine Sekunde ist oft der Verlust des letzten Geschäfts/der letzten Bestellung auf der Real. Zum Beispiel wird bei vielen Brüchen ein Auftrag für die TTL-Zeit ausgeführt, die fünf Sekunden betragen kann. Wird er nicht innerhalb von fünf Sekunden ausgeführt, gilt der Auftrag als Weiterleitung. Oder er wird ausgeführt, aber in drei Sekunden.
Wenn zwischen der Annahme und der Ausführung keine Zeitspanne verstrichen ist, erhält der Aufruf HistorySelect keine Informationen darüber.
Vielleicht sollte die TimeCurrent gleich MathMax(LastOrder_time, MarketWatch_Time) sein. Dann wird der HistorySelect korrekt sein. Aber TimeCurrent ist wahrscheinlich zu teuer.
Übrigens, ein solches Schema der Arbeit HistorySelect wird einige der Geschichte der Trades zu überspringen.
Obwohl auf den ersten Blick alles klar ist.
Das Schreiben einer billigen DealsTotal() ist in MT5 nicht einfach. Es ist nicht elementar (und frei) OrdersHistoryTotal() in MT4.
lauten Gedanken, ohne Anspruch auf Relevanz oder Kompetenz:
Wenn von der Annahme bis zur Ausführung keine Ticks vorhanden waren, wird ein solcher Aufruf von HistorySelect keine Informationen darüber erhalten.
Sie werden dieses Problem nicht lösen, das Modell der Server - Terminal - MQL Interaktion wurde ursprünglich entworfen
Ich bin noch nicht so weit, dass ich es im MT5 überprüfen kann, aber im MT4 weiß ich mit Sicherheit, dass es Situationen gibt, in denen sich der Preis unseres Symbols im Marktbeobachtungsfenster ändert, aber es gibt vielleicht keine Ticks oder weniger als in ЕА
ok, egal, so dass es funktioniert, müssen Sie nur in der TS-Entscheidung zu wählen, was mit dem Auftrag in Ermangelung von Informationen aus dem Server von dem Moment an Sie den Auftrag senden passiert - dh, wird der Auftrag eingestellt oder abgelehnt werden a priori, und erhielt die Antwort auf diese vorläufige Entscheidung zu bestätigen oder zu stornieren - dh, die Arbeit mit unbestätigten Informationen oder noch für die Antwort vom Server warten - dieses Angebot MQ und Sie werden wahrscheinlich nicht passen
Es ist nicht einfach, billige DealsTotal() in MT5 zu verwenden. Es ist nicht die elementare (und kostenlose) OrdersHistoryTotal() in MT4.
nicht schreiben ;)
oder vielmehr, höchstwahrscheinlich werden Sie, und Sie werden EA-Ressourcen zu verbringen, um den Algorithmus zu erhalten, ich denke, Sie müssen herausfinden, wie SQLite funktioniert, MQ Performance-Tests haben festgestellt, die Arbeit mit großen Tabellen und Proben ist genau der Zweck der Datenbank - die EA-Code wird minimalistisch sein, die ganze Arbeit der Datenbank zu tun, die ganze Arbeit kommt auf das Füllen von Daten, wenn eine Bestellung und die Aktualisierung, wenn der Server reagiert (Synchronisation, natürlich, wenn Sie EA, die Datenbank im Speicher laufen)
aber das wirst du nicht ;)
oder vielmehr, höchstwahrscheinlich werden Sie schreiben und verbringen EA-Ressourcen, um den Algorithmus zu erhalten, ich denke, Sie müssen herausfinden, wie SQLite funktioniert, MQ Performance-Tests angegeben, die Arbeit mit großen Tabellen und Proben ist genau der Zweck der Datenbank - EA-Code wird minimalistisch sein, die ganze Arbeit der Datenbank werden Sie tun, alle Arbeit wird auf das Füllen von Daten kommen, wenn eine Bestellung und Aktualisierung, wenn die Antwort vom Server (Synchronisation, natürlich bei der Ausführung EA, die Datenbank im Speicher)
Er wurde ursprünglich geschrieben und veröffentlicht. Es ist unwahrscheinlich, dass es noch schneller geht.
Er wurde ursprünglich geschrieben und veröffentlicht. Es ist unwahrscheinlich, dass es noch schneller geht.
Ich muss die Aufgabe falsch gesehen haben.
Ich dachte, dass ich die Liste der Aufträge an zwei Punkten aktualisieren muss, nämlichOnTradeTransaction() und OnTick(), und schlug daher vor, dies in der Datenbank zu tun
Hier ist mein Code. Bei der Initialisierung wird ein Datensatz in der Tabelle erstellt. Im OnTick-Body sollte sofort ein Fehler zurückgegeben werden, weil ich versuche, einen Datensatz mit demselben PRIMARY KEY hinzuzufügen, und danach wird die Basis sofort geschlossen. Aber gleichzeitig sollte ich zumindest den ersten Datensatz sehen, wenn ich ihn öffne, aber wenn ich ihn im Testprogramm ausführe, ist er nicht da. Und auch die Tabelle wird nicht erstellt. Wenn ich es einfach im Terminal öffne, ist alles normal. Der erste Datensatz ist da.
Mit dem Standort der Datenbank kommen Sie hoffentlich nicht durcheinander?
Sie sind nicht verwirrt über den Standort der Basis, oder?
Nein, das bin ich nicht. Alles ist in Dateien. Ich denke, dass im Testermodus die Datenbank im Speicher erstellt und nach dem Test zerstört wird.
lauten Gedanken, ohne Anspruch auf Relevanz oder Kompetenz:
...
oder vielmehr, höchstwahrscheinlich werden Sie schreiben und verbringen EA-Ressourcen, um den Algorithmus zu erhalten, ich denke, Sie müssen herausfinden, wie SQLite funktioniert, MQ Performance-Tests angegeben, die Arbeit mit großen Tabellen und Proben ist genau der Zweck der Datenbank - EA-Code wird minimalistisch sein, die ganze Arbeit der Datenbank werden Sie tun, ist alle Arbeit auf das Füllen von Daten reduziert, wenn eine Bestellung und Update, wenn die Antwort vom Server (Synchronisation, natürlich, wenn EA läuft, die Datenbank im Speicher)
Und welche Datenbank soll die ganze Arbeit erledigen? Können Sie mir das sagen?
Die Kommunikation erfolgt entweder über die Datenbank oder über PUB/SUB ZMQ. Natürlich ist die Datenbank nicht SQLite, sondern Redis, das für diese Zwecke am besten geeignet ist, natürlich meine persönliche Meinung.
Viel Glück!