English Русский 中文 Español 日本語 Português 한국어 Français Italiano Türkçe
Besser Programmieren (Teil 01): Diese 5 Dinge müssen Sie unterlassen, um ein erfolgreicher MQL5-Programmierer zu werden

Besser Programmieren (Teil 01): Diese 5 Dinge müssen Sie unterlassen, um ein erfolgreicher MQL5-Programmierer zu werden

MetaTrader 5Beispiele | 2 August 2021, 08:57
1 030 0
Omega J Msigwa
Omega J Msigwa

Einführung

"Der Verstand des Menschen, der einmal durch eine neue Idee erweitert wurde, erreicht nie wieder seine ursprüngliche Größe."
— Oliver Wendell Holmes

Um besser zu programmieren, muss man nicht nur 24/7 Code lernen, sondern auch die besten Praktiken kennenlernen, und vielleicht muss man sogar lernen, wie man überhaupt programmieren lernt. Zu lernen, wie man Code erlernt, und die besten Praktiken anzuwenden, ist für jeden, der eine erfolgreiche Karriere als Programmierer anstrebt, sehr wichtig. Indem wir das Wie und Warum kennen, werden wir uns dessen bewusst, was wir tun — das erhöht unsere Erinnerungsfähigkeit und hilft uns, unseren Code im Allgemeinen zu verbessern.

Die folgenden Wege sind die bewährten Methoden, die Ihre Programmiererfahrung und die Art und Weise, wie Sie programmieren, fast über Nacht verändern können, wenn Sie alles, was Sie in diesem Artikel lesen werden, aufmerksam anwenden.


01: Schluss mit den Gewohnheiten des blinden Kopierens und Einfügens

"Das edelste Vergnügen ist die Freude des Verstehens" Leonardo Da Vinci

Dies ist die verbreitetste Angewohnheit von Anfängern und manchmal tun dies sogar erfahrene Programmierer. Ich erinnere mich, als ich 2019 mit dem Programmieren anfing, war ich die meiste Zeit im Forum auf der Suche nach dem"Code, der funktioniert". Ich habe nicht viel darauf geachtet, was erklärt wurde, wenn ich eine Suche zu einem bestimmten Thema durchgeführt habe; alles, was ich gesucht habe, war dieser Kommentar, wenn jemand geantwortet hat, wie "Danke, jetzt funktioniert es" oder irgendein anderer Kommentar, von dem die Leute gesagt haben, dass er hilfreich war (vor allem die Person, die die Frage zuerst im Forum gestellt hat)... Ich brauche nicht zu erzählen, was ich getan habe, als ich das Stück Code gefunden habe, das funktioniert!!!

Es ist mir jetzt peinlich, wenn ich feststelle, dass ich einmal erklärt habe, dass das Standard Library Chart nicht funktioniert.

  


Jetzt weiß ich, was damals nicht funktionierte — ich war es, denn sogar der Code selbst wurde von irgendwoher kopiert, an den ich mich nicht mehr erinnere. Was ich damit sagen will, ist Folgendes:

Stellen Sie sicher, dass Sie verstehen, was Sie tun. Kopieren Sie nicht blindlings Code aus dem Forum, nur um etwas zu erledigen und schnell etwas zu reparieren.

Meistens ist die Art und Weise, wie viele erfahrene Entwickler im Forum antworten, für Leute mit dieser Angewohnheit schwer nachzuvollziehen, weil sie nur mit einem Link zur MQL5-Dokumentation zu einem bestimmten Thema antworten, ganz zu schweigen von den automatischen Funktionen auf dieser Website, die verwandte Links zu einem bestimmten Problem anbieten. Der Grund dafür ist, dass die meisten Probleme dadurch verursacht werden, dass man die Grundlagen und Basics nicht versteht.

IMMER: Suchen Sie nach Verstehen, nicht nach einer Lösung!

Sobald Sie die Grundlagen verstehen, wird das Programmieren natürlich und automatisch.

