Zum Inhalt springen
View in the app

A better way to browse. Learn more.

#T/N/X/T

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

UND verknüpfte Bedingungen in if-Schleife

Geschrieben

Hi @ all

 

ich habe eine if-Schleife mit 5 &&-verknüpften Bedingungen. Wird die Schleife bereits verlassen, wenn die erste Bedingung nicht erfüllt ist, oder werden die nachfolgenden Bedingungen trotzdem noch geprüft? Dann nämlich würde sich eine weitere Verschachtelung zugunsten der Performance auswirken. Andererseits lohnt es, die unwahrscheinlichste Bedingung zuerst aufzurufen?

 

Clixmaster

Featured Replies

Geschrieben

Wird die Schleife bereits verlassen, wenn die erste Bedingung nicht erfüllt ist, oder werden die nachfolgenden Bedingungen trotzdem noch geprüft?

 

Theoretisch wird die Überprüfung bei der ersten falschen verlassen. Ob MQL es im Endeffekt so handhabt kann ich dir nicht garantieren, lässt sich aber ggf. leicht nachprüfen.

Wenn es Performancetechnisch interessant wird, vermute ich das du Funktionsaufrufe in der Bedingung hast. Das würde ich ggf. aus Lesbarkeitsgründen ändern...

Geschrieben
Das ist ein logischer UND-Operator. Das heißt, alle Bedingungen müssen wahr sein, damit die Anweisungen nach der if-Bedingung ausgeführt werden. Das Programm geht normalerweise die Bedingungen der Reihe nach durch und springt nach ersten unwahren Bedingungen weiter.
Geschrieben
  • Autor

... lässt sich aber ggf. leicht nachprüfen.

 

wie denn? In PHP mit Messung der Scriptlaufzeit, aber in MQL4? Oder weiß es jemand genauer als 'theoretisch normalerweise'?

Geschrieben

wie denn? In PHP mit Messung der Scriptlaufzeit, aber in MQL4? Oder weiß es jemand genauer als 'theoretisch normalerweise'?

 

man braucht keine Zeitmessung um zu wissen ob Funktionen aufgerufen werden:

 


int foo() {
 Print("foo");
 return(1);
}

int start() {
 int a= 2;
 if(a == 3 && foo() == 1)
   Print("Never happens");
}

Geschrieben

Wird die Schleife bereits verlassen, wenn die erste Bedingung nicht erfüllt ist, oder werden die nachfolgenden Bedingungen trotzdem noch geprüft? Dann nämlich würde sich eine weitere Verschachtelung zugunsten der Performance auswirken.

 

Im Grunde wird die Schleife solange abgearbeitet, bis die erste "Abbruchbedingung" gefunden wird. Hast du also im ersten Teil der Schleife schon eine Bedingung, die zu einem Abbruch der Schleife führt, gehts nicht mehr weiter, der Compiler springt aus der Schleife raus und macht mit dem Rest weiter.

Ich weiß ja nicht worum genau es geht, aber ich würde dir empfehlen mal mit dem '!' zu arbeiten. (Also "nicht", oder "ungleich")

if (a != b)
       //mach weiter bis a = b

Oder du baust else if-Schleifen ein.

 

Andererseits lohnt es, die unwahrscheinlichste Bedingung zuerst aufzurufen?

 

Woher willst du vorher wissen, was die unwahrschenlichste Bedingung ist? Wenn du das wüsstest, bräuchtest du wohl keine Schleife mehr, oder? ;)

 

Ich hoffe ich kann helfen

Bearbeitet von Buddahbrot

Geschrieben

Woher willst du vorher wissen, was die unwahrschenlichste Bedingung ist? Wenn du das wüsstest, bräuchtest du wohl keine Schleife mehr, oder? ;)

 

Das kann ich mir schon gut vorstellen. zB: ich will am ersten Tick eines Bars überprüfen ob Einstiegsignal oder nicht. Wenn jetzt isEntrySignal() berechnet ob ein Einstiegssignal da ist und isNewBar() mir sagt ob das der erste Tick ist, ist die Frage was häufiger passiert.

 

Ticks pro Bar hab ich je nach TimeFrame ein paar hundert/tausend. Einen Einstieg vielleicht jeden 10. Bar. Dann hab ich pro Tick 1/1000 (wenn 1000 Ticks pro Bar) Wahrscheinlichkeit das erster Tick, und 1/10 das Entrysignal (wenn Entrysignal den gesamten Bar hindurch ist).

isNewBar() ist also deutlich unwahrscheinlicher und bringt somit einen Performancevorsprung, benötigt aber dennoch die Abfrage. Wenn es aber einen solchen Unterschied macht, würde ich isEntrySignal() in eine zweite if packen um im Code diese Tatsache (isEntrySignal() wird nur am ersten Tick ausgeführt) deutlich zu machen.

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

Account

Navigation

Suche

Suche

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.