Fragen von Neueinsteigern zu MQL4 und MQL5, Hilfe und Diskussion über Algorithmen und Codes - Seite 600
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
Dies ist kein telepathischer Club. Da Sie Ihren Code nicht beigefügt haben, müssen Sie selbst entscheiden, wo Sie ihn löschen wollen.
Falsch.
Nun, hier ist der Code, was brauchen Sie noch? Was ist, wenn sie falsch ist?
Ich danke Ihnen.
Du bringst das alles durcheinander. Eine fehlerhafte Planung der Aufgabe ist genau das, was zu diesen Folgen führt.
Wenn in einer Klasse Objekte erstellt werden, muss sie diese nach Abschluss in ihrem Destruktor löschen. Andere Klassen hingegen sollten, bevor sie einen Zeiger auf ein Objekt erhalten, dessen Gültigkeit überprüfen. Und im Prinzip sollte es eine solche Verflechtung nicht geben. Es ist ein bisschen verwirrend. Kompliziert ist nicht gleichbedeutend mit Qualität. Alles sollte transparent und nachvollziehbar sein. In erster Linie für Sie.
Lassen Sie uns stattdessen den Code zeigen.
Hier lese ich beim Start des Programms einige Daten aus einer Datei.
Das heißt, ich erstelle bei der Iteration ein CCandleCondition *candle_cond-Objekt und füge es dann der Sammlung candles_one_rules hinzu.
Hier ist die AddCondition-Methode der Klasse CCandlesOneRules:
CCandleRule ist lediglich eine Containerklasse für Bedingungen. Ich füge Bedingungen zu Regeln und Regeln zu CCandlesOneRules hinzu, die wiederum zu CCandlesOneRules....
Aber diese while-Schleife schlägt beim Start fehl und stürzt mit dem Fehler "kein Speicher" ab. Und es gibt nicht allzu viele dieser Bedingungen, nur 7 werden vor dem Stopp gelesen. Wenn wir die Anzahl der Daten in der gelesenen Datei reduzieren, funktioniert es, ohne Fehler, ungelöschte Objekte und so weiter.
Lassen Sie sich den Code besser zeigen.
Ich verliere allmählich die Geduld.
Wo ist die Definition der Add-Methode?
Nach dem Code zu urteilen, haben Sie überhaupt keine Ahnung, was Sie tun.
Ich verliere allmählich die Geduld.
Wo ist die Definition der Add-Methode?
Nach dem Code zu urteilen, haben Sie ein völlig falsches Verständnis von dem, was Sie tun.
CCandleOneRules, CCandlesOneRules, CCandleRule sind alle von CArrayObj geerbte Klassen.
Ihren allgemeinen Antworten nach zu urteilen, verstehen Sie meine Fragen einfach nicht. Auf Array mit CArrayObj haben Sie immer noch nicht die richtige Antwort gegeben. Ich werde dieses Problem noch einmal wiederholen. Es gibt eine Klasse, in der Klassenmethode werden globale Objekte der Klasse dem Array (Objekt vom Typ CArrayObj) hinzugefügt, das dort in dieser Methode deklariert wird. Bei dieser Methode werden einige Aktionen in diesem Array durchgeführt. Nach der Fertigstellung wird das Array-Objekt nicht benötigt, sondern die Array-Mitglieder. Wie wird man dieses Array-Objekt korrekt los, wobei die Array-Elemente erhalten bleiben? Wenn Sie sie nicht loswerden, erhalten Sie eine Meldung wie ungelöschte Objekte im Protokoll. Ich habe Ihnen meine Lösung genannt; Sie haben sie falsch formuliert. Wie ist das richtig? Wie kann ich löschen in OnDeinit (oder in Deinit-Methode der Klasse, die von OnDeinit aufgerufen wird), wenn dieses Array-Objekt nur innerhalb der Klasse Methode sichtbar ist?
Wenn außerdem Objekte nur in OnDeinit gelöscht werden, kann es bei der Ausführung/Testung des Programms auch zu Speichermangel kommen...
Hallo Kollegen.
Bitte helfen Sie mir bei dieser Frage. Wo sollte ich die Funktion ArraySetAsSeries() verwenden, um die Reihenfolge der Elemente Nummerierung in den Indikator Puffer angeben? In den Indikatoren, die im Terminal vorinstalliert sind, habe ich oft festgestellt, dass sie innerhalb von OnCalculate() verwendet wird. Der Indikatorpuffer wird jedoch global deklariert. Ist es in diesem Fall nicht logisch , ArraySetAsSeries() innerhalb von OnInit() für einen einzigen Aufruf zu verwenden? Oder kann durch das Auffüllen des Indikatorpuffers mit neuen Elementen die Reihenfolge der Aufzählung verloren gehen und es ist notwendig, ArraySetAsSeries() jedes Mal in OnCalculate() aufzurufen? Ich möchte einen optimalen Code ohne unnötige Funktionsaufrufe schreiben, wenn dies nicht notwendig ist. Ich bin für jede Hilfe dankbar.
Hallo Kollegen.
Bitte helfen Sie mir bei dieser Frage. Wo sollte ich die Funktion ArraySetAsSeries() verwenden, um die Reihenfolge der Elemente Nummerierung in den Indikator Puffer angeben? In den Indikatoren, die im Terminal vorinstalliert sind, habe ich oft festgestellt, dass sie innerhalb von OnCalculate() verwendet wird. Der Indikatorpuffer wird jedoch global deklariert. Ist es in diesem Fall nicht logisch , ArraySetAsSeries() innerhalb von OnInit() für einen einzigen Aufruf zu verwenden? Oder kann durch das Auffüllen des Indikatorpuffers mit neuen Elementen die Reihenfolge der Aufzählung verloren gehen und es ist notwendig, ArraySetAsSeries() jedes Mal in OnCalculate() aufzurufen? Ich möchte einen optimalen Code ohne unnötige Funktionsaufrufe schreiben, wenn dies nicht notwendig ist. Ich bin für jede Hilfe dankbar.
IMHO würde ich Indikatoren ganz ohne diese Funktionen schreiben (wenn auch von Null an, natürlich). Bei Puffern - in OnInit(), bei Zeitreihen - in OnCalculate().
Und um über optimalen Code zu sprechen, müssen Sie wissen, wie lange die Ausführung dieser Funktion dauert. Der Profiler sollte also an erster Stelle stehen, und erst dann die Leistungsfragen.
IMHO würde ich Indikatoren ganz ohne diese Funktionen schreiben (wenn natürlich von Grund auf). Aber für Puffer - in OnInit(), für Zeitreihen - in OnCalculate().
Und um über optimalen Code zu sprechen, müssen Sie wissen, wie lange die Ausführung dieser Funktion dauert. Der Profiler sollte also an erster Stelle stehen, und erst dann die Leistungsfragen.
Das ist die Schlussfolgerung, zu der ich tendiert habe. Danke für den Hinweis.
Guten Tag. Ich habe eine Frage: warum, wenn ich die Bolinger-Balken auf den MACD anwende, nehme ich die Werte der Signallinie und nicht das Histogramm selbst?
Guten Tag. Ich habe eine Frage: warum, wenn ich die Bolinger-Balken auf den MACD anwende, nehme ich die Werte der Signallinie und nicht das Histogramm selbst?
Haben Sie die Möglichkeit anzugeben, welcher Grafikpuffer für die Berechnung verwendet werden soll?