Fragen von Neueinsteigern zu MQL4 und MQL5, Hilfe und Diskussion über Algorithmen und Codes - Seite 1139

 
ascerdfg:
Wo muss ich mit der rechten Maustaste klicken?

Strg T, um das Menü am unteren Rand aufzurufen, Trading, Assets, ..... und schließlich Log. Klicken Sie auf das Logbuch und klicken Sie mit der rechten Maustaste auf einen der Einträge, um Folgendes anzuzeigen

 
Alexey Viktorov:

Es ist möglich, dass der Preis und die Zeit für die Objektkoordinaten gleich Null sind. Überprüfen Sie es so: Drücken Sie Strg+B, klicken Sie im erscheinenden Dialog auf die Schaltfläche "Alle" und sehen Sie die Liste der vorhandenen Objekte. Wenn es eine gibt, öffnen Sie die Eigenschaften und sehen Sie die Koordinaten.

Fehlerbehebung, alles ist in Ordnung beim Erstellen aller Objekte

 
ascerdfg:
Wo sollten Sie mit der rechten Maustaste klicken?

rzewski: eine Maus, die an der richtigen Stelle gestochen wird

 
Maxim Kuznetsov:

Speziell für Rzewski: eine Maus zum Klicken an der richtigen Stelle

Um ehrlich zu sein, die Methode der tastend zu finden, wo das Protokoll aufgerufen wird, und mochte das Wort Ansicht, gedrückt. und es ist das Protokoll))))) Und übrigens, gibt es keine Möglichkeit, das Protokoll über eine Gegenklausel aufzurufen oder was?

 

Guten Tag.

Ist es möglich, ein Objekt so einzustellen, dass es immer über den anderen liegt, auch bei neu platzierten Objekten? So dass, wenn sich Objekte überlappen, das gewünschte Objekt niemals das obere überlappt?

Zunächst dachte ich, dass die Eigenschaft OBJPROP_ZORDER helfen könnte, wenn das gewünschte Objekt immer auf den höchsten Wert gesetzt wird. Doch wie sich in der Praxis herausstellte, ist dies nur für die Klickfangfunktion von Bedeutung. Optisch ist das Objekt nicht höher als alle anderen.

Auch in der Praxis habe ich festgestellt, dass ein Objekt, das als letztes gezeichnet wird, auf jeden Fall visuell höher liegt als die anderen. Ich muss also entweder eine Eigenschaft erstellen, von der ich nichts weiß, oder das Objekt neu zeichnen, das nicht jedes Mal, wenn sich die Anzahl der Objekte im Diagramm ändert, den oberen Rand überlappen sollte. Aber beim erneuten Zeichnen stieß ich auf ein Problem - Flackern eines Objekts, das entfernt und erneut gezeichnet wurde. Gibt es eine Möglichkeit, das Objekt schön neu zu zeichnen, ohne Flackern, oder es nicht überlappend von oben zu machen?


 
Oleg Remizov:

Guten Tag.

Ist es möglich, ein Objekt so einzustellen, dass es immer über den anderen liegt, auch bei neu platzierten Objekten? So dass, wenn sich Objekte überlappen, das gewünschte Objekt niemals das obere überlappt?

Ich dachte zunächst, dass die Eigenschaft OBJPROP_ZORDER helfen könnte, wenn das gewünschte Objekt immer auf den höchsten Wert gesetzt wird. Aber wie sich in der Praxis herausstellte, ist dies nur für die Klickfangfunktion von Bedeutung. Optisch ist das Objekt nicht höher als alle anderen.

Auch in der Praxis habe ich festgestellt, dass ein Objekt, das als letztes gezeichnet wird, auf jeden Fall visuell höher liegt als die anderen. Ich muss also entweder eine Eigenschaft erstellen, von der ich nichts weiß, oder das Objekt neu zeichnen, das nicht jedes Mal, wenn sich die Anzahl der Objekte im Diagramm ändert, den oberen Rand überlappen sollte. Aber beim erneuten Zeichnen stieß ich auf ein Problem - Flackern eines Objekts, das entfernt und erneut gezeichnet wurde. Gibt es eine Möglichkeit, das Objekt schön neu zu zeichnen, ohne Flackern, oder machen es nicht überlappend von oben?


OBJPROP_TIMEFRAMES:

OBJ_NO_PERIODS - unsichtbar für alle Perioden,

OBJ_ALL_PERIODS - sichtbar für alle Zeiträume

Документация по MQL5: Константы, перечисления и структуры / Константы объектов / Видимость объектов
Документация по MQL5: Константы, перечисления и структуры / Константы объектов / Видимость объектов
  • www.mql5.com
Комбинация флагов видимости объекта определяет таймфреймы графика, на которых объект отображаем. Для установки/получения значения свойства OBJPROP_TIMEFRAMES можно использовать функции ObjectSetInteger()/ObjectGetInteger...
 
Oleg Remizov:

Guten Tag.

Ist es möglich, ein Objekt so einzustellen, dass es immer über den anderen liegt, auch bei neu platzierten Objekten? So dass, wenn sich Objekte überlappen, das gewünschte Objekt niemals das obere überlappt?

Ich dachte zunächst, dass die Eigenschaft OBJPROP_ZORDER helfen könnte, wenn das gewünschte Objekt immer auf den höchsten Wert gesetzt wird. Aber wie sich in der Praxis herausstellte, ist dies nur für die Klickfangfunktion von Bedeutung. Optisch ist das Objekt nicht höher als alle anderen.

Auch in der Praxis habe ich festgestellt, dass ein Objekt, das als letztes gezeichnet wird, auf jeden Fall visuell höher liegt als die anderen. Ich muss also entweder eine Eigenschaft erstellen, von der ich nichts weiß, oder das Objekt neu zeichnen, das nicht jedes Mal, wenn sich die Anzahl der Objekte im Diagramm ändert, den oberen Rand überlappen sollte. Aber beim erneuten Zeichnen stieß ich auf ein Problem - Flackern eines Objekts, das entfernt und erneut gezeichnet wurde. Gibt es eine Möglichkeit, das Objekt schön neu zu zeichnen, ohne Flackern, oder machen es nicht überlappend von oben?


Die Objekte werden entsprechend dem Index angezeigt:

string  ObjectName( 
   int    object_index   // номер в списке объектов
   );

Daraus folgt, dass das Objekt mit dem höchsten Index visuell im Vordergrund steht.

Ich komme aus dieser Situation folgendermaßen heraus:

string pref="own"; //префикс в именах своих объектов
bool CheckOtherObj(string &arrObjOther[]){
   CheckOtherObjDelete(&arrObjOther);
   for(int i=ObjectsTotal(0,-1,-1)-1; i>=0; i--){
      string name=ObjectName(0,i,-1,-1);
      if(StringFind(name,pref)>=0)continue;
      bool add=true;
      for(int k=ArraySize(arrObjOther)-1; k>=0; k--){
         if(arrObjOther[k]==name){
            add=false;
            break;
         }
      }
      if(add){
         AddToArr(name,arrObjOther);
         return(true);
      }
   }
   return(false);
}
void CheckOtherObjDelete(string &arrObjOther[]){
   string arrdel[];
   ArrayFree(arrdel);
   for(int k=0; k<ArraySize(arrObjOther); k++){
      bool add=true;
      for(int i=0; i<ObjectsTotal(0,-1,-1); i++){
         string n=ObjectName(0,i,-1,-1);
         if(StringFind(n,pref)>=0)continue;
         if(n==arrObjOther[k]){
            add=false;
            break;  
         }
      }
      if(add) AddToArr(arrObjOther[k],arrdel);
   }
   if(ArraySize(arrdel)>0){
      string temp[];
      ArrayCopy(temp,arrObjOther);
      ArrayFree(arrObjOther);
      for(int i=0; i<ArraySize(temp); i++){
         bool add=true;
         for(int k=0; k<ArraySize(arrdel); k++){
            if(arrdel[k]==temp[i]){
               add=false;
               break;
            }
         }
         if(add)AddToArr(temp[i],arrObjOther);
      }
   }
}
void AddToArr(string value, string &arr[]){
   int s=ArraySize(arr);
   ArrayResize(arr,s+1);
   arr[s]=value;
}


In diesem Fall habe ich eine Reihe von Objektnamen in meinem Code, die nicht vom Programm erstellt wurden (andere). Sobald ein neues anderes Objekt auftaucht, lösche ich alle vom Programm erstellten Objekte (meine eigenen) und erstelle sie neu. In diesem Fall haben die eigenen Objekte immer den höchsten Index in der Liste der Objekte und sind daher visuell im Vordergrund. Es ist aber auch notwendig, das Array immer von anderen Objekten zu löschen, wenn diese aus dem Diagramm entfernt werden, damit das Array nicht unkontrolliert wächst.

Wenn Sie Ihre Objekte kontrollieren müssen, ist das einfacher. Sie müssen nur die Objektindizes kontrollieren.

 
Maksym Mudrakov:
Die Objekte werden entsprechend dem Index angezeigt:

folgt, dass das Objekt mit dem höchsten Index visuell im Vordergrund steht.

So komme ich aus dieser Situation heraus:


In diesem Fall hat mein Code eine Reihe von Namen von Objekten, die nicht im Programm erstellt wurden (andere). Sobald ein neues, anderes Objekt erscheint, lösche ich alle vom Programm erstellten Objekte (meine eigenen) und erstelle sie neu. In diesem Fall haben die eigenen Objekte immer den höchsten Index in der Liste der Objekte und stehen somit visuell im Vordergrund. Es ist aber auch notwendig, das Array immer von anderen Objekten zu befreien, falls diese aus dem Diagramm gelöscht werden, damit das Array nicht unkontrolliert wächst.

Wenn Sie Ihre Objekte kontrollieren wollen, ist das einfacher. Sie müssen nur die Objektindizes kontrollieren.

Ich habe oben gezeigt, was zu tun ist. Warum sollte man sich solche Mühe machen, wenn es eine von den Entwicklern empfohlene Methode gibt?

 
Hallo.

Ich möchte den ATP-Indikator auf das Preisdiagramm übertragen. Aber ich weiß nicht, wie man das macht. Ich möchte, dass es die maximale Bewegung der Volatilität von der Mittellinie desselben Zeitraums anzeigt. Falls jemand den Code hat, danke für die Mitteilung.
 
Hallo! Ich weiß nicht, wo ich anfangen soll, denn nach einem Monat vergeblicher Suche war mein Kopf in einem schrecklichen Durcheinander. Ich habe beschlossen, eine Nachricht in diesem Thread zu schreiben. Wenn ich hier an der falschen Stelle ansetze, tut es mir leid. Vielleicht kann jemand sagen, in welcher Branche dieses Thema besser aufgehoben ist? Der Kern meiner Frage ist: Was ist der beste und einfachste Weg, um Daten in MT4 von einer Drittanbieter-Website für die weitere Anzeige dieser Informationen auf einem Symbol Chart mit einem Expert Advisor, ein Indikator oder ein Skript zu erhalten? Im Moment verwende ich mein eigenes Skript, das die Datei Book1.csv unter der Adresse "MT4 Data Directory"\MQL4\Files öffnet. Bevor ich das Skript ausführe, muss ich den Chrome-Browser starten, zur Ressourcenseite gehen, ein Symbol auf dieser Seite auswählen, dann die Art der angezeigten Daten für dieses Symbol auswählen (die Seitenadresse ändert sich nicht), nach der Anzeige der Daten für dieses Symbol als Tabelle mit den Parameterwerten in einem begrenzten Bereich von Preisniveaus verwende ich die Table Capture-Erweiterung für den Chrome-Browser, kopiere die Daten aus der Tabelle auf der Ressourcenseite in die Zwischenablage, öffne dann Excel und füge die Daten aus der Zwischenablage in das Blatt Exel ein. Dann konvertiere ich numerische Daten in Exel (ersetze Kommas in den Zahlen durch Punkte) und speichere die Datei im csv-Format im Datenverzeichnis des Terminals. Und schon nach der Durchführung dieser Aktionen führe ich das Skript aus. Offensichtlich ist die Funktion WebRequest für diese Aufgabe nicht geeignet, da es zu Beginn keine Daten an der angegebenen Seitenadresse gibt (sie erscheint nach der Auswahl von Instrument und Datentyp). Ich wäre jedem dankbar, der mir den richtigen Weg weisen kann (natürlich kann es mehrere Wege geben).
Grund der Beschwerde: