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: 4973
Beiträge: 43248
Benutzer: 7.220
Aktive Benutzer: 82
Links: 84
Wir begrüßen unseren neuesten Benutzer: JosephTK
Mit 2.475 Benutzern waren die meisten Benutzer gleichzeitig online (16.01.20 um 22:38).
Neue Benutzer:
vor 2 Stunden
- JosephTK
vor 2 Tagen
- Hopfen&Mal...
vor 2 Tagen
- frankmicha...
vor einer Woche
- DFeck
vor einer Woche
- bb1107

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

Empfehlungen

Thema geschlossen
 
Themen-Optionen Thema durchsuchen Ansicht
  #1 (permalink)  
Alt 31.01.19
Mitglied
 
Registriert seit: Sep 2018
Beiträge: 238
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)
  #2 (permalink)  
Alt 31.01.19
Elite Mitglied
 
Registriert seit: Sep 2015
Beiträge: 1.178
MA-EA befindet sich auf einem aufstrebenden Ast
Standard

Ja, in dem man für jede Bedingung nen bool in einer Zeile schreibt.
  #3 (permalink)  
Alt 31.01.19
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 2.733
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.
  #4 (permalink)  
Alt 31.01.19
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...
  #5 (permalink)  
Alt 31.01.19
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 2.733
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.
  #6 (permalink)  
Alt 01.02.19
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...
  #7 (permalink)  
Alt 01.02.19
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 2.733
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.
  #8 (permalink)  
Alt 01.02.19
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...
  #9 (permalink)  
Alt 01.02.19
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 2.733
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.
  #10 (permalink)  
Alt 02.02.19
Benutzerbild von Indexreiter
Neues Mitglied
 
Registriert seit: Feb 2016
Beiträge: 27
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.
Thema geschlossen

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 +1. Es ist jetzt 00:59 Uhr.





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