Fehler, Irrtümer, Fragen - Seite 1177

 
svds75:

Hallo. Können Sie mir sagen, warum, wenn ich die Eigenschaften einer Trendlinie abfrage, die Variable res immer wahr ist, obwohl ich die Flagge manuell so eingestellt habe, dass nur W1 oder nur MN1 angezeigt wird?

Sie muss nur auf einer der beiden Hälften abgebildet werden.

...bekommen... - erhält Eigenschaften. Und wenn res=true, ist dies nur ein Hinweis auf das erfolgreiche Abrufen von Eigenschaften.

Um die Eigenschaften einzustellen, verwenden Sie ...set...

 

In Fortsetzung meines vorherigen Beitrags ist es mir gelungen, den Problembereich, der den Fehler verursacht, mit Hilfe der wissenschaftlichen Methode zu finden.

Wir haben eine solche Bibliothek mit der Funktion:

//---- testbuglib.mq5 ------

#property library

class A { }; class B   { private:    A* a; public:    A* b; }; int Test() export {   return 0; }

Hier ist die Hauptdatei:

#include <Files\File.mqh>  // тут можно указать любой файл mqh

#import "testbuglib.ex5"
  int Test();
#import  

int OnInit() {  Test(); return 0; }

Der resultierende Expert Advisor funktioniert nicht und zeigt im Protokoll an: "EX5 loading failed".

Dateien:
TestBug.mq5  1 kb
 
svds75:

Hallo. Können Sie mir sagen, warum die Variable res bei der Abfrage der Trendlinieneigenschaften immer wahr ist, obwohl ich die Flagge manuell so eingestellt habe, dass nur W1 oder nur MN1 angezeigt wird?

Ich möchte, dass sie nur auf einer der beiden Hälften angezeigt wird.

Falsche Anzahl von Parametern, Sie rufen die Funktion als 1 Option auf und sollten sie als 2 aufrufen oder das Ergebnis vergleichen.
 
TheLiteShadow:
Das ist richtig, aber bedeutet das, dass bei jedem neuen Takt alle letzten "Indizes" der gegebenen Puffer "bereinigt" werden müssen? Die Frage ist, warum? In MT4 gab es keine solche Situation, ich verstehe, während der Initialisierung hatte ich es bereinigt, aber dann sollte es von MT selbst getan werden, aus dem gleichen Grund, in der Initialisierung sollte es von MT und nicht durch den Programmierer getan werden, für welchen Zweck der Indikator Puffer ist einfach eine Speicherzuweisung ich nicht ganz verstehen...
Als ich diese Frage vor einigen Jahren stellte, wurde mir gesagt, dass dies zu Optimierungszwecken geschieht. Sie initialisieren genau so viel, wie Sie benötigen. Und wenn Sie einige Berechnungsdaten gleich ausfüllen, müssen Sie überhaupt keine Nullen vorschreiben. MT5 unterscheidet sich in vielerlei Hinsicht von MT4.
 
marketeer:
Als ich diese Frage vor einigen Jahren stellte, wurde mir gesagt, dass dies der Optimierung diene. Sie initialisieren genau so viel, wie Sie benötigen. Und wenn Sie einige Berechnungsdaten gleich ausfüllen, brauchen Sie überhaupt keine Nullen vorzuschreiben. MT5 unterscheidet sich in vielerlei Hinsicht von MT4.
Die Tatsache, dass MT4 sich von MT5 unterscheidet, wird von jedem verstanden, aber ich würde nicht zustimmen, was die Optimierung angeht, und der Programmierer muss zu viel zusätzlich im Auge behalten, nicht vergleichbar mit low-level Sprachen, aber für mich ist es überflüssig, im Allgemeinen ist es klar, danke...
 
TheLiteShadow:
Falsche Anzahl von Parametern, Sie rufen die Funktion als 1 Option auf und Sie sollten sie als 2 aufrufen oder das Ergebnis vergleichen.
So habe ich es auch probiert. Obwohl die Flaggen wirklich funktionieren (die Linie wird nur einmal angezeigt), und Expert Advisor sieht, dass beide Flaggen aktiviert sind.
long res;
ObjectGetInteger(0,"line",OBJPROP_TIMEFRAMES,OBJ_PERIOD_W1|OBJ_PERIOD_MN1,res);
if((bool)res) Alert("линия line показывается на OBJ_PERIOD_W1 и OBJ_PERIOD_MN1");
 
svds75:
Versuchen Sie es auf diese Weise. Obwohl die echten Flaggen funktionieren (die Linie wird nur auf einem Zeitrahmen angezeigt), sieht Expert Advisor, dass beide Flaggen aktiviert sind.

Was wollen Sie eigentlich? Sie fragen nach der Sichtbarkeit in wöchentlichen ODER monatlichen Zeitfenstern. Das Programm gibt also true zurück, wenn mindestens einer von ihnen eingeschaltet ist.

Fordern Sie es separat in 2 Anrufen an.

 
svds75:
So habe ich es auch probiert. Obwohl echte Flaggen funktionieren (die Linie wird nur auf einer Hälfte angezeigt) und EA sieht, dass beide Flaggen aktiviert sind.

Vielleicht müssen Sie also die Sichtbarkeit direkt einstellen?

 ObjectSetInteger(0,"line",OBJPROP_TIMEFRAMES,OBJ_PERIOD_W1);
 
svds75:

Hallo. Können Sie mir sagen, warum die Variable res bei der Abfrage der Trendlinieneigenschaften immer wahr ist, obwohl ich die Flagge manuell so eingestellt habe, dass nur W1 oder nur MN1 angezeigt wird?

Ich möchte, dass sie nur auf einer der beiden Hälften angezeigt wird.

Da die Zeile immer vorhanden ist, wird der Wert immer gelesen. Unsichtbare Linie bedeutet nicht, dass es keine Linie gibt.
 
barabashkakvn:

Vielleicht müssen Sie also die Sichtbarkeit direkt einstellen?

Nein, ich muss die Sichtbarkeit manuell einstellen und programmatisch überprüfen.