Die Sprache MQL5 von Grund auf selbst erlernen - Seite 28

 
Vasiliy Sokolov:

Das ist richtig! Jeder versucht, das Programmieren zu lernen, indem er falsche Vorstellungen über Software hat, die auf seiner Lebenserfahrung beruhen. Zum Beispiel, dass ein Programm wie ein Text in einem Buch ist, mit einem Inhaltsverzeichnis, einer Einleitung, einem Inhaltsverzeichnis und einem Schluss. Das heißt, das Programm ist eine Art sequentielles Schema vom Anfang bis zum Ende. In den ersten Phasen funktioniert diese Idee, aber wenn das Programm komplexer wird, treten Schwierigkeiten auf, und es ist nicht mehr möglich, ein zuverlässig funktionierendes Programm zu schreiben. Kovalev ist sehr gut darin, bärische Leistungen zu erbringen: Er versucht, dem Leser mit Hilfe seines zugänglichen begrifflichen Apparats zu erklären, dass das Programm dasselbe Buch mit einem solchen und jenem Schema ist. Aber es gibt keine Pläne! Das Skript hat ein grundlegend anderes "Schema" als der Expert Advisor, und der Expert Advisor hat ein anderes Schema als der Indikator.

Wie sollte ein Mensch Ihrer Meinung nach lernen? Direkt aus der Philosophie der PLO? Das ist unmöglich.
 

Vasiliy Sokolov:

... 4) Der seltsamste Block ist der Block "Fehlerbehandlung". Man kann hineingehen, aber man kann nicht wieder herauskommen. Das heißt, das Programm hat sich einen Fehler eingefangen und bleibt in diesem Block hängen (es muss so lange hängen, bis es komplett neu gebootet ist, oder, noch besser, das Terminal bleibt dauerhaft hängen, um sicher zu sein, dass es keine weiteren Fehler macht - das ist die Idee!) ...

Hallo Vasiliy! Vielen Dank für die ausführliche und kompetente Erklärung! Das Einzige, dem ich nicht zustimmen kann, ist Punkt 4. Der Punkt ist, dass die Pfeile sowohl zum als auch vom "Fehlerbehandlungsgerät" führen. Die Linie, die diese Einheit mit der anderen verbindet, hat Pfeile an den Enden, und aus dem Informatikprogramm des Instituts weiß ich noch, dass es sich um einen zweiseitigen Prozess handelt, d. h. hin und her. Daher habe ich keine Zweifel an der Situation. Was den Rest Ihrer Nachricht angeht, so ist für mich alles klar.

Mit freundlichen Grüßen, Vladimir.

 
MrBrooklin:

Hallo Wassili! Vielen Dank für die ausführliche und hochqualifizierte Erklärung! Das Einzige, dem ich nicht zustimmen kann, ist Punkt 4. Die Pfeile gehen nämlich sowohl zur als auch von der "Fehlerbehandlungseinheit". Die Linie, die diese Einheit mit der anderen verbindet, hat Pfeile an den Enden, und aus dem Informatikprogramm des Instituts weiß ich noch, dass sie einen zweiseitigen Prozess bedeutet, also hin und her. Daher habe ich keine Zweifel an der Situation. Was den Rest Ihrer Nachricht betrifft, so ist für mich alles klar.

Mit freundlichen Grüßen, Vladimir.

Das stimmt, der erste hat sich durchgesetzt :-)

Verwenden Sie sein Exposee als Vorlage für Ihre Forschung - kompetenter Code!

dort und


