Beta-Version des Online-Buchs über MQL4-Programmierung - von Sergey Kovalev (SK.) - Seite 3

 
Climber:
Ich habe Meta Trader vor einer Woche zum ersten Mal ausprobiert und festgestellt, dass es viel bequemer ist als meine bisherigen Terminals (Rumus und Forex Trader). Als ich vor etwa zwei Jahren Forex kennen lernte und mein erstes Demokonto eröffnete, fragte ich mich, wie ich alles automatisieren könnte. Dann öffnete ich das Terminal und sah die Autotrading-Nachricht im E-Mail-Bereich. Und hier bin ich))) Ich lese das Buch intensiv und hoffe, dass ich bald meinen ersten Expert Advisor für meine entwickelte Strategie schreiben werde. Ich hatte vorher absolut nichts mit dem Programmieren zu tun, es war sogar schwer vorstellbar, dass ich jemals programmieren lernen würde))) Während der Lektüre tauchten Fragen auf, aber sie verschwanden auch wieder, als ich weiter las. Die Frage tauchte auf, ich schaute nach vorne und war zufrieden, denn ich sah die Antwort nach ein paar Kapiteln und ging zurück, um alles der Reihe nach zu lesen. Mich reizte vor allem die Möglichkeit, die Strategie anhand historischer Daten zu testen und die Strategie daraufhin anzupassen.
Auf jeden Fall vielen Dank für das Buch.


Es ist ausgezeichnet. Sie sind ein neuer MT-Benutzer. Und Sie wissen im Moment so gut wie nichts über Programmierung.

Erlauben Sie mir, Ihnen vorzuschlagen, mindestens zwei- bis dreimal im Monat zu berichten, wie die Dinge laufen (und öfter, wenn Sie es wünschen). Das wäre äußerst interessant.

In der Zwischenzeit habe ich, wenn Sie gestatten, eine Frage. Sie sagen, es habe sich eine Frage ergeben, die in den folgenden Abschnitten beantwortet wird. Ich habe versucht, es so zusammenzustellen, dass diese Situation vermieden wird. Könnten Sie bitte klarstellen, auf welche Frage Sie sich beziehen?

 
SK. писал (а):
Climber:
Vor einer Woche habe ich Meta Trader zum ersten Mal installiert und ausprobiert. Es stellte sich heraus, dass dieses Terminal viel bequemer ist als meine vorherigen (Rumus und Forex Trader). Als ich vor etwa zwei Jahren Forex kennen lernte und mein erstes Demokonto eröffnete, fragte ich mich, wie ich alles automatisieren könnte. Dann öffnete ich das Terminal und sah die Nachricht Autotrading im Mailbereich. Und hier bin ich))) Ich lese das Buch intensiv und hoffe, dass ich bald meinen ersten Expert Advisor für meine entwickelte Strategie schreiben werde. Ich hatte vorher absolut nichts mit Programmierung zu tun, es war sogar schwer vorstellbar, dass ich jemals Programmieren studieren würde))) Während der Lektüre tauchten Fragen auf, aber sie verschwanden auch wieder, als ich weiter las. Die Frage kam auf, ich schaute nach vorne und war zufrieden, denn ich sah die Antwort nach ein paar Kapiteln und ging zurück, um alles der Reihe nach zu lesen. Mich hat vor allem die Möglichkeit gereizt, die Strategie anhand historischer Daten zu testen und im Anschluss daran zu korrigieren.
Auf jeden Fall vielen Dank für das Buch.


Es ist ausgezeichnet. Sie sind ein neuer MT-Benutzer. Und Sie wissen im Moment so gut wie nichts über Programmierung.

Darf ich Ihnen anbieten: mir mindestens 2 oder 3 Mal im Monat mitzuteilen, wie es Ihnen geht (oder öfter, wenn Sie es wünschen). Das wäre sehr interessant.

In der Zwischenzeit habe ich, wenn Sie gestatten, eine Frage. Sie sagen, es habe sich eine Frage ergeben, die in den folgenden Abschnitten beantwortet wird. Ich habe versucht, es so zusammenzustellen, dass diese Situation vermieden wird. Könnten Sie bitte klarstellen, auf welche Frage Sie sich beziehen?

Ich habe einmal Sign of Misery benutzt, um mir die Arbeit zu erleichtern. Dort kann man ein Programm schreiben, ohne Programmierkenntnisse zu haben. Man musste nur die Aktionen in der Reihenfolge angeben, in der sie ausgeführt wurden (ich habe es hauptsächlich als Automator verwendet, obwohl es viel mehr Möglichkeiten gibt). Nehmen wir an, ich hätte eine Menge von Werten in 4 Spalten in Excel (elektrische Vermessungsdaten aus der Geophysik, alle 20 cm). Für die weitere Verarbeitung dieser Daten musste ich nur Daten von Zählern (d. h. von 0, 1, 2, 3, 4 ....) nehmen. Ich habe dieses Programm erstellt, um die Aktionen zu automatisieren, indem ich Befehle zur Emulation der Tasten und zur Änderung der Mauskoordinaten gebe. Ich habe es in der ehe. Aber das war nur eine Abschweifung. Das Programm musste Etiketten erstellen und die Bedingungen für den Übergang zu diesen Etiketten festlegen, d.h. einen Zyklus von Operationen mit der Bedingung, diesen Zyklus zu beenden. Als ich mich mit der Frage der Erstellung des EA befasste, hatte ich eine gewisse Vorstellung von der allgemeinen Struktur des Codes. Aber als ich anfing, das Buch zu lesen, war ich etwas verwirrt von der Struktur des Programmaufbaus und dann von der Funktion int start (), die bei jedem Tick wiederholt wird, und wenn ich zum Zeitpunkt ihrer Ausführung den Preis des Gebots herausgefunden habe, wird er in eine Variable geschrieben und während der gesamten Ausführung darin gespeichert, wie werde ich dann wissen, wann sich der Preis geändert hat und das Programm andere Aktionen auf der Grundlage des neuen Preises durchführen kann? Ich dachte, dass der Preis in meinem Programm durch eine Art von Schleifencode aktualisiert wird, der ständig nach ihm fragt. Ich hatte noch eine andere Frage: Wenn man eine Funktion aufruft und diese ausgeführt wird, dachte ich, dass die nächste Funktion ausgeführt wird, aber es stellte sich heraus, dass die Kontrolle an die Funktion zurückgeht, die derjenigen folgt, die die Funktion ursprünglich aufgerufen hat. Aber diese Tatsache hat mich besonders gefreut, weil sie mir klar wurde (denn ich dachte, was ist mit anderen Aktionen, die auf diese Funktion folgten, werden sie auf diese Weise übersprungen?) Jetzt habe ich eine Frage wie diese: Ich habe verstanden, dass ich bei der Ausführung der Funktion init eine Funktion zur Berechnung eines geeigneten Eröffnungskurses für meinen Auftrag und zur Berechnung der Losgröße auf der Grundlage der Kontostandsdaten aufrufen werde; nach Abschluss von init beginnt die Ausführung der Funktion start, die einen Code für "Warten" enthält Der notwendige Preis der Transaktion, und sobald er kommt, wird die Auftragseröffnung ausgeführt werden (Take Profit wird nicht angenommen, um zu setzen, weil, wenn es einen Sprung geben wird, der über Wert ТР springen wird, es nicht auslösen wird, und der Sprung dieser potentiell günstig als Wert ТР, deshalb möchte ich den Auftrag bilden, um den Auftrag am letzten bekannten Preis zu schließen, wenn der aktuelle Preis entweder gleich ist, oder <, oder > angegeben.oder >); dann ist das Rätselhafteste für mich, wo ich den Code schreiben soll, der auf den Schlusskurs der Order wartet und zum Anfang zurückkehrt, d.h. wieder den abgerechneten Kurs berechnet und den Schlusskurs der Order verwendet. D.h., ich muss den Preis für die Eröffnung berechnen, auf diesen Preis warten usw. Ich habe mir die Abschnitte angesehen; ich glaube, ich habe in den Überschriften etwas gesehen, das meine Frage wahrscheinlich beantworten wird. Ich bin gerade dabei, den Abschnitt über die Eröffnung und Einstellung von Aufträgen zu lesen. Ich habe gestern Morgen angefangen, es zu lesen.
Ich werde Sie natürlich über die Fortschritte informieren, wie in meiner Situation und ohne Kommunikation)). Ich hoffe auf ein konstruktives Feedback.
Ich danke Ihnen für Ihre Zeit und Aufmerksamkeit.
 

Bitte unterteilen Sie die folgenden Mitteilungen in Absätze, da es schwierig ist, das Geschriebene zu verstehen.

Climber:
Aber nachdem ich begonnen hatte, das Buch zu lesen, war ich etwas verwirrt von der Struktur des Programmaufbaus und dann von der Funktion int start (), die bei jedem Tick wiederholt wird, und wenn ich zum Zeitpunkt ihrer Ausführung den Preis des Gebots kenne, dann wird er in eine Variable geschrieben und während der gesamten Ausführungszeit darin gespeichert, wie werde ich dann wissen, wann sich der Preis geändert hat und das Programm andere Aktionen auf der Grundlage des neuen Preises durchführen kann? Ich dachte, dass der Preis in meinem Programm durch einen Schleifencode aktualisiert werden würde, der ihn ständig abfragt.

Sie haben Recht, wenn Sie sagen, dass das Programm nur dann in Echtzeit arbeiten kann, wenn es in regelmäßigen Abständen über die Tatsache eines neuen Preises und den Preis selbst informiert wird.

In der Tat gibt es 2 Methoden:

Die erste Möglichkeit besteht darin, in einer Endlosschleife eine Funktion auszuführen und von dort aus regelmäßig den Preis abzufragen.
Diese Methode hat jedoch Nachteile:
- Häufige Abfragen führen zu einer starken Belastung des Kommunikationskanals und zu einer Verschwendung von PC-Ressourcen;
- Wenn Sie nur selten Abfragen machen, kann es sein, dass Sie zwischen den Abfragen einen neuen Preis verpassen.

Die 2. Methode (in der MQ-Technologie als grundlegend anerkannt) unterscheidet sich insofern, als der Start des erforderlichen Codes dem Terminal obliegt. Das Terminal empfängt Informationen vom Server, erkennt, dass ein neuer Tick gekommen ist (die Tatsache eines neuen Preises und der Preis selbst), und auf der Grundlage dieser Informationen startet das Terminal die() Funktion. All dies wird im Abschnitt Programm in MQL4 beschrieben.

Bergsteiger:
Jetzt habe ich eine Frage: Ich habe erkannt, dass ich bei der Ausführung der Init-Funktion die Funktion zur Berechnung des Eröffnungspreises meiner Order aufrufe, und auch die Berechnung der Losgröße, basierend auf den Kontostandsdaten auf meinem Konto; nach der Init-Ausführung wird die Funktion start start start...

Falsch. init() und start() sind spezielle Funktionen. Sie werden vom Client-Terminal gemäß ihren eigenen Eigenschaften aufgerufen (oder einfacher gesagt, gemäß den Regeln, Bedingungen, unter denen sie zur Ausführung aufgerufen werden). Dies wird im Abschnitt Sonderfunktionen beschrieben. Die Funktion init() wird einmal ausgeführt, wenn das Programm in das Fenster geladen wird. Und start() wird bei jedem Tick aufgerufen. Das ist sehr praktisch. Ein Tick kam und brachte einen neuen Preis = das Terminal startet start(), die ausgeführt wird, bis sie ausgeführt wird. Darin müssen alle Berechnungen eingefügt werden - Berechnung der Anzahl der Lose, Bedingungen für Eröffnungs- und Schließungsaufträge und alles andere.

Bergsteiger:
Dann ist die rätselhafteste Sache für mich ist, wo der Code zu schreiben, erwarten die "close" Preis der Bestellung und zurück zum Anfang, dh wieder, Zählen der Eröffnung Preis, warten auf diesen Preis, etc. Ich habe mir die Abschnitte angesehen; ich glaube, ich habe in den Überschriften etwas gesehen, das meine Frage wahrscheinlich beantworten wird. Ich werde den Abschnitt über die Eröffnung und Einstellung von Aufträgen gerne lesen.

Ihren Fragen nach zu urteilen, brauchen Sie keine Programme zu schreiben, und Sie brauchen nicht zu lesen, was Sie gerade lesen. In dieser Situation wird dringend empfohlen, das Buch noch einmal zu lesen. Konsequent und ohne sich selbst zu übertreffen. Tippen Sie währenddessen alle vorgestellten Beispiele in ME ein und führen Sie sie auf Ihrem PC aus. Und gehen Sie erst dann zum nächsten Abschnitt über, wenn Sie jeden Buchstaben des Codes verstanden haben. Schlagen Sie die Begriffe "Tick", "Control", "Function", "Special Function" und "Operator" nach und sehen Sie von Zeit zu Zeit im Wörterbuch der Begriffe nach.

Bergsteiger:
Ich werde sicherlich über die Fortschritte berichten, wie in meiner Position und ohne Kommunikation)) Ich hoffe auf ein konstruktives Feedback.
Wir danken Ihnen für Ihr Feedback.

Ich hoffe, dass Sie die Ratschläge richtig verstehen und befolgen werden.

 
SK. schrieb (a):
<br / translate="no">

Bergsteiger:
Dann ist das Rätselhafteste für mich, wo ich den Code schreiben soll, der auf den "Schlusskurs" wartet und zum Anfang zurückkehrt, d.h. wieder den Eröffnungskurs zählt, auf diesen Kurs wartet usw. Ich habe mir die Abschnitte angesehen; ich glaube, ich habe etwas in den Überschriften gesehen, d. h. es scheint die Antwort auf meine Frage zu sein. Ich lese immer noch den Abschnitt über die Eröffnung und Einstellung von Aufträgen.

Nach den Fragen zu urteilen, die Sie haben, brauchen Sie noch keine Programme zu schreiben, und Sie brauchen auch nicht zu lesen, was Sie jetzt lesen.

Ach, ich glaube, ich habe die Struktur des Experten verstanden.
Ich habe es schnell in den vdp gekritzelt, hier ist es:

Init

Start

Ich habe die maximale Anzahl offener Aufträge auf 1 gesetzt;

Prüfen Sie, wie viele Aufträge offen sind;

Wenn 1 offen ist, rufe ich die Funktion zum Schließen des Auftrags auf,

Wenn keine Aufträge eröffnet werden, rufe ich die Funktion "Preis und Anzahl der Lots berechnen" auf.

--------------------------

Erforderlich zur Berechnung eines günstigen An- und Verkaufspreises und zur Berechnung der Anzahl der Lose;

--------------------------

Abfrage des aktuellen Preises;

wenn der aktuelle Preis >= Schnäppchenpreis zu verkaufen,

dann einen Verkaufsauftrag in Höhe der bereits festgelegten Anzahl von Losen eröffnen;

Wenn nicht, vergleichen Sie den aktuellen Preis mit dem Preis des erfolgreichen Gebots;

wenn der aktuelle Kurs <= Geldkurs ist,

bzw. einen Kaufauftrag eröffnen;

--------------------------

Funktion aufrufen, um den Auftrag abzuschließen;

return

deinit


Ist das richtig?
 
Climber:
Haben Sie es richtig verstanden?

Nun, im Großen und Ganzen richtig :) Herzlichen Glückwunsch an Sie. Es ist immer schön, etwas anderes zu verstehen.

Trotzdem rate ich Ihnen: Gehen Sie zurück zum Anfang und beginnen Sie von vorne, ohne zu überspringen oder zu übergehen, indem Sie methodisch alle im Tutorial vorgeschlagenen Codes auf Ihrem PC ausführen.

 
Parabellum:

Das Buch enthält einen interessanten ROC-Indikator - den Indikator für die Preisänderungsrate(https://book.mql4.com/ru/samples/iroc). Ich weiß, dass es sich bei diesem Buch um ein Lehrbuch handelt und der Autor nicht verpflichtet ist, halb- oder gar viertelprozentigen Quellcode zur Verfügung zu stellen, aber die Idee des Indikators ist sehr gut, und ich habe ihn ein wenig überarbeitet, um die Verzögerung noch geringer zu machen.

Der auf der Seite selbst veröffentlichte Text des Indikators hat übrigens zwei Druckfehler im Code und ist daher nicht kompilierbar.
      Line_4[i]=(Line_1[i]+Line_2[i]+Line_3[i])3;// Суммарный массив
      //-------------------------------------------------------- 17 --

      Line_5[i]= Sum(Aver_Bars+1); // Индик. массив сглаженной линии
Zweimal fehlt ein Trennzeichen (bei der Erstellung der HTML-Datei verschwunden?).
Die im Text verlinkte Indikator-Datei ist normal.
 
SK. писал (а):

Nun, im Großen und Ganzen richtig :) Herzlichen Glückwunsch an Sie. Es ist immer schön, etwas anderes zu verstehen.

Befolgen Sie dennoch meinen Rat: Gehen Sie zurück zum Anfang und beginnen Sie von vorne, ohne zu überspringen, und führen Sie methodisch alle im Tutorial vorgeschlagenen Codes auf Ihrem PC aus.


Ja, ich stimme zu, es ist sehr wichtig, zu sehen und zu fühlen, jedes Ergebnis von dem, was Sie lesen, das ist, wenn es in das Langzeitgedächtnis fixiert, umso mehr unter dem Einfluss der emotionalen Inhalt, mehr als eine Assoziation erscheint:) Übrigens wollte ich auch betonen, dass man, um das Interesse zu wecken, zu den wichtigsten Kapiteln zurückkehren oder diese verwenden muss, dann wird das Interesse selbst zum Ziel führen und den Kreis des Wissens erweitern. Das Schwierigste in unserer Situation ist es, zu verstehen, was interessant ist, während wir vorankommen, um die Reihenfolge zu finden, die am effektivsten sein wird, da wir die Effektivität von allem, was wir besitzen, sehen. Ich würde die Funktionsweise eines Assoziativspeichers mit der eines verwalteten Speichers vergleichen, bei dem ein verteilter Bereich so lange existiert, wie es mindestens eine Verknüpfung (Assoziation) zu ihm gibt; je mehr Verknüpfungen, desto wahrscheinlicher ist es, dass der Bereich nicht freigegeben wird, wodurch seine Verwendung und spätere Nützlichkeit garantiert wird. Es ist daher notwendig, den Bestand an Assoziationen ständig aufzufüllen, um das Gelesene zu festigen.

P.S.: Entschuldigung, wenn ich zu weit gegangen bin:)

 
timbo: Der auf der Seite selbst veröffentlichte Indikatortext weist übrigens zwei Tippfehler im Code auf und ist daher nicht kompilierbar.
      Line_4[i]=(Line_1[i]+Line_2[i]+Line_3[i])3;// Суммарный массив
      //-------------------------------------------------------- 17 --

      Line_5[i]= Sum(Aver_Bars+1); // Индик. массив сглаженной линии
Das Teilungssymbol fehlt zweimal (beim Erstellen der html-Datei verschwunden?).
Die im Text verlinkte Anzeigedatei ist normal.


Ja, so etwas gibt es. In den Quellcodes wurden noch keine Fehler entdeckt, aber die Textcodes sind aus irgendeinem Grund an einigen Stellen vermurkst. Wir werden das klären.
 
xnsnet:

P.S.: Entschuldigung, wenn ich überreagiert habe:)

:) Ja, ein bisschen schon)))
 
Es gibt auch eine kleine Notiz über das Buch. Es ist besser, Beispiele aus dem wirklichen Leben zu verwenden, und damit meine ich nicht Katzen, sondern Geld oder Dinge, die relevant sind. Als ich zum Beispiel zu den Schleifenoperatoren kam, lenkt das Beispiel mit den Schafen ein wenig ab, man fängt an, darüber nachzudenken, wie es unter unseren Bedingungen verwendet werden kann, und das lenkt vom Prozess der Wahrnehmung ab.

Ich habe bereits Schwierigkeiten mit Schleifen (ich werde mehr als einmal auf diese Abschnitte zurückkommen), und dann sind da noch diese Schafe.

Nur meine Meinung, wenn als ein konkretes Beispiel für den Handel (fast Raiding:)), okay, Handel, dann, wenn der Leser trifft ein Beispiel ähnlich wie seine Idee (die er nicht weiß, wie zu implementieren), wird er mit großem Interesse betrachten dieses Beispiel und denken, wie zu ändern und anzupassen, um seine Idee (ich denke, Sie wissen, was ich meine).

Ich hatte so ein Beispiel, ich war daran interessiert, wie man einen Auftrag für 1/3 des Guthabens eröffnet. Sie können sich nicht vorstellen, was für mathematische Operationen in meinem Kopf abliefen, um 1/3 in Dollar umzurechnen, damit ich die Summe in Lots (0,1 oder 3,5 Lots) erhielt. Und wie glücklich war ich, als ich ein Beispiel füropenbuy.mq4 sah, das einen Kaufauftrag im Wert von 35 % der verfügbaren Mittel mit einigen festgelegten Werten für Stop-Orders eröffnet. Ich habe ihn durchgesehen und jede Zeile, das Was, das Warum und das Wo studiert. Ich habe mir die darin verwendeten Standardfunktionen angesehen (MathFloor, MarketInfo. ....).