globale Initialisierung fehlgeschlagen!!!!!!! - Seite 6

 
SDC:

Sie verwenden int OnCalculate() anstelle von int start(). Es wird bei jedem Tick wie start() ausgeführt. Ein Vorher-Nachher-Bild würde etwa so aussehen,

Die formalen Parameter von OnCalculate machen es eigenständiger, der Programmierer muss sich nicht darauf verlassen, alle möglichen Globals aufzurufen, was in Op-Kreisen offenbar als böser, schlechter Programmierer gilt. In der Praxis gibt es eigentlich keinen großen Unterschied zwischen den beiden Methoden. Außerdem ist OnCalculate das gleiche wie mql5, so dass man die Möglichkeit hat, kompatiblen Code zu schreiben.


Danke, SDC. Ich glaube, ich verstehe, worauf Sie hinauswollen. Ich bin mir nicht sicher, ob mir die Richtung, die MetaQuotes damit einschlägt, gefällt. Sie machen dasselbe, was Microsoft gemacht hat. Es mag das Programmieren einfacher machen, aber es schränkt das Bedürfnis des Programmierers ein, zu verstehen, was wirklich "unter der Haube" vor sich geht, sozusagen. Das ist meiner Meinung nach ein großes Problem, weil es die Fähigkeiten und das Verständnis der Programmierer einschränkt. Wenn man das, was man tut, beherrschen will, muss man es von der grundlegendsten Ebene bis hin zu den höheren Konzepten verstehen. Ich habe 1978 mit dem Programmieren begonnen. Wir schrieben in Binär- und Oktalcode. Die meisten Leute hätten heute keine Ahnung. Microsoft hat die Programmiersprachen so weit entwickelt, dass der Programmierer nicht mehr weiß, was unter der Haube wirklich vor sich geht, und das ist nicht zu unserem Vorteil. Die Absicht von Microsoft ist es, dafür zu sorgen, dass nur ihre Programmierer wissen, was auf den unteren Ebenen wirklich vor sich geht, und alle anderen sich auf sie verlassen müssen.

Ein Beispiel dafür, wovon ich spreche, ist die Entwicklung von C++ zu C#. Angeblich soll C# den Programmierern das Leben erleichtern, indem es die "Klempnerarbeit" auf niedriger Ebene für sie erledigt und sie davon befreit, dass sie selbst wissen müssen, wie es geht, und dabei auch noch die Entwicklungszeit beschleunigt. Sicher, das wurde erreicht, aber zu welchem Preis? Wir "alten Hasen" verstehen den direkten Speicherzugriff und wie man ihn benutzt. Wir wissen, was "unter der Haube" vor sich geht. Ich musste schon oft gezielt eine bestimmte Menge an Speicher zuweisen oder den Speicher byteweise oder sogar bitweise manipulieren. Hat jemand, der nur die High-Level-"Wolke" von C# kennt, eine Ahnung davon? Nö. Rufen Sie Microsoft an.

Ich weiß, dass ich hier ins Schwärmen geraten bin, aber ich denke, dass MetaQuotes sich in dieselbe Richtung bewegt, und das ist keine gute Sache. Das ist ganz sicher nicht gut, wenn es um die Entwicklung von APS geht, die mit Echtzeitdaten arbeiten müssen. In unserem Bereich könnte ein Fehler jemanden eine Menge Geld kosten. Ich kann damit leben, wenn ich bei einer Anwendung, die ich nur für meinen persönlichen Gebrauch plane, Mist baue. Wenn ich bei einer App, die ich verkaufe, Mist baue, ist das nicht akzeptabel.

