![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
Helfen Sie mir hier aus
Multithreading versuchen, aber Terminal stürzt ab
Ich habe eine C++ dll geschrieben.
Hier ist der Code
Und das Drehbuch
Wenn Sie den Code der Dll wie folgt ändern
Ich habe die Zahl 10 auf dem Bildschirm an der Stelle des Kommentars (sollte es sein) und dann bekomme ich msgbox und 2 Tasten
Das Terminal stürzt erst ab, wenn ich eine der Tasten drücke.
Sobald ich die Taste drücke, erscheint die Meldung, die erklärt, warum der Absturz aufgetreten ist und wie man ihn beheben kann...
Meine Herren, hat irgendjemand Multi-Währung im Modus der Visualisierung des Eröffnungskurses mit Bezug auf andere TFs betrieben?
Hier ist das Tagesdiagramm:
Das Terminal stürzt erst ab, wenn ich mindestens eine der Tasten drücke.
Sobald ich die Taste drücke, erscheint eine Meldung über die Suche nach der Absturzursache und wie man sie beheben kann...
Bitte beachten Sie, dass das MQL5-Skript nach Abschluss von OnStart automatisch entladen wird, einschließlich Ihrer DLL.
Das heißt, Sie haben einen Thread mit einem modalen Fenster erstellt, das im Speicher hängt, und der Hocker wurde unter ihm weggekickt. Nach dem Schließen des modalen Fensters kehrt es ins Leere zurück.
In Ihrem Fall müssen Sie ausdrücklich warten, bis alle DLL-Threads auf normale und garantierte Weise beendet sind, bevor Sie das MQL5-Skript beenden.
Beachten Sie, dass das MQL5-Skript nach Abschluss von OnStart automatisch entladen wird, einschließlich Ihrer DLL.
Das heißt, es gibt einen Thread mit einem modalen Fenster, das im Speicher hängt und unter dem der Hocker weggekickt wurde. Nachdem das modale Fenster geschlossen wurde, kehrt es ins Leere zurück.
In Ihrem Fall müssen Sie vor der Beendigung des MQL5-Skripts explizit warten, bis alle DLL-Threads normal und garantiert beendet sind.
Wenn es in einer Reihe von Geschäften keinen einzigen Verlust gibt, nehmen der GEWINNFAKTOR und der ANTEILSVERHÄLTNIS einige unrealistische/extreme Werte an. Ist das ein Fehler oder sollten solche Momente berücksichtigt und irgendwie verarbeitet werden? Wie macht man es richtig?
EMPTY_VALUE (wie DBL_MAX)
Natürlich können Sie einige nicht definierte Nan anwenden, aber dann können Sie keine Vergleiche anstellen.
EMPTY_VALUE (wie DBL_MAX)
Sie können natürlich einige undefinierte nan verwenden, aber dann können Sie keine Vergleiche anstellen.
Wenn es in einer Reihe von Geschäften keinen Verlust gibt, nehmen die Werte von PROFIT FACTOR und SHARPE RATIO einige unrealistische/extreme Werte an. Ist das ein Fehler oder sollten solche Momente berücksichtigt und irgendwie verarbeitet werden? Wie macht man es richtig?
Offensichtlich liegt hier ein Fehler vor, denn der Gewinnfaktor sollte nicht mit negativen Werten berechnet werden, so wie in diesem Fall mit dem Fehlen von negativen Trades.
Wenn wir einfach die Formel global nehmen (Bruttogewinn/Bruttoverlust), dann erhalten wir in Abwesenheit von negativen Geschäften eine Division durch Null, und wenn der Bruttoverlust höher ist, erhalten wir eine Zahl kleiner als 1, was für die weitere Analyse auch nicht korrekt ist, weil der Unterschied zwischen zwei positiven Gewinnfaktoren um ein Vielfaches größer ist als der Unterschied zwischen zwei konventionell negativen.
Offensichtlich liegt ein Fehler vor, da der Gewinnfaktor nicht mit negativen Werten berechnet werden sollte, und wie in diesem Fall mit keinen negativen Trades.
Es wurde bereits zwei Beiträge weiter oben gesagt, dass dies kein Fehler ist, sondern ein Zeichen dafür, dass es unmöglich ist, diesen Indikator zu berechnen.
Obwohl Sie einen Trick anwenden können, fügen Sie bei jeder Berechnung 1 Cent sowohl zum Bruttoporofit als auch zum Bruttoverlust hinzu.
Dann würde die Vorwärtsformel lauten ((Bruttoporofit+0,01)/(Bruttoverlust+0,01))
Die Formel zur Berechnung des reziproken Wertes (wenn der Bruttoverlust größer ist)
Zu tun -((Bruttoverlust+0,01)/(Bruttoporofit+0,01))
Nun, es ist klar, dass Bruttoverlust und Bruttoporofit Module sind.
Dann ist die Linie auf beiden Seiten symmetrisch, was gut für GA ist, und es gibt überhaupt keine unberechenbaren Situationen.
Aber es wird wahrscheinlich nicht für Sie nützlich sein, sondern für die Leute, die ihre eigenen Optimierungskriterien schreiben.