Fehler, Irrtümer, Fragen - Seite 891

 

Es ist klar, dass die Nullsetzung aus Kompatibilitätsgründen vorgenommen wurde, aber es ist nicht klar, warum das unbenutzte enum = WRONG_VALUE nicht korrekt funktioniert, wenn es korrekt initialisiert wurde. Dieser Ansatz ist nicht übertragbar und erhöht die Wahrscheinlichkeit von versteckten Fehlern erheblich.

 
A100: Es ist unklar, warum ein unbenutztes enum = WRONG_VALUE , das korrekt initialisiert ist, nicht korrekt funktioniert.

Erinnern Sie sich an diese Regel?

Regel: Wenn einer benannten Konstante - Mitglied einer Aufzählung - nicht ausdrücklich ein bestimmter Wert zugewiesen wird, wird ihr Wert automatisch generiert. Handelt es sich um das erste Mitglied der Aufzählung, wird der Wert 0 zugewiesen. Für alle nachfolgenden Mitglieder werden die Werte auf der Grundlage des Wertes des vorherigen Mitglieds berechnet, indem ein Wert addiert wird.

Höchstwahrscheinlich wird bei der Überprüfung der Korrektheit der Abfragefelder davon ausgegangen, dass der Wert eines Aufzählungselements nicht negativ sein kann. Die Möglichkeit der Zuweisung von WRONG_VALUE an ein Aufzählungsmitglied wird nicht berücksichtigt.

 
Yedelkin:

Die Möglichkeit, einem Aufzählungselement WRONG_VALUE zuzuweisen, wird jedoch nicht berücksichtigt.

Ich denke, genau hier liegt der Fehler. Wenn eine konkrete Aufzählung nicht verwendet wird, ist es logisch, dass ihr Wert WRONG_VALUE ist und nicht z. B. ORDER_TYPE_BUY, der tatsächlich = 0 ist.

und - was am wichtigsten ist - nichts hindert Sie daran, die Logik von OrderCheck() und OrderSend() zu ändern und dabei die Kompatibilität zu wahren

 
A100: Ich denke, genau hier liegt der Fehler. Wenn keine konkrete Aufzählung verwendet wird, ist es logisch, dass ihr Wert WRONG_VALUE anstelle von ORDER_TYPE_BUY sein wird , der tatsächlich = 0 ist.

und, was am wichtigsten ist, nichts hindert Sie daran, die Logik von OrderCheck() und OrderSend() zu ändern und dabei die Kompatibilität zu wahren

Es gibt eine Möglichkeit, die Meinung der Entwickler zu verstehen - schreiben Sie dem Service Desk über den Fehler.
 

Ich habe einen seltsamen "Fehler" entdeckt.

Ich verwende diesen Code in meinem EA:

void OnTradeTransaction(const MqlTradeTransaction &trans, const MqlTradeRequest &request, const MqlTradeResult &result)
  {
   if(trans.type == TRADE_TRANSACTION_DEAL_ADD)
    {
     if(trans.symbol == "EURUSD") EURUSD_K = 1;
    }    
  }

Ein einzelner Durchlauf im Tester verläuft ohne Probleme, aber sobald ich Parameter mit vollständiger Suche auswähle, arbeitet der Tester zehn oder zehn Mal langsamer. Ich verstehe nicht, warum die Geschwindigkeit bei einem Durchlauf ausreichend ist und bei der Optimierung merklich abfällt. Sie geht geometrisch zurück. Anhand des Prozentsatzes können Sie sehen, dass am Anfang alles in Ordnung ist, aber gegen Ende wird die Geschwindigkeit immer langsamer und langsamer. Ich habe nach Problemen in meinem Code gesucht und nach Schleifen oder so etwas gesucht, aber ich habe sie nicht gefunden. Danach habe ich den oben erwähnten Code durch meinen eigenen Algorithmus ersetzt und oh mein Gott! Die Optimierung läuft jetzt mit normaler, gleichmäßiger Geschwindigkeit. Dies führt mich zu dem Schluss, dass das Problem innerhalb von MQL5 liegt, irgendwo im Körper der OnTradeTransaction-Funktion. Ich werde die Entwickler bitten, dies zu beachten.