"Der
  • Expert Advisor kann durch 'Working
  • timeframe' optimiert werden Es
  • kann nur ein 'enter market'-Handel pro Balken stattfinden (dies ist ein interner Parameter, er wird nicht in den Eingabeparametern gesetzt und hat nichts mit dem Parameter 'Only one positions
  • ' zu
  • tun)
  • Wenn man im 'inside bar'-Modus arbeitet ('Search signals,
  • oder gleich '10') ist der aktuelle Takt der Takt #0, im
  • Modus 'Signale suchen, in Sekunden'('Signale suchen, in Sekunden
  • ' kleiner als '10') ist der aktuelle Takt der Takt #1
  • : Parameter - Einschränkung, welche Seite gehandelt werden soll. Kann die Werte 'Nur KAUF-Positionen erlaubt', 'Nur VERKAUF-Positionen erlaubt' und 'KAUF- und VERKAUF-Positionen erlaubt
  • ' annehmen.
  • Parameter 'Zeitsteuerung verwenden' - Zeitrahmen für die Suche nach Handelssignalen von 'Start Stunde':'Start Minute' bis'End Stunde':'End Minute'
  • .
  • Der Parameter 'Pips Or Points:'
  • definiert die Standardberechnung von Stop Loss, Take Profit und Trailing

    и

    Reverse und andere Dinge und fügen Sie Standard-Bibliotheken in den Code am Anfang zu vereinfachen Position öffnen fie - STUDY AND DON'T WORRY.

    Wenn das Flag"Positionen: Nur eine" auf"true" gesetzt ist, kann der Expert Advisor nicht mehr als eine Position auf dem Markt halten. Das Flag'Positionen: Reverse' ist für die Umkehrung von Signalen zuständig. Interessantes Flag'Positions: Close opposite' - wenn dieses Flag auf'true' gesetzt wird, bevor eine Position eröffnet wird, garantiert es die Löschung der gegenüberliegenden Positionen.Print log' druckt die erweiterte Protokollierung aller Vorgänge. Der Parameter'Freeze and StopsLevels Coefficient' definiert einen Koeffizienten für Stop- und Freeze-Levels für den Fall, dass diese Levels für ein Symbol gleich Null sind. Es wird empfohlen, den Wert "3" zu verwenden.

    iFractals iAMA
    iFractals iAMA
    • www.mql5.com
    Получать сигнала на откате (по iFractals (Fractals) ), а тренд определять по iAMA (Adaptive Moving Average, AMA). По индикатору iAMA (Adaptive Moving Average, AMA) определяется тренд. Условия тренда: на текущем баре и на двух предшествующих индикатор равномерно растёт (тренд вверх) или равномерно падает (тренд вниз). При этом цена (High или...
     

    Ich werde Grundsätze formulieren, die ich dem Autor sehr empfehle, damit er weiß, worum es in dem Programm geht. Im Gegensatz zu den Broschüren von Kovalev, wo ein Teil des Materials korrekt ist, ein Teil grobe Fehler enthält und ein Teil allgemeine Spekulationen mit dem Leser sind, sind diese Prinzipien IMMER und zu 100% korrekt, egal was Sie in MQL schreiben: Expert Advisors, Skripte oder Expert Advisors:

    Erstes Prinzip. Jedes Programm in MQL verarbeitet Ereignisse. Ein Ereignis ist eine Benachrichtigung, die Informationen über etwas enthält, normalerweise über etwas, das sich geändert hat. Zum Beispiel ist ein neuer Tick gekommen oder unser schwebender Auftrag wurde ausgeführt. Andere Ereignisse enthalten keine Informationen, sie passieren einfach. Zum Beispiel kann das Ereignis "Timer" die Benutzerfunktion mit einer bestimmten Periodizität aufrufen. Der Benutzer wird nicht benachrichtigt, dass sich etwas geändert hat. Es ruft einfach den Code des Benutzers auf und benötigt daher keine zusätzlichen Informationen. Aus der Ereignisdefinition ergeben sich mehrere nicht-triviale Methoden:

    • Die erste Konsequenz ist, dass wir, sobald wir ein Ereignis erhalten, es so schnell wie möglich bearbeiten sollten. Es kann viele Ereignisse geben, und die Ereignisse können sich in einer Warteschlange stapeln. MeteTrader (nicht unser Programm) verarbeitet die Ereignisse. Zu diesem Zweck wird eine besondere Ressource namens Fluss verwendet. Diese Ressource ist sehr wertvoll und begrenzt. Der Thread, der MetaTrader gehört, führt großzügig unseren groben, suboptimalen und langsamen Code aus, der in einem Skript auf der CPU unseres PCs geschrieben wurde. Wenn die Ereignisverarbeitung den Thread in unserem Code verlangsamt, können andere Programme, die im MetaTrader laufen, in manchen Fällen nicht ordnungsgemäß ausgeführt werden. Sie warten darauf, dass wir den Thread von unseren nutzlosen Berechnungen befreien und führen dann ihren Code auf dem befreiten Thread aus.
    • Es gibt viele Veranstaltungen. Wir können viele der verfügbaren Veranstaltungen übernehmen oder auch nur eine. Wenn wir ein Skript erstellen, behandelt es nur ein Ereignis, OnStart, das einmalig auftritt. Wenn wir einen Expert Advisor schreiben, kann er mehrere Ereignisse auf einmal verarbeiten. Das bedeutet, dass es sinnlos ist, Ihr Programm in das Paradigma "Programmiere dieses Buch" zu zwängen. Stattdessen sollten wir einfach verstehen, dass das Programm bestimmte Ereignisse verarbeitet. Sie können in beliebiger Reihenfolge oder überhaupt nicht aufgerufen werden. Die Ereignisse sind unabhängig voneinander. Die Teile des Programms, die diese Ereignisse behandeln, hängen also nicht voneinander ab. Sie sind nichtlinear und nicht sequentiell.

    (das ist alles für den Moment, ich fahre fort, wenn mir danach ist).
    Документация по MQL5: Основы языка / Функции / Функции обработки событий
    Документация по MQL5: Основы языка / Функции / Функции обработки событий
    • www.mql5.com
    В языке MQL5 предусмотрена обработка некоторых предопределенных событий. Функции для обработки этих событий должны быть определены в программе MQL5: имя функции, тип возвращаемого значения, состав параметров (если они есть) и их типы должны строго соответствовать описанию функции-обработчика события. Именно по типу возвращаемого значения и по...
     
    Roman Shiredchenko:

    hier ist die erste, die ich als Glücksbringer bekommen habe :-)

    Verwenden Sie sein Exposee als Vorlage für Ihre Forschung - kompetenter Code!

    dort und


    "Der
  • Expert Advisor kann durch 'Working
  • timeframe' optimiert werden Es
  • kann nur ein 'enter market'-Handel pro Balken stattfinden (dies ist ein interner Parameter, er wird nicht in den Eingabeparametern gesetzt und hat nichts mit dem Parameter 'Only one positions
  • ' zu
  • tun)
  • Wenn man im 'inside bar'-Modus arbeitet ('Search signals,
  • oder gleich '10') ist der aktuelle Takt der Takt #0, im
  • Modus 'Signale suchen, in Sekunden'('Signale suchen, in Sekunden
  • ' kleiner als '10') ist der aktuelle Takt der Takt #1
  • : Parameter - Einschränkung, welche Seite gehandelt werden soll. Kann die Werte 'Nur KAUF-Positionen erlaubt', 'Nur VERKAUF-Positionen erlaubt' und 'KAUF- und VERKAUF-Positionen erlaubt
  • ' annehmen.
  • Parameter 'Zeitsteuerung verwenden' - Zeitrahmen für die Suche nach Handelssignalen von 'Start Stunde':'Start Minute' bis'End Stunde':'End Minute'
  • .
  • Der Parameter "Pips oder Punkte:"
  • definiert die Standardberechnung von Stop Loss, Take Profit und Trailing

    и

    Umkehrung und andere Dinge und die Einbindung von Standardbibliotheken in den Code am Anfang, um die Positionseröffnung zu vereinfachen - STUDY AND DON'T WORRY. Außerdem solltest du dich daran gewöhnen, Standardcode zu schreiben - es gibt Einrückungen und alles andere

    Wenn das Flag"Positionen: Nur eine" auf"true" gesetzt ist, kann der Expert Advisor nicht mehr als eine Position auf dem Markt halten. Das Flag'Positionen: Reverse' ist für die Umkehrung von Signalen zuständig. Interessantes Flag'Positions: Close opposite' - wenn dieses Flag auf'true' gesetzt wird, bevor eine Position eröffnet wird, garantiert es die Löschung der gegenüberliegenden Positionen.Print log' druckt die erweiterte Protokollierung aller Vorgänge. Der Parameter'Freeze and StopsLevels Coefficient' definiert einen Koeffizienten für Stop- und Freeze-Levels für den Fall, dass diese Levels für ein Symbol gleich Null sind. Es wird empfohlen, den Wert "3" zu verwenden.

    Hallo Roman! Ich danke Ihnen für das Beispiel. Ich habe oft versucht, die von Vladimir Karputov geschriebenen Codes zu verstehen, aber für mich ist das immer noch ein unerreichbares Niveau. Etwas später, wenn ich mehr Informationen in meinem Kopf habe, werde ich wahrscheinlich auf seine Codes zurückkommen. Aber danke für den Tipp!

    Mit freundlichen Grüßen, Vladimir.

     
    Vasiliy Sokolov:

    Ich werde Grundsätze formulieren, die ich dem Autor sehr empfehle, damit er weiß, worum es in dem Programm geht. Im Gegensatz zu den Broschüren von Kovalev, in denen ein Teil des Materials korrekt ist, ein Teil grobe Fehler enthält und ein Teil allgemeine Spekulationen mit dem Leser sind, sind diese Prinzipien IMMER und zu 100% korrekt, egal was Sie in MQL schreiben: Expert Advisors, Skripte oder Expert Advisors:

    Erstes Prinzip. Jedes Programm in MQL verarbeitet Ereignisse. Ein Ereignis ist eine Benachrichtigung, die Informationen über etwas enthält, normalerweise über etwas, das sich geändert hat. Zum Beispiel ist ein neuer Tick gekommen oder unser schwebender Auftrag wurde ausgeführt. Es gibt Ereignisse, für die es keine Informationen gibt, sondern die einfach passieren. Zum Beispiel kann das Ereignis "Timer" die Benutzerfunktion mit einer bestimmten Periodizität aufrufen. Der Benutzer wird nicht benachrichtigt, dass sich etwas geändert hat. Es ruft einfach den Code des Benutzers auf und benötigt daher keine zusätzlichen Informationen. Aus der Ereignisdefinition ergeben sich mehrere nicht-triviale Methoden:

    • Die erste Implikation ist, dass wir, sobald wir ein Ereignis erhalten, dieses so schnell wie möglich bearbeiten sollten. Es kann viele Ereignisse geben, und die Ereignisse können sich in einer Warteschlange stapeln. MeteTrader (nicht unser Programm) verarbeitet die Ereignisse. Zu diesem Zweck wird eine besondere Ressource namens Fluss verwendet. Diese Ressource ist sehr wertvoll und begrenzt. Der Thread, der MetaTrader gehört, führt großzügig unseren groben, suboptimalen und langsamen Code aus, der in einem Skript auf der CPU unseres PCs geschrieben wurde. Wenn die Ereignisverarbeitung den Thread in unserem Code verlangsamt, können andere Programme, die im MetaTrader laufen, in manchen Fällen nicht ordnungsgemäß ausgeführt werden. Sie warten darauf, dass wir den Thread von unseren nutzlosen Berechnungen befreien und führen dann ihren Code auf dem befreiten Thread aus.
    • Es gibt viele Veranstaltungen. Wir können viele der verfügbaren Veranstaltungen übernehmen oder auch nur eine. Wenn wir ein Skript erstellen, behandelt es nur ein Ereignis, OnStart, das einmalig auftritt. Wenn wir einen Expert Advisor schreiben, kann er mehrere Ereignisse auf einmal verarbeiten. Das bedeutet, dass es sinnlos ist, Ihr Programm in das Paradigma "Programmiere dieses Buch" zu zwängen. Stattdessen sollten wir einfach verstehen, dass das Programm bestimmte Ereignisse verarbeitet. Sie können in beliebiger Reihenfolge oder überhaupt nicht aufgerufen werden. Die Ereignisse sind unabhängig voneinander. Die Teile des Programms, die diese Ereignisse behandeln, sind also nicht voneinander abhängig. Sie sind nichtlinear und nicht sequentiell.

    (Das ist alles für den Moment, ich fahre fort, wenn mir danach ist).

    Gut gemacht, Vasily, ich warte auf die Fortsetzung, wenn es dir nichts ausmacht, sie zu schreiben! Alles, was Sie mir gesagt haben, war lakonisch und verständlich!

    Mit freundlichen Grüßen, Vladimir.

     
    MrBrooklin:

    Gut gemacht, Vasily, ich freue mich auf die Fortsetzung, wenn du sie schreiben kannst! Alles, was Sie berichten, ist für mich prägnant und verständlich!

    Mit freundlichen Grüßen, Vladimir.

    Ja, ein interessantes Urteil.

    1. Jedes Programm ist eine Hierarchie von Funktionsblöcken und ein System von zusammenhängenden und voneinander abhängigen Parametern.

    2. Das Ereignis ist das Ergebnis der Interaktion des Programms mit der externen Softwareumgebung oder interner Änderungen. Die Umgebung "informiert" über das Ereignis durch den Aufruf des Programms (OnTick, OnChartEvent...).

    4. Die Umgebung (Terminal) ist dem Programm gegenüber neutral, kann es aber beeinflussen.

    5. Das Programm erhält durch spezielle Funktionen Informationen über seine Umgebung im Terminal und im Markt und kann diese in seiner Logik verwenden.

    6. Das Programm kann durch spezielle Abfragen Informationen über sich selbst oder seine Objekte erhalten und diese in seiner Logik verwenden.

    7. Ereignisse werden in if()-Anweisungen beschrieben.

    8. Ereignisse werden von Handlern behandelt, die auf Änderungen reagieren.

    9. Eine Reaktion kann eine Änderung des Zustands von Objekten (Massenänderung ihrer Parameterwerte) oder eine Rechenleistung sein.

    10. Die Ereignisbehandler sind in hierarchischen Strukturen (Ereignismodellen) zusammengefasst.

    11. Software-Objekte können sich für verschiedene Ereignisse anmelden und in die Liste der Empfänger aufgenommen werden.

    ... und vieles mehr... :)

    P.S. Vasiliy wird es besser und deutlicher beschreiben.
     

    Es geht weiter:

    • Da es viele Ereignisse gibt, gibt es auch viele Ereignisbehandler. Da Ereignisse inkonsistent aufgerufen werden, werden auch ihre Ereignisbehandler inkonsistent aufgerufen. Da die Aufrufe nicht konsistent sind, können die Ereignisbehandler nicht voneinander abhängen, und sie können auch nicht von den Daten des jeweils anderen abhängen. Das einzige Konstrukt, das diese strengen Anforderungen erfüllt, ist eine Funktion.
    • Funktionen können nicht voneinander abhängen. Wenn eine Funktion die Summe a+b zurückgibt und die zweite Funktion das Produkt a*b, dann hängt das Ergebnis dieser beiden Funktionen nicht von der Reihenfolge der Aufrufe ab. Wir können die erste Funktion mit den Argumenten 3 und 5 aufrufen und erhalten 8. Dann rufen Sie die zweite Funktion mit denselben Argumenten auf und erhalten 24. Tauschen Sie dann ihre Anrufe aus. Die Ergebnisse werden die gleichen sein. Die Additionsfunktion gibt bei den Argumenten 3 und 5 immer 8 zurück. Die Multiplikationsfunktion gibt immer 24 mit denselben Argumenten zurück.
    • Aus den obigen Ausführungen wird deutlich, dass der Event-Handler nur eine Funktion sein kann. Tritt ein neues Tick-Ereignis ein, wird dies von der Funktion OnTick behandelt. Wenn das Start-Ereignis (ein einmaliger Start des Skripts) eintritt, wird dies von der speziellen Funktion OnStart behandelt.
    • Diese Funktion ist universell. Diese Funktion kann nicht nur Ereignisse verarbeiten. Die Funktion kann etwas Nützliches zurückgeben, z. B. die aktuelle Uhrzeit. Eine Funktion kann komplexe Berechnungen mit den ihr übergebenen Argumenten durchführen und das Endergebnis dieser Berechnungen als einen einzigen Wert zurückgeben. Schließlich kann eine Funktion auch ein Datenlieferant sein: Sie rufen die Funktion auf und erhalten von ihr die benötigten Daten, wie z. B. Zitate.
    • Intern besteht der MetaTrader aus Tausenden von Funktionen, von denen etwa 1500 Tausend den Benutzern zur Verfügung stehen. Dies sind sehr nützliche Funktionen. Sie ermöglichen es Ihnen, die Systemzeit zu überprüfen und die Daten für ein Instrument, das Sie interessiert, zu erhalten. Die Funktionen werden verwendet, um Handelsaufträge zu senden. Sie können das ICL-Handbuch öffnen und sehen, dass es aus Funktionen und ihren Argumenten besteht. Der MetaTrader ist also, was die Benutzerprogramme betrifft, ein einziger großer Satz von Funktionen.
    • Universelle Funktionen sind nicht genug. Ganz gleich, wie viele neue Funktionen dem System hinzugefügt werden, es wird immer einen Mangel an ihnen geben. Der Grund dafür ist, dass jeder Mensch andere Bedürfnisse hat. Es gibt keine Einheitsgröße, die für alle Gelegenheiten geeignet ist. Die meisten allgemeinen und universellen Funktionen sind bereits im MetaTrader enthalten und werden uns freundlicherweise zur Verfügung gestellt. Die Bedürfnisse der Nutzer sind jedoch endlos. MetaQuotes kann nicht auf die individuellen Bedürfnisse von 100.000 Nutzern ihres Terminals eingehen. Stattdessen haben sie etwas Flexibleres gemacht: Sie lassen die Nutzer die Funktionen, die sie wollen, selbst erstellen. Dies kam den Nutzern zugute. Anstatt eine Systemfunktion zu verwenden, die für sie nicht geeignet ist, können sie ihre eigene Funktion schreiben, die ihr Problem perfekt löst. Keine Systemfunktion ist aufgrund ihrer Universalität perfekt.
    • Die Fähigkeit eines Benutzers, seine eigenen Funktionen zu schreiben und zu verstehen, wie sie funktionieren, zeigt, wie gut ein Programmierer ist. Wenn er/sie versteht, dass ein Programm eine unzusammenhängende Menge von Handlern (in Form von Funktionen) ist, die eingehende Ereignisse nicht konsistent behandeln, ist es gut. Wenn er weiß, wie man seine eigenen Funktionen schreibt, ist das ein weiterer Pluspunkt. Wenn er die Arbeit mehrerer Funktionen (sowohl seiner eigenen als auch der Systemfunktionen) in einem gemeinsamen Algorithmus zusammenfassen kann, ist das ein weiterer Pluspunkt für ihn.
    • Wenn Sie verstehen, dass alles im MetaTrader (der vierte und fünfte) irgendwie auf Funktionen, Funktionen und Funktionen basiert, wird plötzlich alles klar. Die Hilfe wird nicht mehr als dickes Buch mit einem Haufen verstreuter Codeschnipsel präsentiert, sondern als Leitfaden für die verfügbaren Funktionen und ihre Funktionen. Alles andere, wie Datentypen, Arrays, Strukturen, Klassen, ist irrelevant. Es geht darum, Funktionen zu unterstützen, damit sie etwas zurückgeben und etwas annehmen können.

    (das ist alles für den Moment)
     
    Sie haben einen Neuankömmling mit nutzlosen Informationen überflutet.)
     
    Реter Konow:
    Ein Anfänger wird mit nutzlosen Informationen überflutet).

    Das bedeutet, dass Sie Ihre Begierde nicht auf diese Weise zur Schau stellen sollten. Vladimir hätte genauso gut Fragen zu dieser oder jener Funktion stellen können und nützliche Ratschläge erhalten, anstatt den Unsinn von "Experten" wie C++ lernen oder Assembler lernen. Sie könnten mit dem Studium von Lochkarten beginnen.

    Grund der Beschwerde: