![MQL5 - Sprache von Handelsstrategien, eingebaut ins Kundenterminal MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
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
Wahrscheinlich, weil ich nicht für ein Unternehmen arbeite. Und ich finde es einfacher, prozedurale Programmierung zu verwenden als OOP.
Darüber hat es natürlich viele Diskussionen gegeben.
Nun, gerade in der letzten Woche habe ich einige Änderungen am Algorithmus zur Einschätzung der Handelsqualität für meine TS-Liga vorgenommen. Und ich bin sehr froh, dass alles auf virtuellen Schnittstellen basiert.
Der Punkt ist, dass zuvor die maximale Inanspruchnahme nur per Saldo geschätzt wurde. Und ich wollte es nach Eigenkapital schätzen. Um dies zu tun, muss man bei der Analyse der Historie für jede Transaktion die Zeitreihe abfragen und sehen, wie hoch der maximale Drawdown der Transaktion auf der Grundlage der damaligen Preise war.
Denken Sie daran, dass mein Code portabel ist, d.h., dass er auf der gleichen Schnittstelle basiert - sowohl MT4 als auch MT5 funktionieren. Dementsprechend wird für jede Plattform - die entsprechende Klasse mit ihren eigenen Funktionen aufgerufen, die sich deutlich unterscheiden. Während ich also den Code änderte, kam ich wahrscheinlich ein Dutzend Mal in eine Situation, in der ich nicht in der Lage war, direkt auf die benötigten Daten zuzugreifen - die Schnittstellen ließen dies nicht zu. Und jedes Mal habe ich mich vergewissert, dass ich richtig lag, dass die Schnittstellen mich eingeschränkt hatten - wenn ich diese Daten direkt "angezapft" hätte, hätte das zu Fehlern in anderen Teilen des Programms geführt. Auf die Daten, die ich benötigte, musste ich auf andere Weise zugreifen, nämlich durch zusätzliche Abfragen, wodurch ich sicher sein konnte, dass keine anderen Teile betroffen waren.
Zusammenfassend: Ich bin einmal mehr davon überzeugt, dass der Grundsatz "der Nutzer muss an jedem Ort nur auf die Strukturen zugreifen können, die er gerade braucht, und auf keine anderen" absolut richtig ist. Sie können nicht zulassen, dass der Benutzer immer auf alles zugreifen kann - das ist mit Änderungsfehlern behaftet.
Andererseits schränken sich Menschen, die an einen prozeduralen Stil gewöhnt sind, in solchen Fällen einfach ein, indem sie sich merken, welche Daten an einer bestimmten Stelle geändert werden können und welche nicht.
Nun, gerade in der letzten Woche habe ich einige Änderungen am Algorithmus zur Bewertung der Handelsqualität für meine Liga TS vorgenommen. Und ich bin sehr froh, dass alles auf virtuellen Schnittstellen basiert.
Der Punkt ist, dass zuvor die maximale Inanspruchnahme nur per Saldo geschätzt wurde. Und ich wollte es nach Eigenkapital schätzen. Um dies zu tun, muss man bei der Analyse der Historie für jede Transaktion die Zeitreihe abfragen und sehen, wie hoch der maximale Drawdown der Transaktion auf der Grundlage der damaligen Preise war.
Denken Sie daran, dass mein Code portabel ist, d.h., dass er auf der gleichen Schnittstelle basiert - sowohl MT4 als auch MT5 funktionieren. Dementsprechend wird für jede Plattform - die entsprechende Klasse mit ihren eigenen Funktionen aufgerufen, die sich deutlich unterscheiden. Während ich also den Code änderte, kam ich wahrscheinlich ein Dutzend Mal in eine Situation, in der ich nicht in der Lage war, direkt auf die benötigten Daten zuzugreifen - die Schnittstellen ließen dies nicht zu. Und jedes Mal habe ich mich vergewissert, dass ich richtig lag, dass die Schnittstellen mich eingeschränkt hatten - wenn ich diese Daten direkt "angezapft" hätte, hätte das zu Fehlern in anderen Teilen des Programms geführt. Auf die Daten, die ich benötigte, musste ich auf andere Weise zugreifen, nämlich durch zusätzliche Abfragen, wodurch ich sicher sein konnte, dass keine anderen Teile betroffen waren.
Zusammenfassend lässt sich sagen, dass ich einmal mehr davon überzeugt war, dass der Grundsatz "der Benutzer muss an jedem Ort nur auf die Strukturen zugreifen können, die er gerade braucht, und auf keine anderen" absolut richtig ist. Sie dürfen nicht zulassen, dass der Benutzer immer Zugriff auf alles hat, was er braucht - das könnte zu Änderungsfehlern führen.
Andererseits beschränken sich Menschen, die an den verfahrenstechnischen Stil gewöhnt sind, in solchen Fällen darauf, sich zu merken, welche Daten an einer bestimmten Stelle geändert werden können und welche nicht.
Nun, das ist der Wettbewerb. Daran kann man nichts ändern. Geben Sie nicht auf, sondern machen Sie weiter und gewinnen Sie. Sonst bleiben Sie auf der Strecke.
Vergessen Sie die PLO. Wenn Sie diese Frage stört, kann ich Ihnen sagen, dass Sie beim Programmieren nur das verwenden müssen, worauf Sie verzichten können. Wenn Sie mit prozeduralem Stil arbeiten können, tun Sie das.
Mein Grundsatz:"Wenn man bei der Lösung einer Aufgabe auf etwas verzichten kann, sollte man es auf jeden Fall weglassen".
Braucht der Hund ein fünftes Bein? :)
Ganz genau.
Das ist die Art von Wettbewerb, die Sie brauchen.
Sie würden sich wundern, aber ich leide immer noch unter prozeduraler Programmierung.
Ich bin mit 14 Jahren in den Pascal eingestiegen und kann mich nicht mehr ändern. Und ich habe den Unterricht schon vor langer Zeit "gelernt", aber ich kann meine Meinung nicht ändern...
Wahrscheinlich, weil ich nicht für ein Unternehmen arbeite. Und ich finde es einfacher, prozedurale Programmierung zu verwenden als OOP.
OOP-Prinzipien unterscheiden sich nicht wesentlich von der prozeduralen Programmierung, zumal in MQL-Programmen die Aufgaben hochspezialisiert sind und es oft keinen Sinn macht, die interne Struktur einer Klasse zu entwickeln. Mehr als 90 % der Beispiele, in denen in Codobase Klassen verwendet werden, sind nichts anderes als prozedurale Programmierung "wrapped in class", weil Aufgaben, die von einer Klasse gelöst werden, nur einmal ausgeführt werden und Vererbung und Polymorphismus nicht verwendet werden (weil es nicht notwendig ist).
Und schwerwiegende Probleme, bei denen es keinen Weg ohne OOP gibt - das ist eine Grafik. Dieses Problem wurde bereits gelöst und ist frei zugänglich, man muss nur wissen, wie man es benutzt oder modifiziert (z.B. Vererbung).
Sie haben es bereits getan und es ist frei verfügbar, man muss nur wissen, wie man es benutzt (Grafiken in MQL) oder wie man es vererbt (wie man Vererbung benutzt).
ZZZY: das ist, was ich nicht über die Nutzbarkeit in Bezug auf ALGLIB sagen werde - es sollte sicherlich in einer normalen Klasse "verpackt" werden!
Igor Makanu:
...
Und ernsthafte Aufgaben, bei denen man auf OOP nicht verzichten kann, sind Grafiken...
Sehr umstritten.))
Sehr umstritten.))
Die Prinzipien der OOP unterscheiden sich nicht wesentlich von der prozeduralen Programmierung, insbesondere in MQL-Programmen sind die Aufgaben hochspezialisiert und es macht oft keinen Sinn, die interne Struktur einer Klasse zu entwickeln. Über 90 % der Beispiele, in denen in Codobase Klassen verwendet werden, sind nichts anderes als prozedurale "Wrapped-in-Class"-Programmierung, weil Aufgaben, die von einer Klasse gelöst werden, nur einmal ausgeführt werden und Vererbung und Polymorphismus nicht verwendet werden (weil es nicht nötig ist).
Und schwerwiegende Probleme, bei denen es keinen Weg ohne OOP gibt - das ist eine Grafik. Dieses Problem wurde bereits gelöst und ist frei zugänglich, man muss nur wissen, wie man es benutzt oder modifiziert (z.B. Vererbung).
Sie haben es bereits getan und es ist frei verfügbar, man muss nur wissen, wie man es benutzt (Grafiken in MQL) oder wie man es vererbt (wie man Vererbung benutzt).
ZZZY: das ist, was ich nicht über die Nutzbarkeit in Bezug auf ALGLIB sagen werde - es sollte sicherlich in einer normalen Klasse "verpackt" werden!
Es kommt darauf an, wofür.
Aus Gründen der Benutzerfreundlichkeit für andere Nutzer?
Möglicherweise, ja.
Damit die Nutzer nicht den Drang verspüren, "herumzuspielen" und Schaden anzurichten.
Ich verwende 5 Zeichenfunktionen für meine Grafiken (Text, Schaltfläche, Kontrollkästchen, Feld, Hintergrund) !)
Für mich ist alles klar. Andere brauchen es nicht zu sehen.
Ganz genau.
Das ist die Art von Wettbewerb, die wir brauchen.
Ich träume davon, dass ein solcher Wettbewerb auf unserem Markt zunehmen wird. Nur der Markt muss aufgeräumt werden.
Um das Schwimmen zu perfektionieren, muss der Pool zunächst gereinigt und dann mit Wasser gefüllt werden. Kurzum, es müssen die richtigen Bedingungen herrschen.
Wenn das Schwimmbecken schmutzig ist, wird niemand mitmachen wollen. :)Nun, gerade in der letzten Woche habe ich einige Änderungen am Algorithmus zur Bewertung der Handelsqualität für meine Liga TS vorgenommen. Und ich bin sehr froh, dass alles auf virtuellen Schnittstellen basiert.
Der Punkt ist, dass zuvor die maximale Inanspruchnahme nur per Saldo geschätzt wurde. Und ich wollte es nach Eigenkapital schätzen. Um dies zu tun, muss man bei der Analyse der Historie für jede Transaktion die Zeitreihe abfragen und sehen, wie hoch der maximale Drawdown der Transaktion auf der Grundlage der damaligen Preise war.
Denken Sie daran, dass mein Code portabel ist, d.h., dass er auf der gleichen Schnittstelle basiert - sowohl MT4 als auch MT5 funktionieren. Dementsprechend wird für jede Plattform - die entsprechende Klasse mit ihren eigenen Funktionen aufgerufen, die sich deutlich unterscheiden. Während ich also den Code änderte, kam ich wahrscheinlich ein Dutzend Mal in eine Situation, in der ich nicht direkt auf die benötigten Daten zugreifen konnte - die Schnittstellen ließen es nicht zu. Und jedes Mal habe ich mich vergewissert, dass ich richtig lag, dass die Schnittstellen mich eingeschränkt hatten - wenn ich diese Daten direkt "angezapft" hätte, hätte das zu Fehlern in anderen Teilen des Programms geführt. Auf die Daten, die ich benötigte, musste ich auf andere Weise zugreifen, nämlich durch zusätzliche Abfragen, wodurch ich sicher sein konnte, dass keine anderen Teile betroffen waren.
Zusammenfassend: Ich bin einmal mehr davon überzeugt, dass der Grundsatz "der Nutzer muss an jedem Ort nur auf die Strukturen zugreifen können, die er gerade braucht, und auf keine anderen" absolut richtig ist. Der Benutzer darf nicht immer Zugriff auf alles haben, was er braucht - das kann zu Änderungsfehlern führen.
Andererseits schränken sich Menschen, die an einen prozeduralen Stil gewöhnt sind, in solchen Fällen einfach ein und merken sich, welche Daten an einer bestimmten Stelle geändert werden können und welche nicht.
Bei allem Respekt, aber Ihre Argumente sind wie die eines sehr alten Mannes, der die Notwendigkeit des Stocks, auf den er sich stützt, erklärt und beweist. Sie sagen, dass ich ohne sie sicher umfallen werde. Das ist wahr. Aber nicht für jeden.
Sehr umstritten.))
Vielleicht, aber ich bin auch ein "Dinosaurier aus den späten 90ern". Ich habe Turbo Pascal und die Grundlagen der Grafik in Form von Bibliotheken gesehen, aus denen - egal wie man es dreht und wendet - man immer noch Norton Commander )))) bekommt.
Aber mit dem Aufkommen (und meinem Übergang) zu Delphi, wie man so schön sagt, hat das Leben einfach angefangen.... Ich kann mir nicht vorstellen, wie man aktive Fenster, Kontrollkästchen usw. ohne OOP machen kann, theoretisch schon, aber ich sehe nicht einmal, wie man es ohne OOP machen kann, wie man sagt, man gewöhnt sich an eine gute Sache!
Bei allem Respekt, Ihre Argumente sind wie die eines sehr alten Mannes, der die Notwendigkeit des Stocks, auf den er sich stützt, erklärt und beweist. Ohne sie falle ich zwangsläufig um. Das ist wahr. Aber nicht für jeden.
Wenn ich mich recht erinnere, können Sie sich sehr gut an alles erinnern, was in Ihrem riesigen Datensatz steht. Ich hingegen konnte mich an solche Dinge nicht einmal erinnern, als ich jung war. Jetzt, wo ich ein alter Mann bin, kann ich mich sicher nicht mehr an alles erinnern, was ich meinte, als ich einen bestimmten Satz schrieb. Dieser "Stick" hilft mir wirklich sehr. Aber ich stimme zu, wenn jemand in der Lage ist, alles Notwendige in seinem Gedächtnis zu behalten, kann er darauf verzichten.
Dennoch habe ich den Code von fxsaber schon mehrmals zitiert, ohne dass er mir genau sagen konnte, wie er funktioniert. Es ist nur so, dass es sehr knifflige und nicht offensichtliche Prüfungen gibt, die in der Tat schwer zu merken sind. Und der Mann kann sich nicht erinnern. Sie waren sich einig, dass "dieser Code viele Male überprüft wurde, so dass man ihm vertrauen kann". Aber was wird passieren, wenn einige Arbeitsprotokolle geändert werden? Der Code wird sofort ungültig, und in diesem Fall muss er - anstatt zu korrigieren, was sich geändert hat - erneut überprüft werden, bis diese veränderte Stelle gefunden wird.
Dafür sind diese "Sticks" gedacht. Softwareprodukte sind heute so kompliziert, dass es unrealistisch ist, alle ihre Feinheiten im Kopf zu behalten. Aus diesem Grund werden verschiedene Techniken verwendet (OOP ist nur eine davon).