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
Das macht keinen Unterschied, denke ich. Ich könnte auch schreiben IF( StringHighStatus == "True" || SwingHighShift > SwingBarcount ) EndCycle = TRUE;
Der Punkt ist, warum das IF die Exit-Bedingung erkennt und dann das WHILE auf die bool-Variable reagiert, während es nicht endet, wenn ich die gleiche Bedingung in das WHILE einfüge?
Das macht keinen Unterschied, denke ich. Ich könnte auch schreiben IF( StringHighStatus == "True" || SwingHighShift > SwingBarcount ) EndCycle = TRUE;
Der Punkt ist, warum das IF die Exit-Bedingung erkennt und dann das WHILE auf die bool-Variable reagiert, während es nicht endet, wenn ich die gleiche Bedingung in das WHILE einfüge?
Sieht für mich so aus
als
deVries, vielleicht liege ich falsch, aber ich denke, dass eine Folge von IF den Booleschen Wert auf TRUE setzt, wie es ein logisches OR tut.
Wenn die erste Bedingung erfüllt ist, wird EndCycle TRUE, wenn die zweite nicht erfüllt ist, bleibt es TRUE.
Umgekehrt wird es TRUE, wenn die erste Bedingung nicht erfüllt ist, die zweite aber schon.
Zu diesem Zeitpunkt erkennt das WHILE die Exit-Bedingung.
Zwei IFs in Folge verhalten sich also wie ein logisches OR und dasselbe gilt für eine IF...ELSE IF-Sequenz.
Und es muss ein ODER sein, es kann kein UND sein, sonst kann das WHILE stecken bleiben (die Bedingung auf der Zeichenkette kann unendlich oft falsch sein).
Warum verwaltet das WHILE eine einzelne boolesche Variable, deren Wert innerhalb des Zyklus gesetzt wird, während es das Ergebnis der gleichen logischen ODER-Operation innerhalb seiner Bedingungsdefinition nicht bestimmen kann?
Dieser EA wurde in der Vergangenheit von vielen Leuten benutzt, vor Build 600 und auch vor 500, und dies ist die letzte Version. Keiner hat sich beschwert.
Meine Frage lautet also: Gibt es jemanden, der nach Build 600 Probleme mit dem WHILE-Operator hat?
deVries, vielleicht liege ich falsch, aber ich denke, dass eine Folge von IF den Booleschen Wert auf TRUE setzt, wie es ein logisches OR tut.
Wenn die erste Bedingung erfüllt ist, wird EndCycle TRUE, wenn die zweite nicht erfüllt ist, bleibt es TRUE.
Umgekehrt wird es TRUE, wenn die erste Bedingung nicht erfüllt ist, die zweite aber schon.
Zu diesem Zeitpunkt erkennt das WHILE die Exit-Bedingung.
Zwei IFs in Folge verhalten sich also wie ein logisches OR und dasselbe gilt für eine IF...ELSE IF-Sequenz.
Und es muss ein ODER sein, es kann kein UND sein, sonst kann das WHILE stecken bleiben (die Bedingung auf der Zeichenkette kann unendlich oft falsch sein).
Warum verwaltet das WHILE eine einzelne boolesche Variable, deren Wert innerhalb des Zyklus gesetzt wird, während es das Ergebnis der gleichen logischen ODER-Operation innerhalb seiner Bedingungsdefinition nicht bestimmen kann?
Dieser EA wurde in der Vergangenheit von vielen Leuten benutzt, vor Build 600 und auch vor 500, und dies ist die letzte Version. Keiner hat sich beschwert.
Meine Frage lautet also: Gibt es jemanden, der nach Build 600 Probleme mit dem WHILE-Operator hat?
Ich denke, dass Sie sich auf Folgendes beziehen
Ihr Code, wenn er genau so wäre, wie Sie ihn gepostet haben, hätte mit keinem Build das gemacht, was Sie erwarten, also müssen Sie etwas geändert haben
Haben Sie jemals versucht, eine sehr grundlegende , während Logik Operationen nur zu bestätigen, es funktioniert wie es sollte oder nicht, anstatt zu fragen?
Mein Beitrag begann mit einem Beispiel für ein WHILE, das mir ein ungewöhnliches Verhalten zu zeigen schien, das dem des Teils des EA, über den wir jetzt diskutieren, sehr ähnlich war, also habe ich erst probiert und dann gefragt.
Meine Interpretation dieser sehr einfachen Fehlersuche erwies sich als falsch, sodass sich die Diskussion auf den EA selbst verlagerte.
Danke GumRai für deine Geduld.
Vielleicht liege ich falsch und habe einen Dickschädel, aber ich kann die Logik nicht verstehen...
Wenn das erste IF, wie du vorschlägst, die Zeichenkette auf "true" setzt, z.B. bei SwinghHighShift=10, dann steigt der Zähler in diesem Zyklus nicht an; danach kehrt die Steuerung zum WHILE zurück: der Zyklus sollte an diesem Punkt enden, weil das WHILE ein logisches OR enthält und eine seiner Bedingungen erfüllt ist.
Umgekehrt, wenn die Variable falsch bleibt, sollte der Zähler seinen Maximalwert erreichen und Sie haben wieder die Exit-Bedingung.
Ich denke, dass Ihre Überlegung auch mit einem AND-Operator zutreffen würde.
Ihrer Interpretation folgend könnte ich das ODER innerhalb des WHILE weglassen; ich könnte einfach die erste WENN-Bedingung auf die Zeichenkette anwenden: wenn sie "wahr" wird, dann wird der Break das WHILE beenden, andernfalls würde der Zähler weiterlaufen bis zu seinem Maximum.
Der Code wird dann zu:
Aber das ist immer noch ein Workaround und erklärt (für mich) leider nicht, warum das WHILE sich nicht um das OR kümmert.
Wenn das erste IF, wie Sie vorschlagen, die Zeichenkette auf "true" setzt, z. B. bei SwinghHighShift=10, dann wird der Zähler in diesem Zyklus nicht erhöht; danach kehrt die Steuerung zum WHILE zurück: Der Zyklus sollte an diesem Punkt enden, weil das WHILE ein logisches ODER enthält und eine seiner Bedingungen erfüllt ist.