Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools  
Zurück   Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools > Metatrader 4 > Programmierung MQL4

Programmierung MQL4 Hier gehts rund ums Programmieren in MQL4.

Login
Benutzername:
Kennwort:


Statistik
Themen: 4155
Beiträge: 38924
Benutzer: 6.442
Aktive Benutzer: 224
Links: 80
Wir begrüßen unseren neuesten Benutzer: devIXX
Mit 483 Benutzern waren die meisten Benutzer gleichzeitig online (21.04.16 um 18:12).
Neue Benutzer:
vor 2 Tagen
- devIXX
vor 3 Tagen
- sevdarko
vor 4 Tagen
- Mart
vor einer Woche
- mfleck12
vor einer Woche
- sviter-pro

Onlineuser
'Wer ist online' anzeigen Benutzer: 0
Gäste: 79
Gesamt: 79
Team: 0
Team:  
Benutzer:  
Freunde anzeigen

Empfehlungen

Antwort
 
Themen-Optionen Thema durchsuchen Ansicht
  #1 (permalink)  
Alt vor 3 Wochen
Mitglied
 
Registriert seit: Sep 2018
Beiträge: 58
Max2018 befindet sich auf einem aufstrebenden Ast
Standard Oder Abfrage eleganter lösen

Hallo,

mal was fürs Auge und einen schlankeren und übersichtlicheren Code...

Kann man eine lange Kette an "oder" Abfragen "||" wie diese übersichtlicher und in mehreren Zeilen schreiben?

Code:
if (Hour()==8&&Minute()>58&&OpenAbstandAN==false||Open[0]>Open[OpenAbstand]&&OpenAbstandAN==true||Bid>iMA(NULL,0,MAPeriode,0,MODE_SMA,PRICE_CLOSE,1)&&MovingAvarageControl==true||HandelszeitAN==true&&Hour()<StartStunde||HandelszeitAN==true&&Hour()>EndStunde)
Mit Zitat antworten
  #2 (permalink)  
Alt vor 3 Wochen
Elite Mitglied
 
Registriert seit: Sep 2015
Beiträge: 730
MA-EA befindet sich auf einem aufstrebenden Ast
Standard

Ja, in dem man für jede Bedingung nen bool in einer Zeile schreibt.
Mit Zitat antworten
  #3 (permalink)  
Alt vor 3 Wochen
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 2.165
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

Code:
if (Hour()==8&&Minute()>58&&OpenAbstandAN==false||Open[0]>Open[OpenAbstand]) {
   if (OpenAbstandAN==true||Bid>iMA(NULL,0,MAPeriode,0,MODE_SMA,PRICE_CLOSE,1)) {
      if (MovingAvarageControl==true||HandelszeitAN==true) {
         if (Hour()<StartStunde||HandelszeitAN==true) {
            if (Hour()>EndStunde) {
               //...
            }
         }
      }
   }
}
traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis.
Mit Zitat antworten
  #4 (permalink)  
Alt vor 3 Wochen
Mitglied
 
Registriert seit: Nov 2015
Beiträge: 136
Adlerauge befindet sich auf einem aufstrebenden Ast
Standard

...wenn man jetzt noch die jeweils zusammengehörenden auf- und zugehenden Schweifklammern bündig untereinander schreibt, wird es noch übersichtlicher...
Mit Zitat antworten
  #5 (permalink)  
Alt vor 3 Wochen
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 2.165
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von Adlerauge Beitrag anzeigen
...wenn man jetzt noch die jeweils zusammengehörenden auf- und zugehenden Schweifklammern bündig untereinander schreibt, wird es noch übersichtlicher...
Warum?
Das ist platzsparender und bleibt zusätzlich übersichtlich.
Die Bündigkeit ist mit der zugehenden Schweifklammer gegeben.

Das Einzige, was ich sonst noch bzgl. der Übersichtlichkeit mache, ist die Operationszeichen mit einer Freistelle versehen, also so:

Code:
if (Hour() == 8 && Minute() > 58 && OpenAbstandAN == false || Open[0] > Open[OpenAbstand]) {
   if (OpenAbstandAN == true || Bid > iMA(NULL, 0, MAPeriode, 0, MODE_SMA, PRICE_CLOSE, 1)) {
      if (MovingAvarageControl == true || HandelszeitAN == true) {
         if (Hour() < StartStunde || HandelszeitAN == true) {
            if (Hour() > EndStunde) {
               //...
            }
         }
      }
   }
}
So, jetzt könnte man noch die überflüssigen true und false weglassen:

Code:
if (Hour() == 8 && Minute() > 58 && !OpenAbstandAN || Open[0] > Open[OpenAbstand]) {
   if (OpenAbstandAN || Bid > iMA(NULL, 0, MAPeriode, 0, MODE_SMA, PRICE_CLOSE, 1)) {
      if (MovingAvarageControl || HandelszeitAN) {
         if (Hour() < StartStunde || HandelszeitAN) {
            if (Hour() > EndStunde) {
               //...
            }
         }
      }
   }
}
So, nun sieht der Code so übersichtlich und schön aus, dass ihn MicroSoft auch nicht besser hätte schreiben können.

traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis.
Mit Zitat antworten
  #6 (permalink)  
Alt vor 2 Wochen
Mitglied
 
Registriert seit: Nov 2015
Beiträge: 136
Adlerauge befindet sich auf einem aufstrebenden Ast
Standard

Ich habe vor längerem an einem Programmier-Kurs teilgenommen. Der Kursleiter benutzte auch die Schreibweise der aufgehenden Schweifklammern am Ende der Zeilen. Das hatte zur Folge, dass ständig diverse Kursteilnehmer damit beschäftigt waren, Schweifklammern zu suchen und zu zählen. Das Problem hatten alle. Ca. 10% der gesamten Zeit ging dafür verloren. Letztendlich ist es natürlich Geschmackssache, aber für die Mehrheit ist diese Schreibweise keine gute Idee.
Ich würde den Code so schreiben:
PHP-Code:
if (Hour() == && Minute() > 58 && !OpenAbstandAN || Open[0] > Open[OpenAbstand])
 { if (
OpenAbstandAN || Bid iMA(NULL0MAPeriode0MODE_SMAPRICE_CLOSE1))
    { if (
MovingAvarageControl || HandelszeitAN)
       { if (
Hour() < StartStunde || HandelszeitAN)
          { if (
Hour() > EndStunde)
             {   
//...
 
}  }  }  }  } 
Das ist am Übersichtlichsten und auch am Platzsparensten...
Mit Zitat antworten
  #7 (permalink)  
Alt vor 2 Wochen
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 2.165
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

Dann mögen die geschweiften Klammern mit Dir sein.
Warum wohl der Kursleiter die aufgehende Klammer an das Ende der Zeile geschrieben hat...?
Und wenn man sich angewöhnt sofort ein Klammerpaar zu setzen, dann braucht man auch nix zählen.

traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis.
Mit Zitat antworten
  #8 (permalink)  
Alt vor 2 Wochen
Mitglied
 
Registriert seit: Nov 2015
Beiträge: 136
Adlerauge befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von traderdoc Beitrag anzeigen
Und wenn man sich angewöhnt sofort ein Klammerpaar zu setzen, dann braucht man auch nix zählen.
Ja, das stimmt, aber dann könntest Du ja die zugehenden Schweifklammern auch alle hintereinander ans Zeilenende schreiben, um Platz zu sparen. Mit Deinem Argument könntest Du auch den gesamten Code in einem hintereinander wegschreiben, ohne jeglichen Zeilenumbruch...

Aber wer was als Übersichtlich empfindet ist subjektiv verschieden...
Mit Zitat antworten
  #9 (permalink)  
Alt vor 2 Wochen
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 2.165
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

Ne, lass mal jetzt, das geht alles in die falsche Richtung. Keiner hat was von 'alles in eine Zeile schreiben' geschrieben. Ich denke, dass mein Codebeispiel auch nicht im Geringsten danach aussieht. Lesbarkeit hat auch was mit Symmetrie und Optik zu tun.
Und ich denke, dass @Max2018 jetzt genug Code gesehen hat.

traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis.
Mit Zitat antworten
  #10 (permalink)  
Alt vor 2 Wochen
Benutzerbild von Indexreiter
Neues Mitglied
 
Registriert seit: Feb 2016
Beiträge: 22
Indexreiter befindet sich auf einem aufstrebenden Ast
Standard

Programmierer haben eben auch ihre Weltanschauung. Für mich ist Übersichtlichkeit immer wichtiger als Zeilenersparnis. Deshalb setze ich auch immer die öffnende Klammer genau unter das i vom if.
Solche und/oder-Monster vermeide ich wenn es geht. Geht es aber nicht, so würde ich dieses Beispiel der Übersicht halber so codieren:

PHP-Code:
   
   
if (Hour() == 8  &&  Minute() >58  &&  !OpenAbstandAN
      
|| Open[0] > Open[OpenAbstand]  &&  OpenAbstandAN
      
|| Bid iMA(NULL0MAPeriode0MODE_SMAPRICE_CLOSE1)  &&  MovingAvarageControl
      
|| HandelszeitAN  &&  Hour() < StartStunde
      
|| HandelszeitAN  &&  Hour() > EndStunde)
   {
      
//...
   

Mir erscheint das übersichtlicher und pflegeleichter, da Zufügen oder Herausnehmen einer Bedingung nur immer eine Code-Zeile betreffen.

@Adlerauge - Auf die Idee, alle schließenden Klammern in eine Zeile zu setzen, bin ich auch noch nicht gekommen. Aber ich meide auch 5-stöckige if-Abfragen.
__________________
Je genauer du planst, umso härter trifft dich der Zufall.
Mit Zitat antworten
Antwort

Lesezeichen


Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are aus
Pingbacks are aus
Refbacks are aus




Alle Zeitangaben in WEZ +2. Es ist jetzt 01:53 Uhr.


Der Wavesnode - Spam Firewall
-----------------------------------------------------------------------------------------------------------------------------
Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.
Powered by vBCMS® 2.7.0 ©2002 - 2019 vbdesigns.de
SEO by vBSEO 3.6.1
Copyright ©2009 - 2017 by Expert-Advisor.com - Das Metatrader Forum
MetaTrader bzw. MetaTrader 4 und MetaTrader 5 sind eingetragene Marken der MetaQuotes Software Corp.
-----------------------------------------------------------------------------------------------------------------------------