In Anbetracht der Mediengerüchte über einen möglichen Webdienst für die MQL-Code-Kompilierung, Es stellt sich die berechtigte Frage nach der Durchführbarkeit des Projekts, benutzerdefinierte Expert Advisors direkt über einen auf WebAssembly basierenden Browser auszuführen.
Эта статья основана на моём выступлении на ITSubbotnik, прошедшем в Рязани 14 октября 2017 года. На русском пока что довольно мало материала на эту тему, надеюсь что статья будет вам полезна. Disclaimer: Автор не является экспертом ни в WebAssembly, ни в JavaScript. Данная статья есть компиляция мыслей и идей, полученных из выступлений других...
Löschen Sie die Protokolle, dann macht es mehr Sinn. Sowohl der Expert Advisor als auch das Terminal.
Registerkarte Terminal
2017.11.10 16:29:01.266 '8615385': order was opened : #4448742 sell 0.02 EURNZD at 1.68131 sl: 0.00000 tp: 0.00000
2017.11.10 20:37:38.949 '8615385': close order #4448742 sell 0.02 EURNZD at 1.68131 sl: 0.00000 tp: 0.00000 at price 0.00000
2017.11.10 20:37:39.277 '8615385': close order #4448742 sell 0.02 EURNZD at 1.68131 sl: 0.00000 tp: 0.00000 at price 0.00000
2017.11.10 20:37:39.745 '8615385': order #4448742 sell 0.02 EURNZD at 1.68131 sl: 0.00000 tp: 0.00000 closed at price 1.68356
2017.11.10 20:37:39.745 '8615385': order #4448742 sell 0.02 EURNZD closing at 0.00000 failed [Invalid parameters]
Registerkarte Experte
Line 8103: 216:29:01.266 Forex V2 EURNZD,M1: open #4448742 sell 0.02 EURNZD at 1.68131 ok
Line 8104: 016:29:01.266 Forex V2 EURNZD,M1: Order #4448742 open
Line 10145: 020:37:39.760 ExpertName EURNZD,H1: Неудачная попытка 1 закрытия/удаления ордера #4448742 Ошибка: 3
Line 10146: 320:37:39.760 ExpertName EURNZD,H1: unknown ticket 4448742forOrderClose function
Line 10147: 020:37:39.760 ExpertName EURNZD,H1: Неудачная попытка 2 закрытия/удаления ордера #4448742 Ошибка: 4108
Line 10148: 320:37:39.760 ExpertName EURNZD,H1: unknown ticket 4448742forOrderClose function
Line 10149: 020:37:39.760 ExpertName EURNZD,H1: Неудачная попытка 3 закрытия/удаления ордера #4448742 Ошибка: 4108
Line 10150: 320:37:39.760 ExpertName EURNZD,H1: unknown ticket 4448742forOrderClose function
Line 10151: 020:37:39.760 ExpertName EURNZD,H1: Неудачная попытка 4 закрытия/удаления ордера #4448742 Ошибка: 4108
Line 10152: 320:37:39.760 ExpertName EURNZD,H1: unknown ticket 4448742forOrderClose function
Line 10153: 020:37:39.760 ExpertName EURNZD,H1: Неудачная попытка 5 закрытия/удаления ордера #4448742 Ошибка: 4108
Line 10154: 320:37:39.760 ExpertName EURNZD,H1: unknown ticket 4448742forOrderClose function
Line 10155: 020:37:39.760 ExpertName EURNZD,H1: Неудачная попытка 6 закрытия/удаления ордера #4448742 Ошибка: 4108
Line 10156: 320:37:39.760 ExpertName EURNZD,H1: unknown ticket 4448742forOrderClose function
Line 10157: 020:37:39.760 ExpertName EURNZD,H1: Неудачная попытка 7 закрытия/удаления ордера #4448742 Ошибка: 4108
Line 10158: 320:37:39.760 ExpertName EURNZD,H1: unknown ticket 4448742forOrderClose function
Line 10159: 020:37:39.760 ExpertName EURNZD,H1: Неудачная попытка 8 закрытия/удаления ордера #4448742 Ошибка: 4108
Line 10160: 320:37:39.760 ExpertName EURNZD,H1: unknown ticket 4448742forOrderClose function
Line 10161: 020:37:39.760 ExpertName EURNZD,H1: Неудачная попытка 9 закрытия/удаления ордера #4448742 Ошибка: 4108
Line 10162: 320:37:39.760 ExpertName EURNZD,H1: unknown ticket 4448742forOrderClose function
Line 10163: 020:37:39.760 ExpertName EURNZD,H1: Неудачная попытка 10 закрытия/удаления ордера #4448742 Ошибка: 4108
Line 10164: 320:37:39.760 ExpertName EURNZD,H1: unknown ticket 4448742forOrderClose function
Line 10165: 020:37:39.760 ExpertName EURNZD,H1: Неудачная попытка 11 закрытия/удаления ордера #4448742 Ошибка: 4108
Line 10166: 320:37:39.760 ExpertName EURNZD,H1: unknown ticket 4448742forOrderClose function
Line 10167: 020:37:39.760 ExpertName EURNZD,H1: Неудачная попытка 12 закрытия/удаления ордера #4448742 Ошибка: 4108
Line 10168: 320:37:39.760 ExpertName EURNZD,H1: unknown ticket 4448742forOrderClose function
Line 10169: 020:37:39.760 ExpertName EURNZD,H1: Неудачная попытка 13 закрытия/удаления ордера #4448742 Ошибка: 4108
Line 10170: 320:37:39.760 ExpertName EURNZD,H1: unknown ticket 4448742forOrderClose function
Line 10171: 020:37:39.760 ExpertName EURNZD,H1: Неудачная попытка 14 закрытия/удаления ордера #4448742 Ошибка: 4108
Line 10172: 320:37:39.760 ExpertName EURNZD,H1: unknown ticket 4448742forOrderClose function
Line 10173: 020:37:39.760 ExpertName EURNZD,H1: Неудачная попытка 15 закрытия/удаления ордера #4448742 Ошибка: 4108
Line 10174: 320:37:39.760 ExpertName EURNZD,H1: unknown ticket 4448742forOrderClose function
Line 10175: 020:37:39.760 ExpertName EURNZD,H1: Неудачная попытка 16 закрытия/удаления ордера #4448742 Ошибка: 4108
Line 10176: 320:37:39.760 ExpertName EURNZD,H1: unknown ticket 4448742forOrderClose function
Line 10177: 020:37:39.760 ExpertName EURNZD,H1: Неудачная попытка 17 закрытия/удаления ордера #4448742 Ошибка: 4108
Line 10178: 320:37:39.760 ExpertName EURNZD,H1: unknown ticket 4448742forOrderClose function
Line 10179: 020:37:39.760 ExpertName EURNZD,H1: Неудачная попытка 18 закрытия/удаления ордера #4448742 Ошибка: 4108
Line 10180: 320:37:39.760 ExpertName EURNZD,H1: unknown ticket 4448742forOrderClose function
Line 10181: 020:37:39.760 ExpertName EURNZD,H1: Неудачная попытка 19 закрытия/удаления ордера #4448742 Ошибка: 4108
Line 10182: 320:37:39.760 ExpertName EURNZD,H1: unknown ticket 4448742forOrderClose function
Line 10183: 020:37:39.760 ExpertName EURNZD,H1: Неудачная попытка 20 закрытия/удаления ордера #4448742 Ошибка: 4108
Line 10184: 320:37:39.760 ExpertName EURNZD,H1: unknown ticket 4448742forOrderClose function
Line 10185: 020:37:39.760 ExpertName EURNZD,H1: Неудачная попытка 21 закрытия/удаления ордера #4448742 Ошибка: 4108
Line 10186: 320:37:39.760 ExpertName EURNZD,H1: unknown ticket 4448742forOrderClose function
Line 10187: 020:37:39.760 ExpertName EURNZD,H1: Неудачная попытка 22 закрытия/удаления ордера #4448742 Ошибка: 4108
Line 10188: 320:37:39.760 ExpertName EURNZD,H1: unknown ticket 4448742forOrderClose function
Line 10189: 020:37:39.760 ExpertName EURNZD,H1: Неудачная попытка 23 закрытия/удаления ордера #4448742 Ошибка: 4108
Line 10190: 320:37:39.760 ExpertName EURNZD,H1: unknown ticket 4448742forOrderClose function
Line 10191: 020:37:39.760 ExpertName EURNZD,H1: Неудачная попытка 24 закрытия/удаления ордера #4448742 Ошибка: 4108
Line 10192: 320:37:39.760 ExpertName EURNZD,H1: unknown ticket 4448742forOrderClose function
Line 10193: 020:37:39.760 ExpertName EURNZD,H1: Неудачная попытка 25 закрытия/удаления ордера #4448742 Ошибка: 4108
Line 10194: 320:37:39.760 ExpertName EURNZD,H1: unknown ticket 4448742forOrderClose function
Line 10195: 020:37:39.760 ExpertName EURNZD,H1: Неудачная попытка 26 закрытия/удаления ордера #4448742 Ошибка: 4108
Line 10196: 320:37:39.760 ExpertName EURNZD,H1: unknown ticket 4448742forOrderClose function
Line 10197: 020:37:39.760 ExpertName EURNZD,H1: Неудачная попытка 27 закрытия/удаления ордера #4448742 Ошибка: 4108
Line 10198: 320:37:39.760 ExpertName EURNZD,H1: unknown ticket 4448742forOrderClose function
Line 10199: 020:37:39.760 ExpertName EURNZD,H1: Неудачная попытка 28 закрытия/удаления ордера #4448742 Ошибка: 4108
Line 10200: 320:37:39.760 ExpertName EURNZD,H1: unknown ticket 4448742forOrderClose function
Line 10201: 020:37:39.760 ExpertName EURNZD,H1: Неудачная попытка 29 закрытия/удаления ордера #4448742 Ошибка: 4108
Line 10202: 320:37:39.760 ExpertName EURNZD,H1: unknown ticket 4448742forOrderClose function
Line 10203: 020:37:39.760 ExpertName EURNZD,H1: Неудачная попытка 30 закрытия/удаления ордера #4448742 Ошибка: 4108
Line 10204: 320:37:39.760 ExpertName EURNZD,H1: unknown ticket 4448742forOrderClose function
Line 10243: 220:37:39.760 ExpertName EURNZD,H1: close #4448742 sell 0.02 EURNZD at 1.68131 at price 1.68356
Nach Fehler 3 findet kein wirklicher Abschluss mehr statt. Ich habe es verstanden.
Expert Advisor 1 schließt und der zweite versucht, dieselbe Position zur gleichen Zeit zu schließen.
Ich habe die Arbeitslogik korrigiert, und es treten jetzt keine Fehler mehr auf.
ABER: Die Fehlernummer ändert sich von #3 zu #4108, wenn die an OrderClose() übergebenen Parameter innerhalb der Schleife unverändert bleiben.
Warum wird zuerst Fehler Nr. 3 und dann Fehler Nr. 4108 ausgelöst? - Das ist die Frage, die bleibt.
{Wenn wir uns die Zeitabläufe ansehen, dann haben wir einen Versuch, einen gesperrten Auftrag zu schließen (in diesem Fall wird der Fehler 139 selbst nicht angezeigt), aber nachdem er geschlossen wurde (und der Auftrag somit entsperrt ist), erhalten wir Fehler 3 }.
Warum gibt das Terminal keine spezifische Fehlermeldung aus, dass der Auftrag blockiert ist, sondern nur die allgemeine Fehlermeldung 3?
Ich weiß es nicht. Aber es ist auch schwer, es als Fehler zu bezeichnen.
2017.11.10 16:29:01.266 '8615385': order was opened : #4448742 sell 0.02 EURNZD at 1.68131 sl: 0.00000 tp: 0.00000
2017.11.10 20:37:38.949 '8615385': close order #4448742 sell 0.02 EURNZD at 1.68131 sl: 0.00000 tp: 0.00000 at price 0.00000
2017.11.10 20:37:39.277 '8615385': close order #4448742 sell 0.02 EURNZD at 1.68131 sl: 0.00000 tp: 0.00000 at price 0.00000
2017.11.10 20:37:39.745 '8615385': order #4448742 sell 0.02 EURNZD at 1.68131 sl: 0.00000 tp: 0.00000 closed at price 1.68356
2017.11.10 20:37:39.745 '8615385': order #4448742 sell 0.02 EURNZD closing at 0.00000 failed [Invalid parameters]
Wenn Sie sich das Terminalprotokoll ansehen, wird die Fehlermeldung 3 erzeugt , nachdem die Position geschlossen wurde und nicht, wenn die Sperre auf dem Server hätte erkannt werden müssen.
Die Fehlermeldung 139 hätte fast 0,5 Sekunden früher angezeigt werden können. Die ganze Zeit, die Expert Advisor "hängt", um Fehler 3, nachdem der Auftrag geschlossen wird.
Und übrigens, Fehler 3 Ungültige Parameter ist im Terminalprotokoll und 4108 nur aufgrund seiner Ausgabe und nur in der Registerkarte EA. Es sieht so aus, als ob 4108 eine clientseitige Verarbeitung ist.
Ich möchte nur die Logik kennen/verstehen, um sie in den Code einzubauen, anstatt mit der wissenschaftlichen Messmethode herumzufummeln... )
In welcher anderen Situation würde man eine Fehlermeldung 139 als diese erhalten...?
Es gibt keine bessere Situation, um einen Fehler 139 zu erhalten...?
Wenn ein schwebender Auftrag/SL/TP ausgelöst oder eine Position durch einen Stop-Out (auch auf dem Server) geschlossen wird.
Ich weiß nicht, wie es mit 4108 aussieht. Aber auch hier sehe ich keinen Grund, dem nachzugehen - wenn 2 EAs gleichzeitig einen Schließungsauftrag erteilen, wird einer von ihnen definitiv einen Fehler haben (was macht das für einen Unterschied?). Die Verarbeitung ist sehr einfach - OrderSelect ausführen und OrderCloseTime prüfen.
wtf? des Moderators: Aufgrund einer technischen Panne wurde der Beschreibungstext leider gelöscht. Bitte schreiben Sie es erneut und schicken Sie das Produkt zur Überprüfung ein. Wir entschuldigen uns für die entstandenen Unannehmlichkeiten.
Es ist nicht nur lästig, sondern auch nervig, ein paar Mal (jedes Mal 10 Tage Wartezeit) zu löschen und dann zu sagen: Ups, tut uns leid, wir haben es gelöscht, stellen Sie es irgendwie selbst wieder her und warten Sie dann weitere 10 Tage. - Und wenn ich es versuche, stürzt die Seite ab...
Was zum Teufel ist das? Was für ein Fehler muss passieren, damit dies verloren geht? dass es keine Historie gibt, die wiederhergestellt werden kann? Die Beschreibungsnachricht liegt seit einigen Tagen im Speicher. Warum ist die Nachricht des Moderators dieses Mal nicht aufgetaucht?
Ich weiß mit Sicherheit, dass dieses Problem nicht nur einmal auftritt. Diese angebliche Störung ist in Wirklichkeit keine Störung (wahrscheinlich verzögert), da sie nicht nur bei mir und nicht zur gleichen Zeit auftritt (das Problem besteht seit mehr als einem halben Jahr)! - Bitte kommentieren...
Und bitte reparieren Sie es. Wenn Sie das nicht können, stellen Sie mich ein. Ich mache es in einer Woche, für 2.000 Euro.
Was für ein Fiasko.
Werden sie die Löschung tatsächlich wiederherstellen? Die Hälfte meines Schriftwechsels mit dem Moderator ist verschwunden. Die Nachrichten aus dem Forum sind verschwunden. Und die Moderatoren haben Nachrichten gelöscht, die in der Folgezeit ins Leere gelaufen sind. Warum gibt es keinen Wartungsmodus? - Es ist besser, in dieser Reihenfolge zu sagen: erst wird der Modus aktiviert, dann wird gearbeitet, dann wird der Modus wiederhergestellt.
Kaum habe ich eine Nachricht gepostet, ist die Website nicht mehr erreichbar. Ich habe beschlossen, die Seite zu aktualisieren - sie ist nicht mehr verfügbar...
wtf zum zweiten mal. der obige kommentar wurde vor 4 tagen geschrieben. jetzt ist er wieder da mit einer bemerkung, die ich bereits korrigiert habe. ich habe eine neue version des produkts gepostet. jetzt ist sie weg. wo ist die neue version hin? So kann man nicht arbeiten - nun ja, es ist nicht seriös... In einem neuen Kommentar an den Moderator habe ich die Beschreibung, die fehlte, dupliziert, um nicht noch mehr zu verlieren. Was soll ich mit dem Produkt tun? es per E-Mail schicken? es an die Kommentare anhängen? oder es noch einmal versuchen und 24 Stunden warten?
Ein recht interessanter Überblick über die neue WebAssembly-Technologieunter https://habrahabr.ru/post/342180/
WebAssembly (WASM) — новый бинарный формат, позволяющий запускать код в браузере...
Anwendungen von WebAssembly:
-Geringere Ladezeit
-Höhere Berechnungsgeschwindigkeit
C/C++-fertigen Code verwenden
In Anbetracht der Mediengerüchte über einen möglichen Webdienst für die MQL-Code-Kompilierung,
Es stellt sich die berechtigte Frage nach der Durchführbarkeit des Projekts, benutzerdefinierte Expert Advisors direkt über einen auf WebAssembly basierenden Browser auszuführen.
Löschen Sie die Protokolle, dann macht es mehr Sinn. Sowohl der Expert Advisor als auch das Terminal.
Registerkarte Terminal
Registerkarte Experte
Nach Fehler 3 findet kein wirklicher Abschluss mehr statt. Ich habe es verstanden.
Expert Advisor 1 schließt und der zweite versucht, dieselbe Position zur gleichen Zeit zu schließen.
Ich habe die Arbeitslogik korrigiert, und es treten jetzt keine Fehler mehr auf.
ABER: Die Fehlernummer ändert sich von #3 zu #4108, wenn die an OrderClose() übergebenen Parameter innerhalb der Schleife unverändert bleiben.
Warum wird zuerst Fehler Nr. 3 und dann Fehler Nr. 4108 ausgelöst? - Das ist die Frage, die bleibt.
{Wenn wir uns die Zeitabläufe ansehen, dann haben wir einen Versuch, einen gesperrten Auftrag zu schließen (in diesem Fall wird der Fehler 139 selbst nicht angezeigt), aber nachdem er geschlossen wurde (und der Auftrag somit entsperrt ist), erhalten wir Fehler 3 }.
Warum gibt das Terminal keine spezifische Fehlermeldung aus, dass der Auftrag blockiert ist, sondern nur die allgemeine Fehlermeldung 3?
ABER: Ändern Sie die Fehlernummer von #3 in #4108, wenn die an OrderClose() übergebenen Parameter innerhalb der Schleife unverändert bleiben.
Warum erscheint zuerst Fehler Nr. 3 und dann Fehler Nr. 4108? - Das ist die Frage, die bleibt.
Dies ist die Version des Codes, in der es 1 OrderSelect gab, nicht wahr? Dann ist 4108 gerechtfertigt.
3 ist, wenn ein anderer EA eine Position schließt und 4108 ist, wenn wir versuchen, eine bereits geschlossene Position zu schließen.
Dies ist die Version des Codes, in der es 1 OrderSelect gab, nicht wahr? Dann ist 4108 gerechtfertigt.
3 ist, wenn ein anderer EA eine Position schließt, 4108 ist, wenn wir versuchen, eine bereits geschlossene Position zu schließen.
Richtig.
Aber warum wird der Fehler 139 nicht erzeugt, wenn man versucht, einen bereits abgeschlossenen Auftrag zu schließen?
Schließlich haben wir eher die Situation des Fehlers 139. Ist es nicht so?
Falscher Fehlertext
Richtig.
Aber warum erscheint die Fehlermeldung 139 nicht, wenn man versucht, einen Auftrag abzuschließen, der bereits zum Abschluss gesendet wurde?
Schließlich haben wir eher die Situation des Fehlers 139. Ist es nicht so?
Ich weiß es nicht. Aber man kann es auch nicht als Fehler bezeichnen.
Ich weiß es nicht. Aber es ist auch schwer, es als Fehler zu bezeichnen.
Wenn Sie sich das Terminalprotokoll ansehen, wird die Fehlermeldung 3 erzeugt , nachdem die Position geschlossen wurde und nicht, wenn die Sperre auf dem Server hätte erkannt werden müssen.
Die Fehlermeldung 139 hätte fast 0,5 Sekunden früher angezeigt werden können. Die ganze Zeit, die Expert Advisor "hängt", um Fehler 3, nachdem der Auftrag geschlossen wird.
Und übrigens, Fehler 3 Ungültige Parameter ist im Terminalprotokoll und 4108 nur aufgrund seiner Ausgabe und nur in der Registerkarte EA. Es sieht so aus, als ob 4108 eine clientseitige Verarbeitung ist.
Ich möchte nur die Logik kennen/verstehen, um sie in den Code einzubauen, anstatt mit der wissenschaftlichen Messmethode herumzufummeln... )
In welcher anderen Situation würde man eine Fehlermeldung 139 als diese erhalten...?
Es gibt keine bessere Situation, um einen Fehler 139 zu erhalten...?
Wenn ein schwebender Auftrag/SL/TP ausgelöst oder eine Position durch einen Stop-Out (auch auf dem Server) geschlossen wird.
Ich weiß nicht, wie es mit 4108 aussieht.
Aber auch hier sehe ich keinen Grund, dem nachzugehen - wenn 2 EAs gleichzeitig einen Schließungsauftrag erteilen, wird einer von ihnen definitiv einen Fehler haben (was macht das für einen Unterschied?).
Die Verarbeitung ist sehr einfach - OrderSelect ausführen und OrderCloseTime prüfen.
wtf?
des Moderators:
Aufgrund einer technischen Panne wurde der Beschreibungstext leider gelöscht. Bitte schreiben Sie es erneut und schicken Sie das Produkt zur Überprüfung ein.
Wir entschuldigen uns für die entstandenen Unannehmlichkeiten.
Es ist nicht nur lästig, sondern auch nervig, ein paar Mal (jedes Mal 10 Tage Wartezeit) zu löschen und dann zu sagen: Ups, tut uns leid, wir haben es gelöscht, stellen Sie es irgendwie selbst wieder her und warten Sie dann weitere 10 Tage. - Und wenn ich es versuche, stürzt die Seite ab...
Was zum Teufel ist das? Was für ein Fehler muss passieren, damit dies verloren geht? dass es keine Historie gibt, die wiederhergestellt werden kann? Die Beschreibungsnachricht liegt seit einigen Tagen im Speicher.
Warum ist die Nachricht des Moderators dieses Mal nicht aufgetaucht?
Ich weiß mit Sicherheit, dass dieses Problem nicht nur einmal auftritt. Diese angebliche Störung ist in Wirklichkeit keine Störung (wahrscheinlich verzögert), da sie nicht nur bei mir und nicht zur gleichen Zeit auftritt (das Problem besteht seit mehr als einem halben Jahr)! - Bitte kommentieren...
Und bitte reparieren Sie es. Wenn Sie das nicht können, stellen Sie mich ein. Ich mache es in einer Woche, für 2.000 Euro.
Was für ein Fiasko.
Werden sie die Löschung tatsächlich wiederherstellen? Die Hälfte meines Schriftwechsels mit dem Moderator ist verschwunden. Die Nachrichten aus dem Forum sind verschwunden. Und die Moderatoren haben Nachrichten gelöscht, die in der Folgezeit ins Leere gelaufen sind.
Warum gibt es keinen Wartungsmodus? - Es ist besser, in dieser Reihenfolge zu sagen: erst wird der Modus aktiviert, dann wird gearbeitet, dann wird der Modus wiederhergestellt.
Kaum habe ich eine Nachricht gepostet, ist die Website nicht mehr erreichbar. Ich habe beschlossen, die Seite zu aktualisieren - sie ist nicht mehr verfügbar...
So kann man nicht arbeiten - nun ja, es ist nicht seriös...
In einem neuen Kommentar an den Moderator habe ich die Beschreibung, die fehlte, dupliziert, um nicht noch mehr zu verlieren.
Was soll ich mit dem Produkt tun? es per E-Mail schicken? es an die Kommentare anhängen? oder es noch einmal versuchen und 24 Stunden warten?