
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
Ich habe es auf die gleiche Weise implementiert, nur durch Funktionen.
Verstehe, Ihr Code ähnelt dem von MK - zwischen OrderCheck und OrderSend gibt es eine Ebene der Fehlerbehandlung durch den Benutzer.
Ich habe es auf diese Weise implementiert, nur durch Funktionen.
OrderCheck wird implizit und notwendigerweise innerhalb von OrderSend geprüft.
Wenn die Bestellung also nicht korrekt ausgefüllt wird, wird die Antwort sofort zurückgegeben, ohne sie an den Server zurückzuschicken.
Lesen Sie, was im Handbuch dazu steht:
Erste Auswahl: Wir sehen, dass es sich um eine Funktion für Handelsgeschäfte handelt und dass keine Schecks erwähnt werden.
Nun, wenn ich sage, dass es Kontrollen gibt, dann stimmt das auch.
Kein Auftrag verlässt das Terminal ohne harte Kontrollen.
Zweite Hervorhebung: Wir sehen, dass Prüfungen auf dem Server durchgeführt werden, und die Entwickler empfehlen die Verwendung von OrderCheck(), um die Anfrage zu prüfen, bevor sie an den Server gesendet wird. Auch hier wird nicht erwähnt, dass OrderSend() eine Validierung durchführt.
Wir empfehlen ausdrücklich, dass die Händler die Möglichkeit haben, sich im Voraus zu informieren, ob der Auftrag korrekt ausgeführt wird, und die entsprechenden Maßnahmen zu ergreifen.
Wer will, kann es vorprüfen. Wer das nicht möchte, für den werden wir trotzdem ähnliche Antworten prüfen und zurückgeben.
Die einzige Stelle, an der erwähnt wird, dass die Prüfung vor dem Senden der Anfrage erfolgt, ist "Im Falle einer erfolgreichen grundlegenden Prüfung der Strukturen (Zeigerprüfung) ....". Die Prüfung von Zeigern und die Prüfung der Werte von Feldern der Anforderungsstruktur auf Fehler ist jedoch nicht dasselbe. Und die Empfehlung der Entwickler, die Funktion OrderCheck() zu verwenden, ist ein indirekter Beweis dafür, dass OrderSend() keine echte Fehlerprüfung durchführt, bevor eine Anforderung an den Server gesendet wird. Warum sollten wir sonst "gebuttert" werden: OrderSend() prüft zuerst, und dann muss dieselbe Prüfung von OrderCheck() erneut durchgeführt werden?
Aus dem Verweis geht also eindeutig hervor, dass die Prüfung ausschließlich auf dem Server durchgeführt wird!
Niemandem wird ein fehlerhafter oder übermäßiger Fluss von Anfragen an den Server entgehen.
Um dies zu verstehen, genügt einfache Logik. Und wir werden die Dokumentation erweitern.
Alle Fehler werden von der Geschäftslogik behandelt.
Ich habe eine. Business-Logik behandelt Ereignisse im Zusammenhang mit der Geschäftslogik (z. B., um Platzierung Fehler), aber alles andere (z. B. Server-Antwort Verzögerung) - eine universelle Vorlage, auf der absolut jeder Experte implementiert werden kann.
Aber MT5 ist um ein Vielfaches komplizierter in Bezug auf die Handhabung von Return Codes + Asynchronität.
Das ist es, worüber wir sprechen, wie ich ebenfalls schon geschrieben habe, und es gibt null Informationen zu diesem Thema. Und seit Jahren versuchen die MKs auf jede erdenkliche Weise, sich von dieser Bestimmung zu distanzieren. Das ist es, was ich geschrieben habe - Händler profitieren von einem Produkt, bei dem es Punkte gibt, die zu Leckagen führen, d.h. für MQ ist es ein Faktor zur Umsatzsteigerung. Leider befinden wir uns auf einem Markt, auf dem wir Konkurrenten (wir und MQ) sind, keine Genossen.
Sie verlangen Unmögliches von einem Wrapper. Die Standardbibliothek ist keine Geschäftslogik. Es ist ein Wrapper "über" die Terminalfunktionen. Eine Umhüllung über der Füllung der Süßigkeit.
Dann ist eine solche Strukturierung wenig sinnvoll.
Genau wie die Druckfunktion kann auch die Protokollierung von Fehlern keinen freien Speicherplatz auf der Festplatte garantieren. Für die Fehlerbehandlung müssen Sie andere Funktionen verwenden, und diese sind fallspezifisch.
Nicht einmal der richtige Wrapper kann alles garantieren, aber er kann viele Dinge im Zusammenhang mit verwandten Funktionen.
Es wurde bereits mehr als einmal darüber geschrieben. Wenn MQ nicht in der Lage ist, eine fertige Lösung anzubieten, sollten sie zumindest ein Handbuch über Fehlerbehandlung und Rückgabecodes erstellen. Auf jede erdenkliche Weise freigeschaltet. In der Dokumentation zu 4 war dies teilweise vorhanden (z.B. 30 Sekunden warten in einem solchen Fall), teilweise haben die Benutzer aus Erfahrung den Umgang mit undokumentierten Situationen erkannt. Für 5 gibt es überhaupt nichts. Und da es sie gibt, wird sie niemand nutzen.
Nun, wenn MQ so reagiert, weil die einfach geschaffene Handelsinfrastruktur es prinzipiell nicht zulässt, was soll ich sagen - es ist ein komplettes Scheitern des gesamten MT5-Projekts, zumal es auch noch eine unglaubliche Menge anderer Untiefen gibt.
Wenn Sie möchten, können Sie jeden Rückgabecode durchgehen und die wichtigsten möglichen Situationen betrachten.
Ich würde es gerne mit einem so erfahrenen MQL5 Expert Advisor wie Ihnen machen. Wir werden auf die Zeit und die Notwendigkeit warten. Gott sei Dank habe ich noch 4, die in vielerlei Hinsicht viel bequemer sind.
-Alexey-:
eine fertige Lösung, zumindest einen Leitfaden für Fehlerbehandlung und Rückgabecodes
Welcher Code verursacht Verarbeitungsprobleme?
Code
Kennung
Beschreibung
10004
TRADE_RETCODE_REQUOTE
Anfrage an
10006
TRADE_RETCODE_REJECT
Antrag abgelehnt
10007
TRADE_RETCODE_CANCEL
Antrag vom Gewerbetreibenden storniert
10008
TRADE_RETCODE_PLACED
Auftrag erteilt
10009
TRADE_RETCODE_DONE
Auftrag ausgeführt
10010
TRADE_RETCODE_DONE_PARTIAL
Suchauftrag teilweise ausgeführt
10011
TRADE_RETCODE_ERROR
Fehler bei der Bearbeitung einer Anfrage
10012
TRADE_RETCODE_TIMEOUT
Antrag wegen Zeitablaufs storniert
10013
TRADE_RETCODE_INVALID
Falscher Antrag
10014
TRADE_RETCODE_INVALID_VOLUME
Falsches Volumen in der Anfrage
10015
TRADE_RETCODE_INVALID_PRICE
Falscher Preis in der Anfrage
10016
TRADE_RETCODE_INVALID_STOPS
Falsche Haltestellen im Antrag
10017
TRADE_RETCODE_TRADE_DISABLED
Handel verboten
10018
TRADE_RETCODE_MARKET_CLOSED
Der Markt ist geschlossen
10019
HANDEL_RETCODE_KEIN_GELD
Unzureichende Mittel für die Erledigung des Ersuchens
10020
TRADE_RETCODE_PRICE_CHANGED
Preise geändert
10021
HANDELS_RETCODE_PREIS_AUS
Kein Angebot zur Bearbeitung der Anfrage
10022
TRADE_RETCODE_INVALID_EXPIRATION
Ungültiges Verfallsdatum in der Anfrage
10023
TRADE_RETCODE_ORDER_CHANGED
Auftragsstatus geändert
10024
TRADE_RETCODE_TOO_MANY_REQUESTS
Zu häufige Anfragen
10025
TRADE_RETCODE_NO_CHANGES
Keine Änderung des Antrags
10026
TRADE_RETCODE_SERVER_DISABLES_AT
Auto-Trading vom Server verweigert
10027
TRADE_RETCODE_CLIENT_DISABLES_AT
Autotrading durch Client-Terminal verboten
10028
TRADE_RETCODE_LOCKED
Antrag zur Bearbeitung gesperrt
10029
HANDELS_RETCODE_GEFROREN
Auftrag oder Position eingefroren
10030
TRADE_RETCODE_INVALID_FILL
Nicht unterstützter Saldoauftragstyp wird angezeigt
10031
TRADE_RETCODE_CONNECTION
Keine Verbindung zum Handelsserver
10032
TRADE_RETCODE_ONLY_REAL
Der Betrieb ist nur für echte Konten erlaubt
10033
TRADE_RETCODE_LIMIT_ORDERS
Limit für die Anzahl der ausstehenden Aufträge erreicht
10034
TRADE_RETCODE_LIMIT_VOLUME ERREICHT
Limit für Order- und Positionsvolumen für dieses Symbol erreicht
Zum Beispiel 10004. Wo steht geschrieben, was zu tun ist? Und in der vierfachen Dokumentation war zumindest etwas zu finden:
Можно без задержки обновить данные при помощи функции RefreshRates и повторить попытку. Если ошибка не исчезает, необходимо прекратить все попытки торговых операций и изменить логику программы.
Welcher Code wirft Verarbeitungsprobleme auf?
10006 (welcher Grund wird abgelehnt, welche anderen Gründe könnte es geben, die nicht in den anderen Codes aufgeführt sind?)
10011, 10013, 10028
10006 (welcher Grund wird abgelehnt, welche anderen Gründe könnte es geben, die nicht in den anderen Codes angegeben sind?)
10011, 10013, 10028
Kollegen, die die Suche nach der Wahrheit bereits satt haben. Das Thema ist ähnlich zu dem, was ich brauche, also schreibe ich hier, bitte helfen Sie!
Ich erteile den Auftrag mit sofortiger Ausführung, während er hängt, prüfe ich den Preis jeden Tick und wenn es möglich ist, verfolge ich ihn. Aber aus irgendeinem Grund bekomme ich immer den Fehler 10013. Ich habe alle möglichen Foren durchforstet und fast alle Zeilen des ursprünglichen Auftrags hinzugefügt (obwohl in der Beschreibung steht, dass nur das Symbol, die Aktion und sl und tp für diese Art von Aktion ausreichend sind). Nichts funktioniert! Hier ist der Code.