Die Sprache MQL5 von Grund auf selbst erlernen - Seite 48

 
Wenn der unmittelbare Zweck darin besteht, einen einfachen Trailing-Stop zu implementieren, sollten Sie das Skript weiterschreiben und die for- und while-Schleifen hinzufügen.

Ich bin mir nicht sicher, ob das Skript "Geduld genug" eine logische Erweiterung hat. Wahrscheinlich ist es besser, sich einer neuen Idee zuzuwenden, für die man etwas haben muss:

1. Ein if-else-Bedingungsbaum.
2. Berechnungsfunktionen.
3. Zyklen.

Da wir im Bereich des algorithmischen Handels arbeiten werden, wäre es sinnvoller, wenn das Skript mit der Handelsstrategie verbunden wäre. Denken Sie darüber nach.

 
Zum besseren Verständnis von Schleifen:

Mit einer Schleife können Sie einen Codeabschnitt, der in seinem Rumpf geschlossen ist, immer wieder weitergeben. Die Ergebnisse jedes Durchlaufs werden sich von den Ergebnissen anderer Durchläufe unterscheiden, da die Werte der Variablen/aufgerufenen Funktionen bei jedem Durchlauf anders sein können. Die Anzahl der Schleifenwiederholungen wird vom Programmierer, dem Wert der Variablen oder der Funktion bestimmt - sie hängt vom jeweiligen Code ab.
 
MrBrooklin:

Alexej, machst du Witze? Ja, ich möchte zuerst die Grundlagen lernen!

Hochachtungsvoll, Vladimir.


Nicht sehr viel. Nach der Dynamik und der Basis, der Theorie und der Praxis zu urteilen, ist es Ihr Profil von Anfang bis Ende. Warum also nicht... Nicht jetzt, aber später... Wenn Sie den Dreh raus haben und sich mit dem Code vertraut gemacht haben.
 
Реter Konow:
Wenn Ihr unmittelbarer Zweck darin besteht, einen einfachen Trailing-Stop zu implementieren, schreiben Sie das Skript weiter, indem Sie die for- und while-Schleifen hinzufügen.

Ich bin mir nicht sicher, ob das Skript "Geduld genug" eine logische Erweiterung hat. Wahrscheinlich ist es besser, sich einer neuen Idee zuzuwenden, für die man etwas haben muss:

1. Ein if-else-Bedingungsbaum.
2. Berechnungsfunktionen.
3. Zyklen.

Da wir im Bereich des algorithmischen Handels arbeiten werden, wäre es sinnvoller, wenn das Skript mit der Handelsstrategie verbunden wäre. Denken Sie darüber nach.

Vielen Dank, Peter, für die Unterstützung meines Vorhabens, das Skript New7.mq5 mit Trailing Stops auszustatten, insbesondere jetzt, wo ich begonnen habe, die Zyklen zu studieren. Übrigens habe ich die Sleep-Funktion im Skript bereits ausprobiert. Es wurde empfohlen, diese Funktion beim Schreiben des Trailing-Stops zu verwenden. Wo soll ich anfangen? Wahrscheinlich wäre es besser, den gesamten Trailing-Stop-Algorithmus zunächst in Worten zu beschreiben und dann mit dem Schreiben des Codes fortzufahren?

Mit freundlichen Grüßen, Vladimir.

 
Aleksey Masterov:

Nicht viel. Gemessen an der Dynamik, Ihrer Basis, der Theorie und der Praxis ist es Ihr Profil von Anfang bis Ende. Warum also nicht... nicht jetzt, aber später... Wenn man den Dreh raus hat und sich mit dem Vornamen anredet.

Ich danke dir, Alexey, für dein Vertrauen in mich. Alles, was ich tun muss, ist, die gute Arbeit fortzusetzen!

Mit freundlichen Grüßen, Vladimir.

 
MrBrooklin:

