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: 43251
Benutzer: 7.219
Aktive Benutzer: 81
Links: 84
Wir begrüßen unseren neuesten Benutzer: Hopfen&Malz
Mit 2.475 Benutzern waren die meisten Benutzer gleichzeitig online (16.01.20 um 22:38).
Neue Benutzer:
vor einem Tag
- Hopfen&Mal...
vor 2 Tagen
- frankmicha...
vor einer Woche
- DFeck
vor einer Woche
- bb1107
vor 2 Wochen
- rg-trader

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

Empfehlungen

Like Tree2Likes
  • 1 Post By Ca
  • 1 Post By traderdoc
Thema geschlossen
 
Themen-Optionen Thema durchsuchen Ansicht
  #1 (permalink)  
Alt 25.02.17
Neues Mitglied
 
Registriert seit: Feb 2017
Beiträge: 11
Drehrumbumm befindet sich auf einem aufstrebenden Ast
Standard Anfängerfrage zur While-Schleife

Ich arbeite gerade das Buch
https://book.mql4.com
durch um zu lernen.
Nun ist mir in folgendem Übungscode etwas aufgefallen:
Code:
// ------------------------------------------------ ---------------------------------------- 
  // fibonacci.mq4 
  // Der Code sollte nur für Ausbildungszwecke verwendet werden . 
  // ------------------------------------------------ ---------------------------------------- 
  Int start ()                                                          // Sonderfunktion start () 
  { 
  // ------------------------------------------------ ---------------------------------------- 
  Int i ;                                                               // Formaler Parameter, Zähler 
  double 
  A , B , C ,                                                           // Zahlen in der Sequenz 
  Delta ,                                                               // Wirklicher Unterschied zwischen Koeffizienten 
  D ;                                                                   // Voreingestellte Genauigkeit 
  // ------------------------------------------------ ---------------------------------------- 
  A = 1 ;                                                               // Ursprünglicher Wert 
  B = 1 ;                                                               // Anfangswert  
  C = 2 ;                                                               // Anfangswert 
  D = 0,0000000001 ;                                                    // Genauigkeit einstellen 
  Delta = 1000,0 ;                                                      // Anfangswert 
  // ------------------------------------------------ ---------------------------------------- 
  while ( Delta > D )                                                   // while Scheleifen Operator Header 
  {                                                                     // Eröffnungsklammer der while-Schleife 
  I ++;                                                                 // Zähler 
  A = B ;                                                               // Nächster Wert 
  B = C ;                                                               // Nächster Wert 
  C = A + B ;                                                           // Nächster Wert 
  Delta = MathAbs ( C / B - B / A ) ;                                   // Suchdifferenz zwischen Koeffizienten 
  }                                                                     // Verschlussklammer des der while schleife
  // ------------------------------------------------ ---------------------------------------- 
  Alert ( " C = " , C , " Fibonacci-Zahl = " , C / B , " i = " , i ) ;  // Anzeige auf dem Bildschirm 
  return ;                                                              // Exit start () 
  } 
  // ------------------------------------------------ ----------------------------------------
Direkt beim Start der While-Anweisung wird mit einer Variable "I" als Zähler gearbeitet.
Muss die nicht deklariert werden oder gehen wir davon aus, dass sie schon deklariert ist und das nicht Bestandteil des Übungscodes ist?
  #2 (permalink)  
Alt 25.02.17
Premium Mitglied
 
Registriert seit: Jun 2013
Beiträge: 364
Ca$hDigger befindet sich auf einem aufstrebenden Ast
Standard

Das ist sicherlich einfach ein Groß/Kleinschreib-Fehler denn oben ist der Zähler int i zu finden. Nimm in der Schleife einfach i++; statt I++;.
Und zur besseren Lesbarkeit sollte man den Code einrücken.

C$D
  #3 (permalink)  
Alt 25.02.17
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 2.733
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

@Ca$hDigger sagt es, zur besseren Lesbarkeit Code einrücken!

Benutzt hier im Editor in der Menüleiste das Zeichen # schreibt dort den Code dazwischen, rückt den Code mindestens nach jedem { ein. Es gibt zahlreiche schöne Beispiele. Wenn möglich auch Variablen in ähnlichen untereinanderstehenden Gleichungen auf gleiche Höhe schreiben, Vergleichszeichen auf gleiche Höhe und den Kommentartext weit rechts dann selbst linksbündig.

In Deinen Codebeispiel ist nicht nur das i falsch geschrieben, sondern auch die beiden Int, die eigentlich als int zu schreiben wären. Üblicherweise werden lokale Variablen wie hier innerhalb der Funktion start() klein geschrieben, globale Variablen dagegen mit einem beginnenden Großbuchstaben, zur besseren Unterscheidbarkeit.
Gelegentlich wird zur internen Kennzeichnung der Variablentyp in die Variable integriert, z.B.
int ivariable oder int i_variable bzw.
double dvariable oder d_variable

Das dient dem besseren Verständnis, da man sofort an dem ersten Buchstaben erkennt, um welchen Variablentyp es sich handelt.

Also, gewöhnt Euch von vornherein an, den Code gut strukturiert, nicht in ellenlangen Zeilen, eingerückt und mit verständlichen Variablennnamen zu schreiben. Das hilft v.a. auch denen, die sich hier auf die Fehlersuche begeben.

traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis.
  #4 (permalink)  
Alt 25.02.17
Neues Mitglied
 
Registriert seit: Feb 2017
Beiträge: 11
Drehrumbumm befindet sich auf einem aufstrebenden Ast
Standard

Sorry für das fehlende Einrücken, dass kenne ich auch so.
War aber eben die Datei aus dem darüber erwähnten Buch. Jedoch hätte ich das korrigieren sollen - mein Fehler. Copy & Paste ist halt nicht immer das Beste
Die Tips bezüglich der Groß- und Kleinschreibung sind echt wertvoll - Danke.
Obgleich der Autor des Buches diese Fehler oft wiederholt...
In der Deklaration groß geschrieben und unten dann Klein.
MQL4 ist doch Groß- und Kleinschreibungssensitiv - oder?
Ich meine das so gelesen zu haben.
Und hier noch mal der Code zum Zeichnen , dass ich verstanden haben ;-)
Code:
// -------------------------------------
  // fibonacci.mq4 
  // Der Code sollte nur für Ausbildungszwecke verwendet werden . 
  // ------------------------------------
  Int start ()                              // Sonderfunktion start () 
   { 
   // ------------------------------------
   // Formaler Parameter, Zähler 
      double 
      A , B , C ,                               // Zahlen in der Sequenz 
      Delta ,                                   // Wirklicher Unterschied zwischen Koeffizienten 
      D ;                                       // Voreingestellte Genauigkeit 
   // -------------------------------------
      A = 1 ;                                   // Ursprünglicher Wert 
      B = 1 ;                                   // Anfangswert  
      C = 2 ;                                   // Anfangswert 
      D = 0,0000000001 ;                        // Genauigkeit einstellen 
      Delta = 1000,0 ;                          // Anfangswert 
   // -------------------------------------
      while ( Delta > D )                       // while Scheleifen Operator Header 
      {                                         // Eröffnungsklammer der while-Schleife 
         I ++;                                     // Zähler 
         A = B ;                                   // Nächster Wert 
         B = C ;                                   // Nächster Wert 
         C = A + B ;                               // Nächster Wert 
         Delta = MathAbs ( C / B - B / A ) ;       // Suchdifferenz zwischen Koeffizienten 
      }                                         // Verschlussklammer des der while schleife
  // -------------------------------------
      Alert ( " C = " , C , " Fibonacci-Zahl = " , C / B , " i = " , i ) ;  // Anzeige auf dem Bildschirm 
      return ;                                                              // Exit start () 
   }
  #5 (permalink)  
Alt 25.02.17
Premium Mitglied
 
Registriert seit: Jun 2013
Beiträge: 364
Ca$hDigger befindet sich auf einem aufstrebenden Ast
Standard

Ne das passt noch nicht. Jetzt existiert die Variable int i gar nicht mehr und in der Schleife ist weiterhin das i groß was wiederum nicht zu dem kleinen i im Alert passt
Und int start ist auch immer noch groß geschrieben.

C$D
  #6 (permalink)  
Alt 25.02.17
Neues Mitglied
 
Registriert seit: Feb 2017
Beiträge: 11
Drehrumbumm befindet sich auf einem aufstrebenden Ast
Standard

Code:
//--------------------------------------------------------------------
// fibonacci.mq4

//--------------------------------------------------------------------
int start()                               
  {
//--------------------------------------------------------------------
      int i;                                 
      double
      A,B,C,                                 
      Delta,                                 
      D;                                     
//--------------------------------------------------------------------
      A=1;                                   
      B=1;                                  
      C=2;                                  
      D=0.0000000001;                       
      Delta=1000.0;                          
//--------------------------------------------------------------------
      while(Delta > D)                       
       {  
         i++;                                   
         A=B;                                
         C=A + B;                            
         Delta=MathAbs(C/B - B/A);           
       }                                    
//--------------------------------------------------------------------
   Alert("C=",C," Meldungstext=",C/B," i=",i);
   return;                                
  }
//--------------------------------------------------------------------
Jetzt sollte es passen.

Gleich die nächste Frage:

Wo bekommt den "case" hier den entsprechenden Zustand zugewiesen?
Also wie wird "case" in dem Beispiel aus dem Buch eigentlich ausgelöst?
Code:
//--------------------------------------------------------------------
// pricealert.mq4
// Code für Lernzwecke
//--------------------------------------------------------------------
int start()                                                     // Startfunktion
  {
   double Level=1.3200;                                // Voreingestelltes Preislevel
   int Delta=NormalizeDouble((Bid-Level)/Point,0); // Überschuss
   if (Delta<=0)                                            // Wenn Preis unter dem Level
     {
      Alert("Preis liegt unter dem Level");         // Nachricht
      return;                                                  // Exit start()
     }
//--------------------------------------------------------------------
      switch(Delta)                                         // Header von Switch
         {                                                        // Start der Switch- Schleife
         case 1 : Alert("Plus 1 Punkt");  break;   // Varianten...
         case 2 : Alert("Plus 2 Punkt2"); break;
         case 3 : Alert("Plus 3 Punkt2"); break;
         case 4 : Alert("Plus 4 Punkt2"); break;  //Hier werden
         case 5 : Alert("Plus 5 Punkt2"); break;  //10 Fälle vorgestellt
         case 6 : Alert("Plus 6 Punkt2"); break;  //aber es sind
         case 7 : Alert("Plus 7 Punkt2"); break;  //unbegrenzte Möglichkeiten
         case 8 : Alert("Plus 8 Punkt2"); break;  //dieser Fälle möglich
         case 9 : Alert("Plus 9 Punkt2"); break;
         case 10: Alert("Plus 10 Punkt2");break; //("Mehr als 10 Punkte"); 
         default: Alert                             
       
         }                                                        // Ende der switch - Schleife
      return;                                                  // Exit start()
  }
//--------------------------------------------------------------------

Geändert von Drehrumbumm (25.02.17 um 16:34 Uhr) Grund: Schreibfehler gemacht
  #7 (permalink)  
Alt 25.02.17
Premium Mitglied
 
Registriert seit: Jun 2013
Beiträge: 364
Ca$hDigger befindet sich auf einem aufstrebenden Ast
Standard

bei fibonacci.mq4 fehlt in der while-schleife jetzt das i++
edit: ok du hast es gerade geändert
Drehrumbumm likes this.
  #8 (permalink)  
Alt 25.02.17
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 2.733
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

Hm und welche Funktion übt nun die Variable i aus?

Case läuft über Delta in switch(Delta)

traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis.
  #9 (permalink)  
Alt 25.02.17
Neues Mitglied
 
Registriert seit: Feb 2017
Beiträge: 11
Drehrumbumm befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von traderdoc Beitrag anzeigen
Hm und welche Funktion übt nun die Variable i aus?

Case läuft über Delta in switch(Delta)

traderdoc
Da sind eigentlich alles nur Codefragmente zur Verdeutlichung der entsprechenden Funktion.

Zum Thema Case:
Heißt also, das der Wert Delta in switch (Delta)
die case-Anweisungen durchrasselt, bis eine gefunden wird, die wahr ist - richtig?
  #10 (permalink)  
Alt 25.02.17
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 2.733
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von Drehrumbumm Beitrag anzeigen
Zum Thema Case:
Heißt also, das der Wert Delta in switch (Delta)
die case-Anweisungen durchrasselt, bis eine gefunden wird, die wahr ist - richtig?
Na ja eigentlich andersherum, aber es läuft auf dasselbe hinaus.
Die Variable Delta stellt mit ihrem Wert die Größe dar, nach der die case Abfrage sucht.
Ist case 1 true, dann wir die dahinterstehende Anweisung ausgeführt, wenn nicht, dann wird weiter gesucht usw.

traderdoc
Drehrumbumm likes this.
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis.
Thema geschlossen

Lesezeichen

Stichworte
buch, buch programmierung, mql4, programmierung, programmierung metatrader, programmierung mql4, while-anweisung

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 16:13 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.
-----------------------------------------------------------------------------------------------------------------------------