p.s. Ich kann den Expert Advisor Code nicht posten. Versuchen Sie, den obigen Code in einem Ihrer EAs zu verwenden, und betrachten Sie die Geschwindigkeit der Optimierung im OHLC M5 für den Zeitraum von 2000 bis heute.

Документация по MQL5: Основы языка / Функции / Функции обработки событий
Документация по MQL5: Основы языка / Функции / Функции обработки событий
  • www.mql5.com
Основы языка / Функции / Функции обработки событий - Документация по MQL5
 
lordlev:

Ich habe einen seltsamen "Fehler" entdeckt.

Ich verwende diesen Code in meinem EA:

Ein einzelner Durchlauf im Tester verläuft ohne Probleme, aber sobald ich Parameter mit vollständiger Suche wähle, arbeitet der Tester zehn oder zehn Mal langsamer. Ich verstehe nicht, warum die Geschwindigkeit bei einem Durchlauf ausreichend ist und bei der Optimierung merklich abfällt. Sie geht geometrisch zurück. Anhand des Prozentsatzes können Sie sehen, dass am Anfang alles in Ordnung ist, aber gegen Ende wird die Geschwindigkeit immer langsamer und langsamer. Ich habe nach Problemen in meinem Code gesucht und nach Schleifen oder so etwas gesucht, aber ich habe sie nicht gefunden. Danach habe ich den oben erwähnten Code durch meinen eigenen Algorithmus ersetzt und oh mein Gott! Die Optimierung läuft jetzt mit normaler, gleichmäßiger Geschwindigkeit. Dies führt mich zu dem Schluss, dass das Problem innerhalb von MQL5 liegt, irgendwo im Körper der OnTradeTransaction-Funktion. Ich werde die Entwickler bitten, dies zu beachten.

p.s. Ich kann den Expert Advisor Code nicht posten. Versuchen Sie, den obigen Code in einem Ihrer EAs zu verwenden, und betrachten Sie die Geschwindigkeit der Optimierung im OHLC M5 für den Zeitraum von 2000 bis heute.

Mit verschiedenen Parametern kann der Expert Advisor für verschiedene Zeiten arbeiten
 
Konstantin83:
Bei verschiedenen Parametern kann der EA unterschiedlich lange laufen
In diesem Fall liegt das Problem nicht beim Expert Advisor oder bei den Parametern. Das Problem liegt in MQL5 selbst.
 
lordlev:

Nachdem Sie den obigen Code durch Ihren Algorithmus ersetzt haben

D.h. sie haben die Verwendung von OnTradeTransaction() aufgegeben? - dann ist es logisch, dass sich die Geschwindigkeit erhöht hat - sie wird bei jeder Gelegenheit aufgerufen
 
A100:
D.h. sie haben die Verwendung von OnTradeTransaction() aufgegeben? - dann ist es logisch, dass sich die Geschwindigkeit erhöht hat - sie wird bei jeder Gelegenheit aufgerufen
Es ist normal, dass man sich weigert, sie zu benutzen. Es ist klar, dass sie bei jeder Gelegenheit angerufen wird. Es ist nur unklar, warum die Geschwindigkeit bei einem einzelnen Durchlauf ausreichend ist, während sie bei der Optimierung plötzlich abfällt. Es hat nichts mit den Parametern selbst zu tun, wie ein anderer Freund oben schrieb, ich habe es zehnmal gründlich überprüft. Das lässt mich zu dem Schluss kommen, dass die Entwickler irgendwo einen Fehler gemacht haben.
 
lordlev:

Was hält Sie davon ab, einen minimalen Testfall durchzuführen und dem Service Desk Bericht zu erstatten?

Grund der Beschwerde: