Fehler, Irrtümer, Fragen - Seite 1440
![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
MT 4. MathRand() Zufallszahlengenerator in OnTick(). Beim Testen der Eule werden unterschiedliche Ergebnisse erzielt, wenn sie mit denselben Einstellungen erneut ausgeführt wird. Dies ist normal, wenn die erzeugte Zahl den Algorithmus beeinflusst.
Bei der Optimierung erhalte ich aus irgendeinem Grund identische Ergebnisse bei einem zweiten Durchlauf mit denselben Einstellungen. Funktioniert MathRand() also nicht im Optimierungsmodus?
Zweitens (ich habe Angst, hier einen Fehler zu machen, ich hoffe,Alexander Puzanov kann mich korrigieren), wenn der Programmierer aus irgendeinem Grund beschließt, ein Element mit Index 20 zu einem dynamischen Array hinzuzufügen, wird nichts Schlimmes passieren. Das Array nimmt diese Dimension und schreibt dort einen Wert hinein und initialisiert die "fehlenden" Indizes mit Nullwerten.
Ganz genau. Warum "Null"? Vielleicht sollte es EMPTY_VALUE heißen? Oder WRONG_VALUE ?
Das Problem bei solchen impliziten Zuweisungen ist genau ihre implizite Natur - der Compiler führt einen Code ein, den ein Programmierer auf die eine Art denkt, während ein anderer anders denken könnte.
Außerdem ist es ineffektiv - es ist nicht immer notwendig, eine Variable sofort zu initialisieren, und die Initialisierung eines großen Arrays in einer Schleife kann die Geschwindigkeit erheblich verringern.
Und drittens hindert den Programmierer niemand daran, die Dimensionalität und den verwendeten Index zu kontrollieren! Der einzige Unterschied ist, dass er jetzt gezwungen ist, es zu tun! )))
Wenn der Compiler die Dimension eines Arrays selbst verfolgt, ist keine Klasse in der Lage, diesen Code zu bereinigen. Der Wirkungsgrad kann sehr wohl sinken.
Wenn der Compiler sich nicht um diese Aufgabe kümmert, kann der Programmierer eine Klasse schreiben, die diese Aufgabe übernimmt, und dann ein Array verwenden, das expandiert und gegebenenfalls mit Nullen initialisiert wird.
Im zweiten Fall ist die Flexibilität höher.
Was Sie vorschlagen, ist also auch eine gute Lösung für viele Fälle. Aber es kann die Effizienz verringern, was nicht gut ist.
Dies ist im Prinzip ein einfaches Beispiel dafür, wie ein dynamisches Array normalerweise gefüllt werden sollte. Ich habe schon lange nicht mehr in C geschrieben, ich kann mich nicht erinnern, aber so werden Arrays in php gefüllt! Alles ist logisch und verständlich. Wenn ich einem Array ein Element hinzufüge (arr[] = x), wird das Array automatisch erweitert, und das Element wird am Ende des Arrays hinzugefügt. Und wir müssen es nicht selbst strecken, und wir müssen den Index des Elements auch nicht selbst angeben. Aber hier müssen wir absolut unnötige Bewegungen machen:
der Unterschied ist offensichtlich...
Meiner Meinung nach ist das, gelinde gesagt, seltsam ))))
Programmiersprachen werden in streng typisierte und nicht typisierte Sprachen unterteilt. Ihr PHP, R und andere funktionale Sprachen gehören zu den nicht-streng typisierten Sprachen. In streng typisierten Sprachen wie MQL oder C# und Java ist diese Art der zweideutigen Datenmanipulation nicht erlaubt. Und dies geschieht vor allem zur Sicherheit des Programmierers selbst. Strenge Typisierung impliziert, dass jede Ihrer Prozeduren extrem spezifisch ist: "to take an element at index 0 in array array" ist eine spezifische und klare Prozedur, aber Sie schlagen vor, sie durch "take something from array array and add it to whatever the compiler decides to return first" zu ersetzen. - Sie sind sich einig, dass Sie damit nicht weit kommen werden.
Andererseits wollen wir natürlich einfache High-Level-Konstrukte ohne lästige Array-Größenanpassung und ständige Neuanordnung durch den Benutzer. Genau dafür ist die Standardbibliothek gedacht. Anstatt einfache Arrays zu verwenden, wechseln Sie zu den Klassen der Gruppe Array. So sieht zum Beispiel das Hinzufügen von Null bis 16 in das Array CArrayInt aus:
Wie Sie sehen können, ist nichts zu natürlich. Und es ist nicht nötig, sich den Kopf über die aktuelle Array-Größe und andere Umstellungen zu zerbrechen. Alles wird für Sie erledigt, und Sie können sich direkt auf die Benutzeraufgabe konzentrieren. Das ist die Stärke und der Sinn von OOP.
Vollständige Aufzeichnung nicht verfügbar. Kompilierungsfehler
Ich kann nicht feststellen, wo ich falsch liege.
Die Aufgabe besteht darin , den maximalen und minimalen Wert in einem Intervall zu finden
Falsche Reihenfolge der Argumente in ArrayMaximum(), ArrayMinimum().
Ich kann nicht feststellen, wo ich falsch liege.
Die Aufgabe besteht darin , den maximalen und minimalen Wert in einem Intervall zu finden
Funktionen
CopyHigh(_Symbol,0,2,Kol_Kan,HI);//Kopieren der Werte der Maxima
CopyLow(_Symbol,0,2,Kol_Kan,LO); //Kopieren der Werte der Minima
bereits die Größe des Arrays ändern.
Dies ist unnötig
ArrayResize(HI,Kol_Kan); //Setzen der Array-Größe
ArrayResize(LO,Kol_Kan);
Неправильный порядок аргументов в ArrayMaximum(), ArrayMinimum().
Genau)) Und ich dachte schon...
Funktionen
CopyHigh(_Symbol,0,2,Kol_Kan,HI);//Kopieren der Werte der Maxima
CopyLow(_Symbol,0,2,Kol_Kan,LO); //Kopieren der Werte der Minima
bereits die Größe des Arrays ändern.
Dies ist unnötig
ArrayResize(HI,Kol_Kan); //Setzen der Array-Größe
ArrayResize(LO,Kol_Kan);
Ich werde das wissen, danke.
Der Autor hingegen hat es bereits herausgefunden. ))
PabloEs:
Genau.)) Und ich dachte schon...