Fehler, Irrtümer, Fragen - Seite 2797

 
Roman:

Bild 2530

Bei der dritten Anlage der Struktur erscheint kein IntelliSense.

Die IntelliSense-Intelligenz ist weiterhin erfolgreich ))


d.h. ein Hinweis ist alles, worauf Sie sich verlassen können

 
Nikolai Karetnikov:

Die IntelliSense-Intelligenz ist weiterhin erfolgreich ))

d.h. ein Hinweis ist alles, worauf Sie sich verlassen können

Mein Beitrag bezog sich auf verschachtelte Strukturen, bei der dritten Verschachtelung erscheint keine IntelliSense-Auswahl.
Das ist sehr ärgerlich, denn die verschachtelten Strukturen sollten eigentlich nur für die Auswahl in der Intellisense verwendet werden.
Und da dies nicht der Fall ist, muss ich zurück zur Struktur gehen und nachsehen, welche Felder dort vorhanden sind. Nicht gut.
Ich wünschte, sie würden es reparieren.

Was Ihr Beispiel betrifft, so sind die Hinweise für Standard-MQL-Funktionen eindeutig.
Wenn Sie den Tooltip nicht verstehen, setzen Sie den Cursor auf die Funktion und drücken Sie F1.

 
Mihail Matkovskij:

Ersetzen Sie die Funktion ObjectDeleteAll zuerst in Ihrem Beispiel:

Dann in den Indikator.

Es erwies sich als einfach,ObjectDeleteAll in meinem Projekt zu verwenden. Um alle Objekte zu löschen, musste ich nur dreimal das Präfix ändern und ObjectDeleteAll dreimal aufrufen. Das Schaubild ist daher eindeutig. Die Sprache MQL5 hat eine Menge Feinheiten. Aber gleichzeitig ist es eine sehr gut durchdachte Sprache.

Vielen Dank an alle, die mir bei der Lösung dieses Problems geholfen haben!

Da haben Sie es wieder:

    trend = new CChartObjectTrend();
    if(trend.Create(0, "trend"+(string)i, 0, time[shift], low[shift], time[shift], high[shift]))
      listOfTrendLines.Add(trend);
    else
      delete trend;

Ein potenzielles Loch, in das man eindringen kann. Sehen Sie sich an, was die Methode Add() zurückgibt

(Ich weiß, dass es ein Test ist, ich weiß, dass es in Ordnung ist, das zu überprüfen, aber wenn man das Erstellungsergebnis überprüft, warum nicht auch das Additionsergebnis? Diszipliniert in die Zukunft)
 
Artyom Trishkin:

Wieder einmal haben Sie hier:

Ein potenzielles Loch, in das man eindringen kann. Sehen Sie sich an, was die Methode Add() zurückgibt

(Ich verstehe, dass es sich um einen Test handelt, ich verstehe, dass er für die Überprüfung gut genug ist, aber wenn ich das Ergebnis der Erstellung überprüfe, warum nicht auch das Ergebnis der Addition? Disziplin für die Zukunft)

Dann tun Sie dies:

    trend = new CChartObjectTrend();
    if(trend.Create(0, "trend"+(string)i, 0, time[shift], low[shift], time[shift], high[shift])) {
      if(!listOfTrendLines.Add(trend))
        delete trend;
    }
    else
      delete trend;

Das war's. Jetzt gibt es kein Loch mehr?

Dies ist eigentlich ein Testprogramm, und es hat seine Aufgabe erfüllt. Ich brauche nichts weiter davon. Wenn sie funktionieren würde, hätte sie einen anderen Ansatz und ein anderes Konzept. Die Fehlermeldungen gehen von jedem kritischen Punkt aus mit Angabe der Zeile (__LINE__) und des Funktionsnamens (__FUNCTION__) ... Manchmal brauche ich also auch kein Debugging zu verwenden. Ich schaue einfach nach, Modulname, Zeilennummer, Funktionsname...

 

Hallo zusammen! Das Problem stellt sich wie folgt dar...

Nach der Aktualisierung ist die Verknüpfung zum MT5-Terminal verschwunden, sowohl auf dem Desktop als auch im Stammverzeichnis. Installieren Sie es neu. Nach einem Neustart meines PCs wiederholte sich der Vorgang. Was ist das Problem? Hatte jemand Probleme damit?

 
Artyom Trishkin:

Da haben Sie es wieder:

Ein potenzielles Loch, in das man eindringen kann. Sehen Sie sich an, was die Methode Add() zurückgibt

(Ich weiß, dass es sich um einen Test handelt, und ich verstehe, dass er gut genug für die Überprüfung ist, aber wenn man das Ergebnis der Erstellung überprüft, warum nicht auch das Ergebnis der Addition? Disziplin für die Zukunft)

Und in welchen Fällen könnte listOfTrendLines.Add fehlschlagen? Ich kenne sie einfach nicht. Ich halte jedoch an dem Grundsatz fest, dass es keine unnötigen Kontrollen geben darf" (c). Aber hypothetisch können wir annehmen, dass es zu einer Paranoia kommen kann. Ok, die Methode Create einer grafischen Objektklasse kann fehlschlagen. Aber es funktioniert immer richtig, wenn der Code richtig geschrieben ist und das Programm den Objekten normale Namen gibt. Aber nehmen wir mal an, dass es bei der Verwendung Fehler geben kann... Aber wie kann die Add-Methode unter normalen Bedingungen ein falsches Objekt zurückgeben? Oder ArrayResize Funktion (die, nebenbei bemerkt, in dieser Methode verwendet wird), wie kann es Ergebnis unterschiedlich von new_size zurückgeben. Es sei denn, der Speicherplatz reicht nicht aus... :) Aber wo haben Sie schon einmal moderne Geräte mit einem so großen Speicherdefizit gesehen? :)

 
Mihail Matkovskij:

In welchen Fällen könnte listOfTrendLines.Add fehlschlagen? Ich bin mir dessen einfach nicht bewusst. Ich halte mich zwar an den Grundsatz, dass es keine unnötigen Kontrollen gibt (c). Aber hypothetisch können wir annehmen, dass es zu einer Paranoia kommen kann. Ok, die Methode Create einer grafischen Objektklasse kann fehlschlagen. Aber es funktioniert immer richtig, wenn der Code richtig geschrieben ist und das Programm den Objekten normale Namen gibt. Aber nehmen wir mal an, dass es bei der Verwendung Fehler geben kann... Aber wie kann die Add-Methode unter normalen Bedingungen ein falsches Objekt zurückgeben? Oder ArrayResize Funktion (die, nebenbei bemerkt, in dieser Methode verwendet wird), wie kann es Ergebnis unterschiedlich von new_size zurückgeben. Es sei denn, der Speicherplatz reicht nicht aus... :) Aber wo haben Sie schon einmal ein modernes System mit Speichermangel gesehen? :)

Vps in der Regel.
P.s. Ich denke, du bist Alexej gegenüber unfair, denn er war derjenige, der den ersten und richtigen Ratschlag gegeben hat, und er hat dir auf jeden Fall geholfen.
 
Mihail Matkovskij:

Ersetzen Sie die Funktion ObjectDeleteAll zuerst in Ihrem Beispiel:

Dann in den Indikator.

Es erwies sich als einfach,ObjectDeleteAll in meinem Projekt zu verwenden. Um alle Objekte zu löschen, musste ich nur dreimal das Präfix ändern und ObjectDeleteAll dreimal aufrufen. Das Schaubild ist daher eindeutig. Die Sprache MQL5 hat eine Menge Feinheiten. Aber gleichzeitig ist es eine sehr gut durchdachte Sprache.

Vielen Dank an alle, die mir bei der Lösung dieses Problems geholfen haben!

Ich frage mich, ob Sie die Dokumentation gelesen haben oder nur die Funktionsbeschreibung aus meinem Beitrag übernommen haben.

Ich vermute daher, dass Sie nur grafische Objekte haben, die einen Trend aufweisen. Wenn ja, warum brauchen Sie ein Präfix? Es gibt auch eine Löschung nach Objekttyp

int  ObjectsDeleteAll(
   long  chart_id,            // идентификатор графика
   int   sub_window=-1,       // индекс окна
   int   type=-1              // тип объекта для удаления
   );

Sie müssen also nichts am Projekt ändern, sondern schreiben einfach

ObjectsDeleteAll(0, 0, OBJ_TREND);
)))))))))))))
 
Aleksei Beliakov:
Vps in der Regel.
P.s. Ich habe den Eindruck, dass Sie Alexej ungerecht behandelt haben, schließlich war er derjenige, der Ihnen den ersten und richtigen Ratschlag gegeben hat, und außerdem hat er Ihnen geholfen.

Es ist mir peinlich zu fragen, wo da die Ungerechtigkeit liegt...? Ich glaube, ich komme mit Alexej gut zurecht. Sind Sie mit ihm verwandt?

 
Alexey Viktorov:

Ich frage mich, ob Sie sich die Dokumentation angesehen haben oder nur die Funktionsbeschreibung aus meinem Beitrag übernommen haben.

Ich vermute, dass Sie nur grafische Objekte haben, die einen Trend aufweisen. Wenn ja, warum brauchen Sie ein Präfix? Es gibt auch eine Löschung nach Objekttyp

Sie müssen also nichts an dem Projekt ändern.

)))))))))))))

Dies ist nur ein Sonderfall. Die Vorsilbe ist allgemein und universell. Außerdem wirkt sich das Löschen aller Trendlinien auch auf Objekte aus, die nicht zum Programm gehören.