Sie verpassen Handelsmöglichkeiten:
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Registrierung
Einloggen
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Wenn Sie kein Benutzerkonto haben, registrieren Sie sich
***Ps: (Ich will das nicht vergessen). Sicherlich mögen es die meisten von uns nicht, nicht zu wissen, was in den Codes steht, die wir verwenden. Oder wir verausgaben uns bei dem Versuch, die Codes von jemand anderem zu verstehen, sonst würden wir sie wahrscheinlich nicht verwenden. Die meisten der nativen Funktionen (z.B. OrderSend()) in mql4 sind jedoch aus unserer Sicht Objekte. Wir sehen ihre Codes nicht, aber wir akzeptieren sie. Ich glaube, dass diese Akzeptanz von Bibliotheken anderer Leute etwas ist, das ein professioneller_oop_Programmierer, der an großen Projekten arbeitet, akzeptieren und darauf aufbauen muss. Ansonsten muss man das Rad neu erschaffen.
Ich glaube, du beschreibst einen Programmablauf. Ich glaube nicht, dass das die große Idee hinter OOP ist. (imo) OOP versucht, die folgenden Probleme zu lösen. Ich bin ein OOP-Noob, aber ich bilde mir mein Weltbild darüber.
1) Sind Ihre Funktionen unabhängig von globalen Variablen? Mit anderen Worten, sind Ihre Funktionen eigenständige Objekte? Verkapselung
2) Versteckt Ihre Funktion Details wie lokale_Variablennamen? Vereinfacht sie das Volumen des Codes auf dem Bildschirm? Abstraktion
3) Hat die Funktion die Möglichkeit, Duplikate von sich selbst für Änderungen zu erstellen? Wie die Möglichkeit, eigene Datentypen zu erstellen? Vererbung.
4) Hat sie die Fähigkeit, sich während des Betriebs zu ändern? Beispiel: Kann die Funktion sowohl integer_array als auch double_arrays verarbeiten? Polymorphismus.
Die Art und Weise, wie OOP bei der Erstellung von ea helfen kann, ist vergleichbar mit der Art und Weise, wie ein ea_builder einem Nicht-Programmierer hilft, einen Expert_Advisor zu erstellen. Man schnappt sich einfach seine bevorzugte Order_Accounting_Function -> Data_Function -> Event Tracking Function -> Volume Defining Function -> Trading Criteria Defining Function -> Trade Functions -> Error Processing Function. Und bumm, schon haben Sie einen Expert_Advisor. Alle Ihre Handelskriterien definierenden Funktionen, die Sie im Laufe der Jahre entwickelt haben, können einfach ein- oder ausgetauscht werden.
Wenn Sie z.B. meinen Expert_Advisor ändern wollten, müssten Sie untersuchen, wo meine globalen Variablen verwendet werden und welche andere Funktion davon abhängt (z.B. Ihr Status oder Ihre Status-Arrays). OOP macht es so einfach wie Accounting(Option_3); Display(Option_1); Caption(Option_5); TradingSys(Option_7); VolumeSize(Option2); OrderType(Option_2) und das ist der gesamte Experte.
Das macht es für andere einfacher, Ihre Bibliotheken zu verwenden, und was für andere funktioniert, funktioniert in der Regel auch für Sie selbst in der Zukunft. Denken Sie einfach an eigenständige Objekte am Fließband :)
Ich habe ein wenig mit MQL5 herumprobiert und musste in dem von mir geschriebenen Code keine OOP verwenden
Klassen und OOP sind in MQL5 eher ein optionales Zusatzmodul. Das Plattform-Framework verwendet sie nicht selbst. Man könnte zum Beispiel erwarten, dass die Plattform so etwas wie eine Orders-Sammlung hat, die eine Liste von Order-Objekten enthält, so dass man Code wie den folgenden schreiben kann:
Aber das ist nicht der Fall. Stattdessen ist die Art und Weise, wie Sie dies tun, im Grunde identisch zwischen MQL4 und MQL5:
(Sie könnten auch erwarten, dass jeder EA, den Sie schreiben, eine Klasse ist, die von einer ExpertAdvisor-Klasse abgeleitet ist, die Dinge wie virtuelle OnTick- und OnInit-Funktionen in ihrer Deklaration hat. Aber auch das ist nicht der Fall. Das MQL5-Framework bleibt grundsätzlich nicht OOP, aber mit der Option für Sie, OOP selbst für alle Aufgaben zu verwenden, bei denen es nützlich ist).
Infolgedessen können Sie weiterhin MQL4-Code auf MQL5 über eine Reihe von Hilfsfunktionen wie string OrderSymbol() {return OrderGetString(ORDER_SYMBOL);} verwenden. Der einzige Bereich, in dem dies nicht funktioniert, ist der Zugriff auf Zeitreihen, da dieser in MQL5 ganz anders organisiert ist. Eine Funktion wie iOpenMQL4() in https://www.mql5.com/en/articles/81 funktioniert zwar, ist aber schrecklich langsam und ineffizient bei wiederholter Verwendung.
(Falls es noch jemanden interessiert, der Fehlerbericht, der den Anstoß zu diesem Thread gab, gilt auch noch für Build 535. Das gilt auch für https://forum.mql4.com/56885/page20#861740, obwohl es so aussieht, als ob MetaQuotes einen gescheiterten Versuch unternommen hat, diesen Fehler zu beheben).
Ich stimme mit RaptorUK überein, die Dokumentation auf mql5.com über OOP ist zumindest unvollkommen. Aber leider kenne ich keine gute Referenz über OOP. Alles, was ich gelesen habe, ist entweder zu abstrakt oder zu grundlegend, mit Birne und Apfel als Beispiel für Objekte und Obst als Klasse.
OOP-Programmierung ist nur sinnvoll, wenn Sie ein großes Projekt haben. Ein großes Projekt ist nicht unbedingt 1 EA, Ihr Projekt kann sein, eine Reihe von EA mit Indikator, etc. zu bauen... Dann ist es gut, Code wiederverwenden, und OOP ist vor allem über Code-Wiederverwendung, es hilft Ihnen, eine Struktur zu bauen, die leicht in anderen Programm wiederverwendet werden kann. Leider habe ich jetzt nicht die Zeit, mich damit näher zu befassen. Aber ich habe vor, einige Artikel darüber zu schreiben.
Ein Beispiel für ein großes Projekt ist der von Metaquotes entwickelte MQL5 Wizard. Mit ihm können Sie innerhalb von 5 Minuten einen EA mit einigen Benutzereingaben erstellen. Er basiert auf der mql5 Standard Libray, die alle notwendigen Elemente für die Erstellung eines EA bereitstellt. Derselbe Assistent kann wahrscheinlich auch auf prozedurale Weise erstellt werden, aber das wäre meiner Meinung nach viel schwieriger. Und dann müssen Sie diesen Code pflegen. Aber diese Standardlibray ist schwer zu verstehen, da sie nicht gut dokumentiert und beschrieben ist. Ich habe ein Thema erstellt , um alles zu zentralisieren, was es zu diesem Thema gibt (mql5 wizard nicht oop).
Ich glaube, du beschreibst einen Programmablauf. Ich glaube nicht, dass das die große Idee hinter OOP ist. (imo) OOP versucht, die folgenden Probleme zu lösen. Ich bin ein OOP-Noob, aber ich bilde mir mein Weltbild darüber.
1) Sind Ihre Funktionen unabhängig von globalen Variablen? Mit anderen Worten, sind Ihre Funktionen eigenständige Objekte? Verkapselung
2) Versteckt Ihre Funktion Details wie lokale_Variablennamen? Vereinfacht sie das Volumen des Codes auf dem Bildschirm? Abstraktion
3) Hat die Funktion die Möglichkeit, Duplikate von sich selbst zu erstellen, um Änderungen vorzunehmen? Wie die Möglichkeit, eigene Datentypen zu erstellen? Vererbung.
4) Hat sie die Fähigkeit, sich während des Betriebs zu ändern? Beispiel: Kann die Funktion sowohl integer_array als auch double_arrays verarbeiten? Polymorphismus.
Die Art und Weise, wie OOP bei der Erstellung von ea helfen kann, ist vergleichbar mit der Art und Weise, wie ein ea_builder einem Nicht-Programmierer hilft, einen Expert_Advisor zu erstellen. Man schnappt sich einfach seine bevorzugte Order_Accounting_Function -> Data_Function -> Event Tracking Function -> Volume Defining Function -> Trading Criteria Defining Function -> Trade Functions -> Error Processing Function. Und bumm, schon haben Sie einen Expert_Advisor. Alle Ihre Handelskriterien definierenden Funktionen, die Sie im Laufe der Jahre entwickelt haben, können einfach ein- oder ausgetauscht werden.
Wenn Sie z.B. meinen Expert_Advisor ändern wollten, müssten Sie untersuchen, wo meine globalen Variablen verwendet werden und welche andere Funktion davon abhängt (z.B. in Ihren Status- oder Status-Arrays). OOP macht es so einfach wie Accounting(Option_3); Display(Option_1); Caption(Option_5); TradingSys(Option_7); VolumeSize(Option2); OrderType(Option_2) und das ist der gesamte Experte.
Das macht es für andere einfacher, Ihre Bibliotheken zu verwenden, und was für andere funktioniert, funktioniert in der Regel auch für Sie selbst in der Zukunft. Denken Sie einfach an eigenständige Objekte am Fließband :)
Klassen und OOP sind in MQL5 eher eine optionale Ergänzung. Das Plattform-Framework verwendet sie nicht selbst. Man könnte zum Beispiel erwarten, dass die Plattform so etwas wie eine Orders-Sammlung hat, die eine Liste von Order-Objekten enthält, so dass man Code wie den folgenden schreiben kann:
Aber das ist nicht der Fall. Stattdessen ist die Art und Weise, wie Sie dies tun, im Grunde identisch zwischen MQL4 und MQL5:
(Sie könnten auch erwarten, dass jeder EA, den Sie schreiben, eine Klasse ist, die von einer ExpertAdvisor-Klasse abgeleitet ist, die Dinge wie virtuelle OnTick- und OnInit-Funktionen in ihrer Deklaration hat. Aber auch das ist nicht der Fall. Das MQL5-Framework bleibt grundsätzlich nicht OOP, aber mit der Option, dass Sie selbst OOP für alle Aufgaben verwenden können, bei denen es nützlich ist).
Infolgedessen können Sie weiterhin MQL4-Code auf MQL5 über eine Reihe von Hilfsfunktionen wie string OrderSymbol() {return OrderGetString(ORDER_SYMBOL);} verwenden. Der einzige Bereich, in dem dies nicht funktioniert, ist der Zugriff auf Zeitreihen, da dieser in MQL5 ganz anders organisiert ist. Eine Funktion wie iOpenMQL4() in https://www.mql5.com/en/articles/81 funktioniert zwar, ist aber bei wiederholter Verwendung schrecklich langsam und ineffizient.
OOP ist derzeit recht weit verbreitet und wird mehr echte Programmierer für die MQL begeistern. Aber der Editor, der wie ein Notizblock aussieht, wird die meisten von ihnen abschrecken, da bin ich mir sicher.