Gewohnheiten des Kopierens und Einfügens schaden nicht nur Ihrem Ruf, sondern verursachen auch mehr Probleme, als sie zu lösen.

02: Geben Sie das Hacken von Problemen auf

Bevor Sie ein Problem in Ihrem Code beheben wollen, sollten Sie herausfinden, warum das Problem besteht. Wenn Sie dies wissen, können Sie im Forum bessere Fragen stellen, anstatt Ihren Code zu kopieren und auf einen Code zu warten, der das Problem behebt, das dadurch verursacht wurde, dass Sie nicht genau wissen, was und warum Ihr Code etwas macht. Zum Beispiel von meinem Code im Bild oben: zunächst habe ich den Code irgendwo anders kopiert, in der Hoffnung, die Chart-Vorlage dadurch zu ändern, ohne die Standardbibliothek Chart vollständig zu kennen und zu verstehen — deshalb habe ich am Ende gesagt, dass die Bibliothek nicht funktioniert.

Wenn Sie über ein Problem oder einen Fehler stolpern, stellen Sie sicher, dass Sie die Bibliothek und den Code, der nicht funktioniert, genau kennen. Es gibt mehrere Möglichkeiten, dies bei MQL5 zu tun, die beiden wichtigsten sind:

  • MQL5-Dokumentation
  • Forum

MQL5-Dokumentation:

Zum Glück haben wir die gesamte Dokumentation zur Hand und müssen nicht erst in Suchmaschinen suchen. Professionelle Programmierer wissen das, aber für Neulinge hier ist, wo und wie man sehr schnell darauf zugreifen kann: Öffnen Sie MetaEditor, gehen Sie dann in den Hilfe Abschnitt und klicken Sie auf die Dropdown-Option MQl5 Reference und schon sind Sie da.

Dokumentationszugang

MQL5 Forum:

Dies ist der beste Ort, um zu lernen und zu hören, was Sie nicht durch Ihren eigenen Code gesehen haben, ist durch den Austausch von Problemen, die Sie mit anderen Entwicklern haben. Aber machen Sie nicht den gleichen Fehler, den ich gemacht habe, KEIN KOPIEREN!

 "Es ist der Weg der Handwerkskunst, der zu wahrem Verständnis und Meisterschaft führt."

Anfänger oder Noobs befinden sich in dem, das ich Anfänger-Schleife nenne

Anfänger-Schleife

03: Geben Sie einen Perfektionismus auf

"Erledigt ist besser als perfekt" - Gängige Maxime im Silicon Valley

Ich kann Ihnen gar nicht sagen, wie sehr und wie lange mich das davon abgehalten hat, Dinge zu teilen. Ich war immer auf der Suche nach dem heiligen Gral, den ich mit anderen Nutzern auf dieser Website teilen kann. Es hat eine Weile gedauert, bis ich begriffen habe, dass ich, wenn ich etwas zu teilen habe, dies auch tun sollte und mich nicht von meinem eigenen Denken abhalten lassen sollte.

Was ist besser?

Einen Indikator, einen Expert Advisor, eine Bibliothek oder ein Stück Code in den nächsten Jahren zu erstellen, oder produktiv zu sein und Hunderte von unvollkommenen Ergebnissen in einem Jahr zu erstellen?

Schreiben Sie ausreichend guten Code für Ihre Mitentwickler oder Kunden, keinen perfekten Code für sich selbst. Sie werden immer Zeit und Gelegenheit haben, Code zu verbessern, der verbessert werden muss; in anderen Fällen werden Sie Zeit sparen, indem Sie Code schneller ausliefern.

Dies gilt für fast alles, was Programmierer sich vorstellen können, und zwar jeden Tag:

  • Unsere mobilen Apps werden aktualisiert. 
  • Die Betriebssysteme und Software unserer Computer und Telefone werden aktualisiert.
  • Selbst Programmiersprachen wie MQL5, Python und andere werden Tag für Tag verbessert. 

Wenn sogar unsere Programmiersprachen und Frameworks aktualisiert werden, dann wissen Sie wahrscheinlich, dass Verbesserungen im Laufe der Zeit keine schlechte Sache sind.

Auf MQL5.com gilt dies so ziemlich überall, wo Sie an die Aktualisierung von Programmen auf dem Markt denken können.

Versions-Update

Im Forum kannst du den Beitrag ändern, löschen oder deine Antwort und sogar deinen eigenen Kommentar aktualisieren, wie verrückt ist das denn! Haha!

04: Vermeiden Sie es, intelligenten Code zu schreiben.

Das Debuggen ist doppelt so schwer wie das Schreiben von Code. Wenn man also Code so schlau wie möglich schreibt, ist man per Definition nicht schlau genug, ihn zu debuggen" — Brian Kernighan

Code, der den aus der Dokumentation gelernten Best Practices folgt, ist bereits schlau, Bruder! 

Schreibe guten, sauberen und einfachen Code, der leicht zu lesen und zu verstehen ist. Niemand wird von einem über-intelligenten Code profitieren, auch nicht Sie drei Monate später. Es ist extrem schwierig, mit dem sogenannten schlauen Code von vielen Neulingen zu arbeiten (Freelance-Entwickler können das bestätigen). Bist du jemals auf Code aus einem EA-Änderungsauftrag oder aus der CodeBase gestoßen, der aus Gründen, die du nicht ganz verstehst, extrem kompliziert war? Versteh mich nicht falsch, ich will niemanden schlecht machen oder zu einfachem Code für komplexe Aufgaben ermutigen; ich sage nur, dass es einen Weg gibt, auch komplizierten Code einfach zu gestalten (ich denke, darum geht es bei der Kreativität). Sauberer Code kann helfen.

Hier sind einige Tipps zum Schreiben von sauberem Code:

  • Gestalten Sie ihn 
  • Machen Sie ihn konsistent
  • Kommentieren Sie ihn
  • Halten Sie ihn SCHLANK 

Gestalten Sie ihn:

Ich verwende einfach eine Funktion zum Zählen von Positionen nach ihrem Typ als Beispiel

int CountPosByType(ENUM_POSITION_TYPE type){
 int counter = 0; 
  for (int i=PositionsTotal(); i>=0; i--)
     if (m_position.SelectByIndex(i))
     if (m_position.Magic()==MagicNumber && m_position.Symbol()==Symbol() && m_position.PositionType()==type)
      { counter++; }
  return counter;
}

Die Funktion ist ziemlich einfach zu verstehen, aber sie folgt nicht den oben genannten Tipps für sauberen Code, also werde ich sie zuerst gestalten. Das ist ganz einfach — klicken Sie einfach auf den blauen Knopf, der wie ein Haarkamm aussieht, in Ihrem MetaEditor

mql5 Code formatieren

So sieht unser Code aus, nachdem wir ihn formatiert haben:

int CountPosByType(ENUM_POSITION_TYPE type)
  {
   int counter = 0;
   for(int i=PositionsTotal(); i>=0; i--)
      if(m_position.SelectByIndex(i))
         if(m_position.Magic()==MagicNumber && m_position.Symbol()==Symbol() && m_position.PositionType()==type)
            { 
                counter++; 
            }
   return counter;
  }

Sehen Sie, nur durch das einfache Gestalten hat sich unser Code von schwer lesbar zu lesbar verändert. Das bedeutet noch nicht einmal, dass wir unseren Code ändern müssen, denn der erste Schritt zum Schreiben von sauberem Code ist, ihn lesbar zu machen, denn wenn man ihn lesen kann, kann man ihn auch ändern — Punkt.

Machen Sie ihn konsistent:

Ich kann Ihnen gar nicht sagen, wie oft ich am Ende zu viele Variablen für so ziemlich dieselbe Arbeit auf verschiedenen Funktionsebenen angelegt habe, warum also nicht eine globale Variable? Ich würde Ihnen auch empfehlen, leicht zu handhabende und leicht zu merkende, konsistente Funktionsnamen zu verwenden, die klar erklären, worum es bei der Funktion geht, so dass Sie sich auch in 6 Monaten noch daran erinnern können. Dies wird Ihre Arbeit um das Dreifache beschleunigen, da Sie nicht mehr bei Null anfangen müssen, um eine Funktion zu erstellen, die bereits in Ihrem vorherigen EA enthalten ist, während Sie sie einfach aus Ihren früheren Arbeiten kopieren können.

Wegen des Funktionsnamens machen wir Folgendes:

int CountPositionsByType(ENUM_POSITION_TYPE type)

Da wir in Bezug auf unseren Code konsistent sind, können wir einfach auf Suchen gehen und die Option In Dateien suchen einstellen.       In Dateien suchen


Von dort aus können Sie nach Ihrer Funktion in allen EAs und Indikatoren suchen, was die Arbeit vereinfacht. Wenn wir die Funktion das nächste Mal erstellen wollen, können wir sie einfach kopieren und in anderen EAs wiederverwenden.

Der beste Weg, konsistenten Code zu schreiben, ist OOP (Objektorientierte Programmierung).

Konsistenter Code ist einfach zu verwenden, während das Debugging nur an einer Stelle durchgeführt werden muss.

Kommentieren Sie ihn:

Selbst Dinge, die von Laien als unbedeutend bezeichnet werden, wie das Schreiben von Kommentaren in Ihrem Code, können einen großen Unterschied für Ihre Produktivität machen. Nicht nur, dass es den Code lesbarer macht, sondern Kommentare können auch eine Erinnerung daran sein, was zum Beispiel eine Variable bedeutet.

Definieren wir nun den Zähler erneut, diesmal mit einem Kommentar, der erklärt, worum es geht:

int counter = 0; //Variable to store the number of positions

Wenn wir das nächste Mal auf den Zähler zugreifen wollen, sieht es so aus:

mql5 Code, selbsterklärend

Das Tolle an der Kommentierung von Code in MetaEditor ist, dass der Kommentar als Erinnerung daran dient, worum es bei einer Variablen oder einem Codestück geht. Das ist sehr nützlich, wenn man zu viele Variablen hat, bei denen man leicht vergisst, worum es sich handelt.

Halten Sie ihn schlank oder DRY:

OOP kann eine große Hilfe sein, wenn es darum geht, den Code schlank nach dem Motto DRY (Don't Repeat Yourself) zu halten. Vermeiden Sie verschiedene Funktionen, die so ziemlich die Gleiche tun. Sie brauchen zum Beispiel keine Funktion, die überprüft, ob eine Position nach ihrem Typ existiert, wenn Sie bereits eine Funktion haben, die Positionen nach ihrem Typ zählt.

05: Versuchen Sie nicht, den kürzest möglichen Code zu schreiben

" Erst die Lesbarkeit, dann alles andere "

Nun gibt es Entwickler, die denken, dass sie guten Code schreiben, wenn sie möglichst wenige Zeilen oder wenige Zeichen in einer Zeile verwenden. Auch das ist nicht klug.

Geschriebener Code wird dutzende, wenn nicht hunderte Male gelesen, also sollte man sich bemühen, lesbaren Code zu schreiben, egal wie lang er ist.

Ich kann das mit der Faulheit von Entwicklern in Verbindung bringen (ging mir genauso), wir glauben, dass wir nur wenige Dinge implementieren müssen, um den Job als Freelancer oder so zu erledigen.

Überlegen Sie sich, ob Sie in Ihrem EA einfach zu bedienende Eingaben machen wollen. Schreiben Sie den Code, um alle Ausnahmen zu behandeln und den Nutzer bei einem Fehler zu warnen, wenn der Nutzer eine Eingabe auf Null setzt und der EA dann nicht mehr richtig funktioniert.

Hier ist, was ich Ihnen sage,

   Fehlercodes, Rückgabecodes des Handelsservers, Kompilierungsfehler und Ausnahmen im System sind für Sie bestimmt, nicht für die Nutzer. Ziehen Sie also in Erwägung, einen Code zu schreiben, der Warnungen, Kommentare auf dem Chart oder was auch immer anzeigt, aber stellen Sie sicher, dass der Nutzer nur das sieht, was er sehen soll und welche Maßnahmen er ergreifen muss, um die Dinge in Ordnung zu bringen.

Ich weiß, dass es sich langweilig anfühlt, alles von Grund auf zu implementieren, aber es gibt immer einen besseren Weg, den Sie herausfinden können! Man kann sie irgendwo in den Include-Dateien aufbewahren, um sie einzubinden oder zum Kopieren und Einfügen zu verwenden — man kann einen Weg finden.


Schlussfolgerung

Das Gute an guten Praktiken ist, dass sie schwer zu befolgen und zu entwickeln sind, aber wenn sie einmal verinnerlicht hat, werden sie Sie für den Rest Ihrer Karriere begleiten.

 Vielen Dank für Ihre Aufmerksamkeit!


Übersetzt aus dem Englischen von MetaQuotes Ltd.
Originalartikel: https://www.mql5.com/en/articles/9643

Grafik in der Bibliothek DoEasy (Teil 78): Animationsprinzipien in der Bibliothek. Schneiden von Bildern Grafik in der Bibliothek DoEasy (Teil 78): Animationsprinzipien in der Bibliothek. Schneiden von Bildern
In diesem Artikel werde ich die Animationsprinzipien definieren, die in einigen Teilen der Bibliothek verwendet werden sollen. Außerdem werde ich eine Klasse entwickeln, mit der ein Teil des Bildes kopiert und an einer bestimmten Stelle des Formularobjekts eingefügt werden kann, wobei der Teil des Formularhintergrunds, über den das Bild gelegt werden soll, erhalten bleibt und wiederhergestellt wird.
Grafik in der Bibliothek DoEasy (Teil 77): Objektklasse der Schatten Grafik in der Bibliothek DoEasy (Teil 77): Objektklasse der Schatten
In diesem Artikel werde ich eine separate Klasse für das Schattenobjekt erstellen, das ein Nachkomme des grafischen Elementobjekts ist, und die Möglichkeit hinzufügen, den Objekthintergrund mit einem Farbverlauf zu füllen.
Besser Programmieren (Teil 02): Hören Sie auf, diese 5 Dinge zu tun, um ein erfolgreicher MQL5-Programmierer zu werden Besser Programmieren (Teil 02): Hören Sie auf, diese 5 Dinge zu tun, um ein erfolgreicher MQL5-Programmierer zu werden
Dieser Artikel ist ein Muss für alle, die ihre Programmierkarriere verbessern wollen. Diese Artikelserie zielt darauf ab, Sie zum besten Programmierer zu machen, der Sie sein können, unabhängig davon, wie erfahren Sie sind. Die besprochenen Ideen eignen sich sowohl für MQL5-Programmierneulinge als auch für Profis.
Grafiken in der Bibliothek DoEasy (Teil 76): Das Formularobjekt und vordefinierte Farbschemata Grafiken in der Bibliothek DoEasy (Teil 76): Das Formularobjekt und vordefinierte Farbschemata
In diesem Artikel beschreibe ich das Konzept des Aufbaus verschiedener Designschemata der Bibliotheks-GUI, erstelle das Form-Objekt, das ein Nachkomme des Klassenobjekts für grafische Elemente ist, und bereite Daten für die Erstellung von Schatten der grafischen Bibliotheksobjekte sowie für die weitere Entwicklung der Funktionalität vor.