Fehler, Irrtümer, Fragen - Seite 493

 
Lodar:
Ich widerspreche nicht.
aber auf diese Weise
Es gibt sowieso eine Rundung, sollte sie das tun?


Sehen Sie sich den Typ der Funktion round() an. Es handelt sich um eine Rundungsfunktion, nicht um eine Typumwandlungsfunktion.
Документация по MQL5: Основы языка / Типы данных / Приведение типов
Документация по MQL5: Основы языка / Типы данных / Приведение типов
  • www.mql5.com
Основы языка / Типы данных / Приведение типов - Документация по MQL5
 

Die Entwickler.

Ich habe versehentlich die Verarbeitung von Ticks in Expert Advisor in einer Schleife durchgeführt, woraufhin eine kritische Fehlermeldung über einen Stapelüberlauf erschien.

Das Problem ist, dass die Nachricht keine spezifischen Informationen darüber enthält, was und wo genau es passiert ist.

Ich schlage vor, den Text dieser Nachricht zu verdeutlichen, wenn es möglich ist, solche Probleme (wie der Aufruf einer Klassenmethode aus einer aufgerufenen Methode) in der Kompilierungsphase abzufangen.

Документация по MQL5: Программы MQL5 / Ошибки выполнения
Документация по MQL5: Программы MQL5 / Ошибки выполнения
  • www.mql5.com
Программы MQL5 / Ошибки выполнения - Документация по MQL5
 
MoneyJinn:

Der Grund, warum iCustom() diesen Pufferzellen, die in Wirklichkeit mit nichts gefüllt waren, beliebige Werte zuweist, ist mir unklar, ebenso wie der Grund, warum dies in keiner Weise vermieden werden kann.

Ich vermute, es hat etwas mit der Zuweisung von Speicher für das entsprechende Datenfeld des Indikatorpuffers zu tun.

Eine solche Operation von iCustom(), bei der es unmöglich ist, die Herkunft und den Wahrheitsgehalt der Daten festzustellen, erscheint mir unzulässig und schafft zusätzliche Risiken für den Nutzer.

Wenn iCustom() den Pufferzellen willkürliche, nicht mit den realen Werten übereinstimmende Werte zuweist,

Warum wird diesen Zellen nicht der Wert "Empty_Value" zugewiesen, wie es in MT4 implementiert ist?

Dann wäre zumindest ihr Status klar.

Niemand außer dem Autor kann entscheiden, womit die ungenutzten Pufferwerte gefüllt werden sollen. Sie sagen Empty_Value, aber ich brauche zum Beispiel den Wert 0 oder etwas anderes. Welchen Wert Sie auch immer wünschen, initialisieren Sie ihn damit.
 
Interesting:

Die Entwickler.

..........., wenn möglich, solche Probleme (z.B. Aufruf einer Klassenmethode aus einer aufgerufenen Methode) zur Kompilierzeit abfangen wollen.

Ich bin dagegen. Dies würde den Compiler übermäßig kompliziert und daher weniger zuverlässig machen.

Es obliegt dem Programmierer, falsche Rekursionen zu verfolgen.

Ich möchte aber, dass die Fehlermeldung den Namen der Funktion enthält, die den Stapel zum Überlaufen gebracht hat.

 
Valmars:
Niemand außer dem Autor kann entscheiden, womit ungenutzte Pufferwerte gefüllt werden sollen. Sie sagen Empty_Value, aber ich möchte zum Beispiel, dass es 0 oder etwas anderes ist. Welchen Wert Sie auch immer wünschen, initialisieren Sie ihn damit.

Das ist richtig und logisch. Das Problem ist jedoch, dass die Funktion iCustom() Pufferzellen, die der Benutzer nicht mit irgendetwas (!) gefüllt hat, periodisch nach eigenem Ermessen mit beliebigem Müll füllt. Soll das so sein?

 
MetaDriver:

Ich bin dagegen. Es würde den Compiler exorbitant komplex und damit weniger zuverlässig machen.

Es ist Sache des Programmierers, eine falsche Rekursion zu verfolgen.

Ich möchte jedoch, dass die Fehlermeldung den Namen der Funktion enthält, die den Stapel zum Überlaufen gebracht hat.

Ja, wir verkomplizieren die Arbeitsmaschine (immerhin handelt es sich um ein natives 32/64-System) absichtlich nicht mit Metainformationen.

Rekursion ist in der Regel leicht zu erkennen - sie hängt direkt von der Größe der lokalen Variablen ab, und es gibt nur sehr wenige solcher Stellen in einem Programm.

 
MoneyJinn:

Das ist richtig und logisch. Aber das Problem ist, dass die Pufferzellen, die der Benutzer nicht gefüllt hat (!), iCustom()-Funktion füllt nach eigenem Ermessen mit zufälligen Müll. Ist es soll so sein?

Wenn der benutzerdefinierte Indikator seinen Puffer nicht korrekt füllt, ist dieser benutzerdefinierte Indikator schuldig.

Und wenn dieser benutzerdefinierte Indikator seine Ergebnisse über iCustom sendet, ist er doppelt schuldig, da er die Benutzer in die Irre führt.

 
Renat:

Wenn ein benutzerdefinierter Indikator seinen Puffer nicht korrekt füllt, bedeutet dies, dass dieser benutzerdefinierte Indikator schuldig ist.

Und wenn dieser benutzerdefinierte Indikator seine Ergebnisse über iCustom ausgibt, ist er doppelt schuldig, da er die Benutzer in die Irre führt.

Ich verstehe Ihre Denkweise. Ich wünsche Ihnen viel Erfolg.
 
Renat:

Wenn ein benutzerdefinierter Indikator seinen Puffer nicht richtig füllt, ist dieser benutzerdefinierte Indikator daran schuld.

Und wenn dieser benutzerdefinierte Indikator seine Ergebnisse über iCustom sendet, ist er doppelt schuldig, weil er die Benutzer in die Irre führt.

Ich verstehe immer noch nicht, was Sie daran hindert, das Programm nicht nur effizient, sondern auch bequem zu gestalten? Wenn ich mich richtig erinnere, ist der Grund für das Fehlen einer eingebauten Initialisierung von Indikatorpuffern in 5 die Optimierung der Geschwindigkeit. In diesem Fall muss der Indikatorentwickler die Initialisierungszeichenfolgen ("Nullen") selbst kodieren, was bisher bei vier Systemen vom Kernel durchgeführt wurde. Die daraus resultierende Effizienz scheint also nicht besser zu werden, und die Benutzerfreundlichkeit leidet. Aber da man sich aus irgendeinem Grund für diesen Weg entschieden hat, warum sollte man ihn nicht fakultativ machen? D.h. wir könnten eine weitere #Eigenschaft einführen, die angibt, ob die Puffer automatisch initialisiert werden sollen oder nicht.

Zusammenfassend wiederhole ich den Gedanken, den ich schon einmal geäußert habe: Die Aufgabe der Plattform, die MT ist, besteht darin, den Benutzer (den Programmierer) so weit wie möglich vor möglichen "Fehlern" zu schützen.

Индикатор от индикатора в MQL5
Индикатор от индикатора в MQL5
  • 2010.02.08
  • MetaQuotes Software Corp.
  • www.mql5.com
При написании индикатора, который использует краткую форму вызова функции OnCalculate(), можно упустить то обстоятельство, что индикатор может рассчитываться не только на ценовых данных, но и на данных другого индикатора (встроенного или пользовательского - не имеет значения). Вы хотите улучшить индикатор, чтобы он правильно считался не только на ценовых данных, но и значениях другого индикатора? В этой статье мы по шагам пройдем все необходимые этапы такой модификации и выведем дополнительные полезные правила для правильного написания индикатора.
 
MoneyJinn:

Das ist richtig und logisch. Aber das Problem ist, dass Pufferzellen, die der Benutzer nicht (!) mit irgendetwas gefüllt hat, von iCustom() regelmäßig nach eigenem Ermessen mit beliebigem Müll gefüllt werden. Soll das so sein?

Eigentlich ist es eine allgemeine Regel: Die Initialisierung von Arrays liegt im Ermessen des Benutzers. Ein nicht initialisiertes Array enthält zufällige Werte aus dem ihm zugewiesenen Speicher. Der Benutzer kann einen guten Grund haben, das Array nicht unnötig zu initialisieren (z.B. um Zeit zu sparen). Auf diese Weise spare ich manchmal Zeit, wenn ich sicher bin, dass ich den Müll nicht lesen und "fressen" muss, bevor die eigentlichen Informationen da sind.

Ich sehe keine Böswilligkeit auf Seiten von MQ. Ich hätte eher etwas dagegen, wenn sie "prophylaktisch" meine Programme verlangsamen würden.

Документация по MQL5: Операции с массивами / ArrayInitialize
Документация по MQL5: Операции с массивами / ArrayInitialize
  • www.mql5.com
Операции с массивами / ArrayInitialize - Документация по MQL5