Übrigens glaube ich nicht, dass Globals, wie sie in OOP verwendet werden, und Globals, wie sie in MQL verwendet werden, dasselbe Konzept sind. MQL ist immer noch ein Kleinkind in Bezug auf eine echte objektorientierte Sprache. In der Tat bedeutet "global" in OOP nichts. Sie wird als "statische" Variable bezeichnet und steht allen Objekten zur Verfügung, die aus derselben Klasse erstellt wurden, sowie allen Klassen in einer abgeleiteten Hierarchie. Sie ist aus Gründen der Datenkapselung verpönt und ein Alptraum für die Wartung, vor allem wenn sie in einer Klasse auf sehr hoher Ebene verwendet wird, von der alles in einer Anwendung abhängt.

 

Wenn Sie die Zahlen von einem Konto abrufen wollen, müssen Sie einfach AccountBalance() verwenden.

Wenn Sie also wirklich wissen wollen, wie genau der Kontostand ermittelt wird, haben Sie keine Ahnung. Das wissen nur die Entwickler.

 
ProfessorMetal:


Danke, SDC. Ich glaube, ich verstehe, worauf Sie hinauswollen. Ich bin mir nicht sicher, ob mir die Richtung, die MetaQuotes damit einschlägt, gefällt. Sie tun dasselbe, was Microsoft getan hat. Es mag das Programmieren einfacher machen, aber es schränkt das Bedürfnis des Programmierers ein, zu verstehen, was wirklich "unter der Haube" vor sich geht, sozusagen. Das ist meiner Meinung nach ein großes Problem, weil es die Fähigkeiten und das Verständnis der Programmierer einschränkt. Wenn man das, was man tut, beherrschen will, muss man es von der grundlegendsten Ebene bis hin zu den höheren Konzepten verstehen. Ich habe 1978 mit dem Programmieren begonnen. Wir schrieben in Binär- und Oktalcode. Die meisten Leute hätten heute keine Ahnung. Microsoft hat die Programmiersprachen so weit entwickelt, dass der Programmierer nicht mehr weiß, was unter der Haube wirklich vor sich geht, und das ist nicht zu unserem Vorteil. Die Absicht von Microsoft ist es, dafür zu sorgen, dass nur ihre Programmierer wissen, was auf den unteren Ebenen wirklich vor sich geht, und alle anderen sich auf sie verlassen müssen.

Ein Beispiel dafür, wovon ich spreche, ist die Entwicklung von C++ zu C#. Angeblich soll C# den Programmierern das Leben erleichtern, indem es die "Klempnerarbeit" auf niedriger Ebene für sie erledigt und sie davon befreit, dass sie selbst wissen müssen, wie es geht, und dabei auch noch die Entwicklungszeit beschleunigt. Sicher, das wurde erreicht, aber zu welchem Preis? Wir "alten Hasen" verstehen den direkten Speicherzugriff und wie man ihn benutzt. Wir wissen, was "unter der Haube" vor sich geht. Ich musste schon oft gezielt eine bestimmte Menge an Speicher zuweisen oder den Speicher byteweise oder sogar bitweise manipulieren. Hat jemand, der nur die High-Level-"Wolke" von C# kennt, eine Ahnung davon? Nö. Rufen Sie Microsoft an.

Ich weiß, dass ich hier ins Schwärmen geraten bin, aber ich denke, dass MetaQuotes sich in dieselbe Richtung bewegt, und das ist nicht gut. Das ist ganz sicher nicht gut, wenn es um die Entwicklung von APS geht, die mit Echtzeitdaten arbeiten müssen. In unserem Bereich könnte ein Fehler jemanden eine Menge Geld kosten. Ich kann damit leben, wenn ich bei einer Anwendung, die ich nur für meinen persönlichen Gebrauch plane, Mist baue. Wenn ich bei einer App, die ich verkaufe, Mist baue, ist das nicht akzeptabel.

Übrigens glaube ich nicht, dass Globals, wie sie in OOP verwendet werden, und Globals, wie sie in MQL verwendet werden, dasselbe Konzept sind. MQL ist immer noch ein Kleinkind in Bezug auf eine echte objektorientierte Sprache. In der Tat bedeutet "global" in OOP nichts. Es handelt sich um eine "statische" Variable, die allen Objekten zur Verfügung steht, die aus derselben Klasse erzeugt wurden, sowie allen Klassen in einer abgeleiteten Hierarchie. Sie ist aus Gründen der Datenkapselung verpönt und ein Alptraum für die Wartung, vor allem wenn sie in einer Klasse auf sehr hoher Ebene verwendet wird, von der alles in einer Anwendung abhängt.

Nun, ich denke, die Richtung von MQ geht in Richtung mql4 - mql5 Kompatibilität. Sie werden sehen, dass wir mit OnTick, OnTimer, OnCalculate und einer Reihe von mql5 Funktionen, die uns jetzt zur Verfügung stehen, bereits in mql5 Gebiet abdriften. Sie werden jedoch feststellen, dass es dadurch nicht einfacher wird. Wenn überhaupt, dann ist die neue Version härter für uns als vorher. Das alte mql4 erlaubte uns, wirklich schlampigen Code zu schreiben und damit durchzukommen, die neue Version erwartet von uns, dass wir genauer sind.
 

Aus diesem Grund kann der ea-Generator nicht mehr verwendet werden. Wenn der Code nicht aktualisiert wird, müssen Sie die Indi/Ea wirklich selbst programmieren.

In der Praxis ist Disziplin der Schlüssel zur Programmierung. Es ist hart, aber man wird immer leistungsfähiger beim Programmieren.

 
SDC:
Ich denke, die Richtung, in die sich MQ bewegt, ist die Kompatibilität zwischen mql4 und mql5. Sie werden sehen, dass wir mit OnTick, OnTimer, OnCalculate und einer Reihe von mql5-Funktionen, die uns jetzt zur Verfügung stehen, bereits in mql5-Gebiet abdriften. Sie werden jedoch feststellen, dass es dadurch nicht einfacher wird. Wenn überhaupt, dann ist die neue Version härter für uns als vorher. Das alte mql4 erlaubte uns, wirklich schlampigen Code zu schreiben und damit durchzukommen, die neue Version erwartet von uns, dass wir genauer sind.


Ich verstehe, was Sie meinen. Ich habe mir die Dokumentation angesehen und festgestellt, dass ich die Verwendung der neuen Methoden missverstanden habe. OnStart() ist für den Start von Skripten, OnCalculate() ersetzt das alte Start() für Indikatoren und soll einen Großteil der gezählten Balken ersetzen, die in der alten Version von MQL verwendet wurden, sowie die Ausführung des Indikatorcodes starten, wenn ein neuer Tick empfangen wird (vorausgesetzt, er läuft gerade nicht), und schließlich ersetzt OnTick() das Start() für EAs. Zusammen mit vielen anderen Änderungen haben Sie Recht - es macht unser Leben nicht einfacher, weil wir "umlernen" müssen, und für diejenigen, die schon eine Weile dabei sind und eine Reihe von Anwendungen zusammengestellt haben, wird es eine Menge Re-Engineering verursachen, um sie am Laufen zu halten. Ich selbst habe gerade angefangen, mich mit MQL zu beschäftigen, und das hat mir einen guten Schlag versetzt. Das meiste, was ich gelernt hatte, muss ich jetzt sozusagen "verlernen".

Was die strengeren Regeln angeht, so ist das meiner Meinung nach eine gute Sache. Es mag etwas gewöhnungsbedürftig sein, aber es wird das Potenzial für Fehler verringern, die sich für unsere Nutzer und uns als kostspielig erweisen könnten. Aus der Sicht von jemandem, der jahrelang in der Unternehmenswelt an Anwendungen gearbeitet hat, bei denen Fehler unsererseits unsere Benutzer Unsummen an Geld (und uns unsere Jobs) kosten könnten, bin ich ein Verfechter der Genauigkeit. Worauf ich hinauswollte, ist, dass man durch Dinge wie die Einführung von OnCalculate(), das die Hälfte der Arbeit für einen erledigt, weniger versteht, was unter der Haube vor sich geht. Ich spreche aus Erfahrung, wenn ich über den Wechsel von C++ zu C# spreche. Man weiß nicht mehr, "wie das funktioniert", sondern "ich drücke diesen Knopf und das passiert". Vielleicht bin ich zu altmodisch, aber ich glaube nicht, dass eine Verschlankung eine gute Sache ist. Dieses Re-Engineering hat sowohl gute als auch schlechte Seiten.

 
deysmacro:

Aus diesem Grund kann der ea-Generator nicht mehr verwendet werden. Wenn der Code nicht aktualisiert wird, müssen Sie die Indi/Ea wirklich selbst programmieren.

In der Praxis ist Disziplin der Schlüssel zur Programmierung. Es ist hart, aber man wird immer leistungsfähiger beim Programmieren.


Da kann man nicht widersprechen, mein Freund. Um die Wahrheit zu sagen, ich glaube nicht, dass EA-Generatoren jemals hätten verwendet werden sollen. Sie haben keine Ahnung, was eine "Black Box" eigentlich tut. Was Ihre zweite Aussage betrifft, so stimme ich Ihnen voll und ganz zu.
 
ProfessorMetal:

Man weiß nicht mehr, "wie das funktioniert", sondern "ich drücke diesen Knopf und das passiert". Vielleicht bin ich zu altmodisch, aber ich glaube nicht, dass eine Verschlankung eine gute Sache ist. Dieses Re-Engineering hat sowohl gute als auch schlechte Seiten.

Sehen Sie es einmal so: Es wäre eine praktisch unmögliche Aufgabe für eine einzelne Person oder sogar eine organisierte Gruppe von Leuten, etwas wie MT4 von Grund auf mit Binärcode zu programmieren. Ganz zu schweigen von den modernen Computerspielen, die es gibt. Es wird eine Zeit kommen, in der kein lebender Mensch auch nur die geringste Ahnung von Binär-, Oktal-, Hexidezimal- oder sogar Basic-Code haben wird. Zuerst baut man aus Elementen, dann bekommt man mit der Zeit Blöcke, dann vielleicht ganze Geschichten, ganze Bücher. Man setzt die Plots einfach wieder zusammen und hat am Ende etwas scheinbar Neues, obwohl es jedes Mal derselbe alte Schi_ ist. Die Welt verändert sich, man kann nicht auf demselben alten Szenario sitzen bleiben! Man muss immer wieder neu lernen, zuerst das Handbuch lesen. Dann wieder, und wieder, und wieder. Sonst fällt man zurück und wird zum Dinosaurier.

 
Dadas:

Sehen Sie es mal so: Es wäre eine praktisch unmögliche Aufgabe für eine einzelne Person oder sogar eine organisierte Gruppe von Leuten, so etwas wie MT4 komplett von Grund auf binär zu programmieren. Ganz zu schweigen von den modernen Computerspielen, die es gibt. Es wird eine Zeit kommen, in der kein lebender Mensch auch nur die geringste Ahnung von Binär-, Oktal-, Hexidezimal- oder sogar Basic-Code hat. Zuerst baut man aus Elementen, dann bekommt man mit der Zeit Blöcke, dann vielleicht ganze Geschichten, ganze Bücher. Man setzt die Plots einfach wieder zusammen und hat am Ende etwas scheinbar Neues, obwohl es immer derselbe alte Schi_ ist. Die Welt verändert sich, man kann nicht auf demselben alten Szenario sitzen bleiben! Man muss immer wieder neu lernen, erst das Handbuch lesen, dann wieder, und wieder, und wieder. Sonst fällt man zurück und wird ein Dinosaurier.


Ich verstehe, was du meinst, Dadas. Und ich stimme dir bis zu einem gewissen Punkt zu. Aber irgendjemand muss das Thema IMMER von Grund auf kennen, oder das ganze Kartenhaus wird zusammenbrechen. Lassen Sie mich Ihnen veranschaulichen, worauf ich hinaus will. Ich habe meine Zeit als professioneller Pädagoge verbracht. Ich habe den Rang eines Assistenzprofessors für Mathematik und Physik inne. Ich habe an einer Volkshochschule unterrichtet, und unsere "ständige" Physikabteilung bestand aus mir und dem Leiter der Abteilung.

Zu dieser Zeit tendierte der Fachbereich Mathematik dazu, den gesamten Unterricht so zu gestalten, dass die Schüler Statistik, Kalkül, lineare Algebra usw. mit Hilfe von Computer- oder Taschenrechnerprogrammen lernen. Sie brachten ihnen nichts über die eigentlichen Themen bei. Den Schülern wurde nur beigebracht, wie man die Programme benutzt. Das ist kein Lernen der Mathematik. Es geht darum, auf den Startknopf zu drücken, ein paar Zahlen einzugeben und auf den "Go"-Knopf zu drücken. Ich hatte Schüler, die sich bitterlich beschwerten, weil sie alle "Anweisungen" befolgten und trotzdem die Aufgabe falsch gelöst hatten. Meine erste Frage an sie war: "Erschien Ihnen die Antwort, die der Taschenrechner gab, vernünftig?" Die Antwort: "Nun, ich weiß nicht." Warum wussten sie es nicht? Weil sie keinen blassen Schimmer von der Mathematik hatten. Alles, was sie wussten, war, dass sie diese Tasten in dieser Reihenfolge drücken mussten und der Taschenrechner auf magische Weise die Antwort ausspucken würde. FALSCH!

Nun, zurück zu meinem ursprünglichen Punkt. Mein Partner war sehr dafür. Seine Begründung: "Eines Tages wird alles so gemacht werden. Niemand wird mehr wissen müssen, wie man Mathe und Physik wirklich macht, so wie wir es tun. Die Programme werden das alles erledigen." Meine Antwort: "Ja, klar. Und wie genau sollen sie es wissen, wenn die Antworten, die sie erhalten, völlig unrealistisch sind? Und überhaupt, wer zum Teufel soll das alles schreiben und pflegen, wenn die Leute nicht einmal mehr die Grundrechenarten beherrschen, weil sie darauf trainiert wurden, dies von der Maschine erledigen zu lassen?" Verstehen Sie, was ich meine? Jemand muss wissen, "wie es funktioniert", oder, um es mit den Worten von Jim Morrison zu sagen: "Das ganze Scheißhaus geht in Flammen auf", und das, mein Freund, ist der Punkt, an dem Dinosaurier wie ich ins Spiel kommen. Ich werde vielleicht schreiend und tretend untergehen, aber ich werde bis zum Ende unterrichten. Wenn das Scheißhaus in Flammen aufgeht, wird das nicht daran liegen, dass ich den faulen Weg nach draußen genommen habe :-)

 
ProfessorMetal:


Ich verstehe deinen Standpunkt, Dadas. Und ich stimme Ihnen bis zu einem gewissen Punkt zu. Aber es muss IMMER jemand das Thema von Grund auf kennen, sonst stürzt das ganze Kartenhaus ein. Lassen Sie mich Ihnen veranschaulichen, worauf ich hinaus will. Ich habe meine Zeit als professioneller Pädagoge verbracht. Ich habe den Rang eines Assistenzprofessors für Mathematik und Physik inne. Ich habe an einer Volkshochschule unterrichtet, und unsere "ständige" Physikabteilung bestand aus mir und dem Leiter der Abteilung.

Zu dieser Zeit tendierte der Fachbereich Mathematik dazu, den gesamten Unterricht so zu gestalten, dass die Schüler Statistik, Kalkül, lineare Algebra usw. mit Hilfe von Computer- oder Taschenrechnerprogrammen lernen. Sie brachten ihnen nichts über die eigentlichen Themen bei. Den Schülern wurde nur beigebracht, wie man die Programme benutzt. Das ist kein Lernen der Mathematik. Es geht darum, auf die Starttaste zu drücken, ein paar Zahlen einzugeben und auf die Schaltfläche "Los" zu drücken. Ich hatte Schüler, die sich bitterlich beschwerten, weil sie alle "Anweisungen" befolgten und trotzdem die Aufgabe falsch gelöst hatten. Meine erste Frage an sie war: "Erschien Ihnen die Antwort, die der Taschenrechner gab, vernünftig?" Die Antwort: "Nun, ich weiß nicht." Warum wussten sie es nicht? Weil sie keinen blassen Schimmer von der Mathematik hatten. Alles, was sie wussten, war, dass sie diese Tasten in dieser Reihenfolge drücken mussten und der Taschenrechner auf magische Weise die Antwort ausspucken würde. FALSCH!

Nun, zurück zu meinem ursprünglichen Punkt. Mein Partner war sehr dafür. Seine Begründung: "Eines Tages wird alles so gemacht werden. Niemand wird mehr wissen müssen, wie man Mathe und Physik wirklich macht, so wie wir es tun. Die Programme werden das alles erledigen." Meine Antwort: "Ja, klar. Und wie genau sollen sie es wissen, wenn die Antworten, die sie erhalten, völlig unrealistisch sind? Und überhaupt, wer zum Teufel soll das alles schreiben und pflegen, wenn die Leute nicht einmal mehr die Grundrechenarten beherrschen, weil sie darauf trainiert wurden, dies der Maschine zu überlassen?" Verstehen Sie, was ich meine? Jemand muss wissen, "wie es funktioniert", oder, um es mit den Worten von Jim Morrison zu sagen: "Das ganze Scheißhaus geht in Flammen auf", und das, mein Freund, ist der Punkt, an dem Dinosaurier wie ich ins Spiel kommen. Ich werde vielleicht schreiend und tretend untergehen, aber ich werde bis zum Ende unterrichten. Wenn das Scheißhaus in Flammen aufgeht, wird das nicht daran liegen, dass ich den faulen Weg nach draußen genommen habe :-)


Nun, dann wirst du als Don Kichote enden.

Und ja, wir werden es nicht mehr erleben, aber es wird so sein, früher oder später. Schließlich weiß niemand so recht, wie und warum dieses ganze Universum funktioniert, aber es funktioniert. Weißt du, ob du die richtigen Antworten vom Universum selbst bekommst? Wie kann man das jemals wissen? Ich verstehe die Denkweise der Mathematiker. Sie wollen, dass Formeln alles kontrollieren, und sie wollen wissen/verstehen, woher die Formeln kommen, c/z sie wollen die Kontrolle haben. 2+2=4, aber warum? Ist das wirklich die richtige Antwort? Die Wahrheit ist, dass man nie die Kontrolle haben kann.

Und am Ende erhält man die Meldung "Globale Initialisierung fehlgeschlagen", und niemand weiß wirklich, warum oder wie man das beheben kann.

 
Dadas:


Nun, dann werden Sie als Don Kichote enden.

Und, ja, wir werden es nicht mehr erleben, aber es wird so sein, früher oder später. Schließlich weiß niemand so recht, wie und warum dieses ganze Universum funktioniert, aber es funktioniert. Weißt du, ob du die richtigen Antworten vom Universum selbst bekommst? Wie kann man das jemals wissen? Ich verstehe die Denkweise der Mathematiker. Sie wollen, dass Formeln alles kontrollieren, und sie wollen wissen/verstehen, woher die Formeln kommen, c/z sie wollen die Kontrolle haben. 2+2=4, aber warum? Ist das wirklich die richtige Antwort? Die Wahrheit ist, dass man nie die Kontrolle haben kann.

Und am Ende bekommt man die Meldung "Globale Initialisierung fehlgeschlagen" und niemand weiß wirklich, warum oder wie man das beheben kann.


LOL Ich glaube, Sie meinten Don Quijote. Wie auch immer, der Punkt ist, dass wir wirklich verstehen müssen, womit wir arbeiten, oder wir steuern geradewegs auf ein mögliches Scheitern zu.