Danke Nicholi für den schlankeren Code. Nach einigen Experimenten habe ich festgestellt, dass die Deklaration von ask_diff als Float zwar Differenzen mit der richtigen Anzahl von Ziffern erzeugt, aber einen Kompilierfehler über mögliche Datenverluste durch die Typkonvertierung. Es sieht so aus, als müsste ich mich entscheiden zwischen sehr kleinen Ungenauigkeiten in meinen Differenzen oder einer Kompilierwarnung. Letzteres wäre für Handelsentscheidungen besser, aber hat noch jemand eine Lösung, um höchstens fünf Dezimalstellen in ask_diff zu erhalten?
rdone: Danke Nicholi für diesen schlankeren Code. Nach einigen Experimenten stellte ich fest, dass die Deklaration von ask_diff als float zwar Differenzen mit der korrekten Anzahl von Ziffern erzeugte, aber einen Kompilierfehler über möglichen Datenverlust durch die Typkonvertierung. Es sieht so aus, als müsste ich mich entscheiden zwischen sehr kleinen Ungenauigkeiten in meinen Differenzen oder einer Kompilierwarnung. Letzteres wäre für Handelsentscheidungen besser, aber hat noch jemand eine Lösung, um höchstens fünf Dezimalstellen in ask_diff zu erhalten?
Ihr ask_diff sollte vom Typ int sein und stattdessen wie folgt aussehen.
int diff = int(round((current.ask - last.ask) / _Point));
rdone: Ich habe gerade NormalizeDouble und DoubleToString entdeckt. Hey, das ist mein erster Tag hier...
Mein Ziel ist es, die Differenz zwischen dem aktuellen Ask und dem vorherigen Ask zu ermitteln (Teil 1) und dann eine laufende Summe dieser Differenzen zu erhalten (Teil 2). Teil 1 funktioniert, aber Teil 2 gibt nur den vorherigen Ask-Betrag zurück. Kann mir jemand sagen, was ich falsch mache, und mir eine Kurskorrektur geben?
Wie so oft hat der Code das getan, was er tun sollte, und nicht das, was ich wollte. Die Logik erfordert, dass tick_prev immer ausgefüllt wird, aber beim ersten Tick ist das nicht der Fall. Ich bin an einer Logik interessiert, die nicht erfordert, dass tick_prev beim ersten Tick ausgefüllt wird, aber ansonsten funktioniert dies.
rdone: Wie so oft hat der Code das getan, was er tun sollte, und nicht das, was ich wollte. Die Logik erfordert, dass tick_prev immer ausgefüllt wird, aber beim ersten Tick ist das nicht der Fall. Ich bin an einer Logik interessiert, die nicht verlangt, dass tick_prev beim ersten Tick ausgefüllt wird, aber ansonsten funktioniert sie.
rdone: Wie so oft hat der Code das getan, was er tun sollte, und nicht das, was ich wollte. Die Logik erfordert, dass tick_prev immer ausgefüllt wird, aber beim ersten Tick ist das nicht der Fall. Ich bin an einer Logik interessiert, die nicht erfordert, dass tick_prev beim ersten Tick ausgefüllt wird, aber ansonsten funktioniert dies.
rdone: Das ist ein Niveau der Codierung, das ich zu erreichen strebe. Vielen Dank, Ernst!
Sie wollen die Punktedifferenz nicht als Double speichern, da Doubles selten gleich sind. Sie wollen sie als ganzzahligen Wert speichern. Zum Beispiel (1,00001 - 1,00000) / 0,00001 = 1 Punkt. Wenn Sie also nur zwei Ticks vergleichen, können Sie Ihren Code kompakter gestalten, indem Sie einfach die Unterklasse MqlTick bilden und ein int-Attribut für den Punktunterschied hinzufügen.
Wenn Sie kein Benutzerkonto haben, registrieren Sie sich
Erlauben Sie die Verwendung von Cookies, um sich auf der Website MQL5.com anzumelden.
Bitte aktivieren Sie die notwendige Einstellung in Ihrem Browser, da Sie sich sonst nicht einloggen können.
Sie sind angemeldet. Die Zwei-Faktor-Authentifizierung wurde deaktiviert. Richten Sie sie erneut ein und scannen Sie einen neuen QR-Code oder fahren Sie mit deaktivierter Zwei-Faktor-Authentifizierung fort.
Danke Nicholi für diesen schlankeren Code. Nach einigen Experimenten stellte ich fest, dass die Deklaration von ask_diff als float zwar Differenzen mit der korrekten Anzahl von Ziffern erzeugte, aber einen Kompilierfehler über möglichen Datenverlust durch die Typkonvertierung. Es sieht so aus, als müsste ich mich entscheiden zwischen sehr kleinen Ungenauigkeiten in meinen Differenzen oder einer Kompilierwarnung. Letzteres wäre für Handelsentscheidungen besser, aber hat noch jemand eine Lösung, um höchstens fünf Dezimalstellen in ask_diff zu erhalten?
Ihr ask_diff sollte vom Typ int sein und stattdessen wie folgt aussehen.
Ich habe gerade NormalizeDouble und DoubleToString entdeckt. Hey, das ist mein erster Tag hier...
Wie so oft hat der Code das getan, was er tun sollte, und nicht das, was ich wollte. Die Logik erfordert, dass tick_prev immer ausgefüllt wird, aber beim ersten Tick ist das nicht der Fall. Ich bin an einer Logik interessiert, die nicht verlangt, dass tick_prev beim ersten Tick ausgefüllt wird, aber ansonsten funktioniert sie.
Wie so oft hat der Code das getan, was er tun sollte, und nicht das, was ich wollte. Die Logik erfordert, dass tick_prev immer ausgefüllt wird, aber beim ersten Tick ist das nicht der Fall. Ich bin an einer Logik interessiert, die nicht erfordert, dass tick_prev beim ersten Tick ausgefüllt wird, aber ansonsten funktioniert dies.
Das ist ein Niveau der Codierung, das ich zu erreichen strebe. Vielen Dank, Ernst!
Sie wollen die Punktedifferenz nicht als Double speichern, da Doubles selten gleich sind. Sie wollen sie als ganzzahligen Wert speichern. Zum Beispiel (1,00001 - 1,00000) / 0,00001 = 1 Punkt. Wenn Sie also nur zwei Ticks vergleichen, können Sie Ihren Code kompakter gestalten, indem Sie einfach die Unterklasse MqlTick bilden und ein int-Attribut für den Punktunterschied hinzufügen.