Vielen Dank, Peter, für die Unterstützung meines Wunsches, das Skript New7.mq5 mit Trailing Stops auszustatten, besonders jetzt, wo ich mit dem Studium der Zyklen begonnen habe. Übrigens habe ich die Sleep-Funktion im Skript bereits ausprobiert. Es wurde empfohlen, diese Funktion beim Schreiben des Trailing-Stops zu verwenden. Wo soll ich anfangen? Wahrscheinlich wäre es besser, den gesamten Trailing-Stop-Algorithmus zunächst in Worten zu beschreiben und dann mit dem Schreiben des Codes fortzufahren?

Mit freundlichen Grüßen, Vladimir.

Objektiv gesehen kann ein einfacher Trailing-Stop nicht in das Skript geschrieben werden. Lassen Sie mich erklären: Trailing Stops existieren nicht von selbst, in einem "Vakuum", sie sind an eine offene Position "gebunden", die ihrerseits an eine Strategie "gebunden" ist, und die Strategie wird nur in einem EA implementiert.

Das Problem und die Komplexität des Trailing im Skript liegt darin, dass Sie Informationen über offene Positionen und deren Aufträge in der Schleife sammeln und dann den gewünschten Auftrag auf dem gewünschten Symbol auswählen und seine Änderung berechnen müssen. Es ist kompliziert und verwirrend, aber für einen EA ist alles viel einfacher. Erstens wissen Sie bereits, welche Reihenfolge Sie ändern müssen, und zweitens wissen Sie, wann Sie ändern müssen, da das OnTick-Ereignis eintritt.

Sie geben also eine "Order Pending" in das Skript ein, die dann ausgelöst wird, eine Position wird eröffnet und Sie können den Stop nachziehen... Was Sie dafür brauchen:

1. Um das Skript zu wiederholen.
2. Schreiben Sie die Funktion der Fixierung des Preisänderungsereignisses auf das Textsymbol.
3. Schreibfunktion für die Änderung der Stop-Order.
4. Schreiben Sie die Bedingung für das Entladen des Skripts (Verlassen des loopless Zyklus) bei Positionsschließung.

Ich habe den Drehbuchentwurf ungefähr skizziert, aber ich muss noch genauer darüber nachdenken.

P.S. Die Funktion Sleep wird verwendet, um die Ausführung von Code zu verzögern, wenn dies erforderlich ist. Zum Beispiel, wenn Sie eine Anfrage an den Server stellen oder auf ein Ereignis warten. In einem Schlepperskript wird diese Funktion auf jeden Fall benötigt.
 
Реter Konow:
Programmierer scheuen sich davor, globale Variablen zu verwenden, weil bei der Änderung ihrer Werte Fehler auftreten können. Das führt dazu, dass ein Fehler schwer zu lokalisieren ist, weil jede Funktion sie verändern kann. Natürlich dürfen nur die Variablen im globalen Bereich existieren, die alle Programmfunktionen sehen müssen. Es kann nicht anders sein.

Die Verwendung globaler Variablen hat mir schon immer gut gefallen, da sie ein schnelles Wachstum der Funktionalität ermöglichten und das Programm zu einer riesigen, aktiven Baustelle machten. Ich bin oft für die Art und Weise, wie ich Code schreibe, kritisiert worden, aber das ist der Grund, warum es eine Baustelle ist: Es wird aufgeräumt, nachdem die grundlegenden Bauarbeiten erledigt sind, und wenn das Haus gebaut ist, kann man mit dem Kacheln, Streichen und Aufräumen beginnen. Bis dahin gilt es, die Schalung zu montieren und Beton zu gießen).

Programmierer denken jedoch anders. Sie werden ihren Code "säubern" und "schrubben", auch wenn es nur zweieinhalb Zeilen sind. Sie werden ihren Code schrubben, auch wenn er zweieinhalb Zeilen lang ist, aber er wird glänzen wie... wie eine neue Münze.) Diese Einstellung zum Code ist durch ihren Beruf gerechtfertigt, den sie ausüben, aber vom kreativen Standpunkt aus sind sie steif und schlecht entwickelt. So ist das nun mal...

Mein Rat: Lernen Sie, wie man richtig schreibt, aber erlauben Sie sich auch mal, von den Regeln abzuweichen und zu experimentieren, um eine vielfältigere Erfahrung zu machen. Das hilft Ihnen beim Lernen, und Sie lernen es schneller.

Es gibt eine Beobachtung, die besagt, dass, wenn man einmal angefangen hat, zu krücken, es schwer ist, damit aufzuhören, und als Folge davon wird der Projektcode zu dem, was man Dre...code nennt.

Lassen Sie mich das erklären:

  1. Sie haben ein Projekt mit einer funktionierenden Zwischenlösung und die Anzahl der implementierten Funktionen ist gleich 0.
  2. Unsere Aufgabe ist es, die Funktion ++count zu implementieren.
  3. Um die benötigten Funktionen hinzuzufügen:
    • Methoden des Objektbaums zu schreiben und all diese Dinge mit Ereignis-Handlern mit Logik zu verbinden (geschätzte Zeit 3 Stunden *count; count=0).
    • eine Krücke in Form einer globalen Variablen zu schreiben und sie in mehreren Methoden zu verwenden, wo wir sie brauchen (geschätzte Zeit 15 min *Zahl.).
  4. Autonummerierungsfehler (dies ist ein Fehlerbericht für Meta-Zitate).
  5. Natürlich wurde die Version mit den Krücken gewählt (es ist wirklich schwer, sich in diesem Fall zu helfen)
  6. if (wir haben es geschafft) goto 2
  7. sonst geht alles den Bach runter, ich rufe "Hilfe-mich" und lese lustige Kommentare, dass es falsch ist, das zu tun.

Ich hoffe, Sie haben darauf geachtet, dass der Zähler der implementierten Funktionen die Zeit für die Implementierung der nächsten Funktion erhöht, aber wenn sie korrekt implementiert wurde, wird er auf Null zurückgesetzt?

Das ist eine sehr übertriebene Vorstellung, aber so funktioniert es im wirklichen Leben.

Was ich meine, ist, wenn Sie das Projekt nicht umschreiben, nachdem Sie alle Funktionen implementiert haben, wird es als unlesbarer Spoiler in die Produktion gehen. Und dann führt der Lebenszyklus eines jeden Projekts zu Kopfzerbrechen für das Management: entweder das gesamte Team auf ein globales Refactoring all der Dinge zu setzen, die gesponnen wurden (und die Konkurrenten schlafen nicht, sie, die bösen Jungs, schreiben neue Features), oder weiterhin Krücken zu schreiben und Bugs zu patchen, die in Strömen durchsickern.

 
Реter Konow:
Objektiv gesehen funktioniert ein einfacher Trailing-Stop in diesem Skript nicht. Lassen Sie mich erklären: Trailing Stops existieren nicht von selbst, in einem "Vakuum", sie sind an eine offene Position "gebunden", die wiederum an die Strategie "gebunden" ist, und die Strategie wird nur in einem Expert Advisor umgesetzt.

Das Problem und die Komplexität der Implementierung von Trailing in das Skript besteht darin, dass Sie Informationen über offene Positionen und ihre Aufträge in der Schleife sammeln und dann den richtigen Auftrag für das richtige Symbol auswählen und berechnen müssen, wie er zu ändern ist. Es ist kompliziert und verwirrend, aber für einen EA ist alles viel einfacher. Erstens wissen Sie bereits, welche Reihenfolge Sie ändern müssen, und zweitens wissen Sie, wann Sie ändern müssen, da das OnTick-Ereignis eintritt.

Sie geben also eine "Order Pending" in das Skript ein, die dann ausgelöst wird, eine Position wird eröffnet und Sie können den Stop nachziehen... Was Sie dafür brauchen:

1. Um das Skript in einer Schleife laufen zu lassen.
2. Die Funktion der Fixierung des Preisänderungsereignisses auf das Symbol.
3. Schreibfunktion zur Änderung der Stop-Order.
4. Schreiben Sie die Bedingung für das Entladen des Skripts (Verlassen der Schleife) beim Schließen der Position.

Ich habe den Drehbuchentwurf ungefähr skizziert, aber ich muss noch genauer darüber nachdenken.

P.S. Die Funktion Sleep wird verwendet, um die Ausführung von Code zu verzögern, wenn dies erforderlich ist. Zum Beispiel, wenn Sie eine Anfrage an den Server stellen oder auf ein Ereignis warten. In einem Schlepperskript wird diese Funktion auf jeden Fall benötigt.

Peter, müssen wir im Skript einen abschließenden Code erstellen? Perfekt! Jetzt nehme ich das, was Sie als grundlegende Abschnitte aufgelistet haben, und fange an, sie in Worten zu beschreiben, damit klar ist, wie ich später Funktionen, Schleifen usw. schreiben soll. Ist dies richtig?

Mit freundlichen Grüßen, Vladimir.

 
MrBrooklin:

Peter, wir erstellen also den abschließenden Code im Skript? Großartig! Das, was Sie aufgelistet haben, nehme ich jetzt als Basisabschnitte und fange an, sie in Worten zu beschreiben, so dass es klar ist, wie man später Funktionen, Schleifen usw. schreibt. Ist dies richtig?

Mit freundlichen Grüßen, Vladimir.

Ja, richtig.
 
Vladimir Simakov:

Es gibt eine Beobachtung, die besagt, dass es schwer ist, aufzuhören, wenn man einmal damit angefangen hat, und dass sich der Projektcode in das verwandelt, was als DC bekannt ist.

Lassen Sie mich das erklären:

  1. Sie haben ein Projekt mit einer funktionierenden Zwischenlösung und die Anzahl der implementierten Funktionen ist gleich 0.
  2. Unsere Aufgabe ist es, die Funktion ++count zu implementieren.
  3. Um die benötigten Funktionen hinzuzufügen:
    • Methoden des Objektbaums zu schreiben und all diese Dinge mit Ereignis-Handlern mit Logik zu verbinden (geschätzte Zeit 3 Stunden *count; count=0).
    • eine Krücke in Form einer globalen Variablen zu schreiben und sie in mehreren Methoden zu verwenden, wo wir sie brauchen (geschätzte Zeit 15 min *Zahl.).
  4. Autonummerierungsfehler (dies ist ein Fehlerbericht für Meta-Zitate).
  5. Natürlich haben wir uns eine Krücke ausgesucht (in diesem Fall ist es wirklich schwer, sich selbst zum Arbeiten zu bringen)
  6. if (wir haben es geschafft) goto 2
  7. sonst geht alles den Bach runter, man schreit "Hilfe-mich" und liest lustige Kommentare, dass man das nicht machen darf.

Ich hoffe, Sie haben darauf geachtet, dass der Zähler der implementierten Funktionen die Zeit für die Implementierung der nächsten Funktion erhöht, aber wenn sie korrekt implementiert wurde, wird er auf Null zurückgesetzt?

Das ist eine sehr übertriebene Vorstellung, aber so funktioniert es im wirklichen Leben.

Was ich meine, ist, wenn Sie das Projekt nicht umschreiben, nachdem Sie alle Funktionen implementiert haben, wird es als unlesbarer Spoiler in die Produktion gehen. Und dann bereitet der Lebenszyklus eines jeden Projekts dem Management Kopfzerbrechen: entweder das gesamte Team auf ein globales Refactoring all der Dinge anzusetzen, die sie gesponnen haben (und die Konkurrenten schlafen nicht, sie, die bösen Hurensöhne, schreiben neue Features), oder weiterhin Krücken zu schreiben und Bugs zu patchen, die in Strömen durchsickern.

Auch wenn diese Nachricht hauptsächlich an Peter gerichtet ist, bitte ich Sie, sie ohne Slang zu verfassen, damit ich Ihre Botschaften vollständig verstehen kann, und zwar in einer Sprache, die einem Schüler im ersten Jahr der Programmierschule zugänglich ist, denn das Thema ist von Grund auf für Anfänger gedacht.

Mit freundlichen Grüßen, Vladimir.