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

 
Artyom Trishkin:

Ich habe oben gezeigt, was zu tun ist. Warum so viel Ärger machen, wenn es eine von den Entwicklern empfohlene Methode gibt?

War es eine Frage der Auswahl, in welchen Zeitrahmen das Objekt angezeigt werden sollte und in welchen nicht?

Nehmen wir an, es gibt ein Handelsfeld auf dem Chart. Dann erstelle ich manuell Objekte (Handelsebenen, vertikale Linien, Rechtecke).

Alles, was ich manuell erstelle, wird auf das Handels-Panel übertragen. Alle Objekte befinden sich im gleichen Zeitrahmen.

Und wie hilft die "von den Entwicklern empfohlene Methode" in diesem Fall?

 
Aliaksei Karalkou:
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.

https://www.mql5.com/ru/code/23304

Multi_ATR_Bands
Multi_ATR_Bands
  • www.mql5.com
Индикатор Three ATR Bands with multiple selection
 
Artyom Trishkin:

Eigenschaft OBJPROP_TIMEFRAMES:

OBJ_NO_PERIODS - nicht in allen Zeiträumen sichtbar,

OBJ_ALL_PERIODS - sichtbar für alle Zeiträume

Ich danke Ihnen.

Die Methode hat sich wirklich bewährt und ist sehr kompakt.

Das Objekt bleibt nun visuell über allen anderen.

 
Maksym Mudrakov:

War es eine Frage der Auswahl, in welchen Zeitrahmen das Objekt angezeigt werden sollte und in welchen nicht?

Nehmen wir an, es gibt ein Handelsfeld auf dem Chart. Dann erstelle ich manuell Objekte (Handelsebenen, vertikale Linien, Rechtecke).

Alles, was ich manuell erstelle, wird auf das Handels-Panel übertragen. Alle Objekte befinden sich im gleichen Zeitrahmen.

Und wie hilft die "von den Entwicklern empfohlene Methode" in diesem Fall?

Ich habe Ihren Vorschlag zur Kenntnis genommen, aber ich hatte ein Flackern, wenn ich ein Objekt löschte und neu zeichnete.

Dievon Artyom Trishkin vorgeschlagene Methode funktioniert tatsächlich!

Jetzt wird das Objekt nicht mehr neu gezeichnet und flackert nicht mehr, und es bleibt visuell übersichtlich.

In meinem Fall war es übrigens auch ein Handelsbereich, der durch Pfeile von offenen und geschlossenen Geschäften blockiert wurde.

Wie ich das Problem gelöst habe:

// Глобальное объявление
int last_tick_objects = 0;                // количество объектов на прошлом тике
// имена графических объектов:
string tp_rctngl = "TP Rectangle";
string sl_rctngl = "SL Rectangle";
string vol_rctngl = "Volume Rectangle";

//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   long cid = ChartID();
   if(ObjectsTotal() != last_tick_objects)  // количество объектов поменялось
     {
      last_tick_objects = ObjectsTotal();   // запоминаем новое количество объектов
      // выводим на передний план объекты: tp_rctngl, sl_rctngl, vol_rctngl
      if(ObjectFind(cid, tp_rctngl) > -1) // объект существует
        {
         ObjectSetInteger(cid, tp_rctngl, OBJPROP_TIMEFRAMES, OBJ_NO_PERIODS);  // делаем невидимым на всех таймах
         ObjectSetInteger(cid, tp_rctngl, OBJPROP_TIMEFRAMES, OBJ_ALL_PERIODS); // делаем видимым на всех таймах
        }
      //---
      if(ObjectFind(cid, sl_rctngl) > -1) // объект существует
        {
         ObjectSetInteger(cid, sl_rctngl, OBJPROP_TIMEFRAMES, OBJ_NO_PERIODS);  // делаем невидимым на всех таймах
         ObjectSetInteger(cid, sl_rctngl, OBJPROP_TIMEFRAMES, OBJ_ALL_PERIODS); // делаем видимым на всех таймах
        }
      //---
      if(ObjectFind(cid, vol_rctngl) > -1) // объект существует
        {
         ObjectSetInteger(cid, vol_rctngl, OBJPROP_TIMEFRAMES, OBJ_NO_PERIODS); // делаем невидимым на всех таймах
         ObjectSetInteger(cid, vol_rctngl, OBJPROP_TIMEFRAMES, OBJ_ALL_PERIODS);// делаем видимым на всех таймах
        }
      ChartRedraw(cid);// перерисовка графика для применения изменений
     }
  }
//+------------------------------------------------------------------+
 

Ich schreibe einen EA, der von Zeit zu Zeit mehrere lange Zyklen verschiedener Neuberechnungen durchführen muss (z.B. alle 12, 24, 48 Stunden). Jede dieser Neuberechnungen dauert 1,5-2 Stunden auf einem Kern (d.h. in einem Thread) - und natürlich werden die Verarbeitung neuer Ticks und der Handel durch diesen EA pausiert

... Solche Berechnungen können an einen anderen EA in einem anderen Thread delegiert werden, und die endgültigen Daten können mitder Funktion EventChartCustom und dem OnChartEvent-Ereignishandler zwischen EAs übertragen werden


Aber ich muss in der Lage sein, den EA auf dem Marktplatz zu veröffentlichen - so delegieren Neuberechnungen und Neuberechnungen in den gleichen Thread ist nicht geeignet. Gibt es ein Analogon der Thread-Bibliothek von C++ oder eine andere Version für die Implementierung einer solchen spezifischen EA in MQL5? (Ich habe das Wort "Thread" mit dem Filter "Dokumentation" in die Suchmaschine auf der Website eingegeben, und es gibt nichts).

 
Oleg Remizov:

Ich habe Ihren Vorschlag zur Kenntnis genommen, aber ich hatte ein Flackern, wenn ich ein Objekt löschte und neu zeichnete.

Dievon Artyom Trishkin vorgeschlagene Methode funktioniert tatsächlich!

Jetzt wird das Objekt nicht mehr neu gezeichnet und flackert nicht mehr, und es bleibt visuell übersichtlich.

In meinem Fall war es übrigens auch ein Handelsbereich, der durch Pfeile von offenen und geschlossenen Geschäften blockiert wurde.

Wie ich das Problem gelöst habe:

Der Punkt ist, dass das Flackern auf die Tatsache zurückzuführen ist, dass das Löschen und Rendern sehr oft geschieht, man muss nur das Erscheinen neuer Objekte abfangen. Wenn die Methode funktioniert, werde ich sie natürlich auch übernehmen, aber da in der Dokumentation eine solche nützliche Eigenschaft nicht erwähnt wird, habe ich nie darauf geachtet.

Allerdings stellt sich die Frage, ob Sie Ihr eigenes Handelspanel in Verbindung mit einem Indikator eines Drittanbieters verwenden, der ebenfalls Objekte erstellt.

 
Maksym Mudrakov:

War die Frage, in welchen Zeiträumen das Objekt angezeigt werden soll und in welchen nicht?

Nehmen wir an, es gibt ein Handelsfeld auf dem Chart. Dann erstelle ich manuell Objekte (Handelsebenen, vertikale Linien, Rechtecke).

Alles, was ich manuell erstelle, wird auf das Handels-Panel übertragen. Alle Objekte befinden sich im gleichen Zeitrahmen.

Und wie hilft die "von den Entwicklern empfohlene Methode" in diesem Fall?

Forum zum Thema Handel, automatisierte Handelssysteme und Strategietests

Alle Fragen von Neulingen zu MQL4 und MQL5, Hilfe und Diskussion über Algorithmen und Codes

Oleg Remizov, 2020.04.26 14:44

Ich danke Ihnen.

Die Methode hat sich wirklich als effektiv und sehr kompakt erwiesen.

Jetzt ist das Objekt visuell höher als alle anderen.


 
Maksym Mudrakov:

Der Punkt ist, dass das Flimmern auf die Tatsache zurückzuführen ist, dass das Löschen und Rendern sehr oft geschieht, man muss nur das Erscheinen neuer Objekte abfangen. Wenn die Methode funktioniert, dann werde ich sie natürlich auch übernehmen, aber da in der Dokumentation eine solche nützliche Eigenschaft nicht erwähnt wird, habe ich nie darauf geachtet.

Die Frage bleibt jedoch offen, wenn Sie Ihr eigenes Handelspanel in Kombination mit einem Indikator eines Drittanbieters verwenden, der ebenfalls Objekte erstellt.

Die von Slawa empfohlene Methode war die einzige akzeptable Methode. Sie können seine Beiträge durchsuchen - es ist in seinem Profil - Veröffentlichungen/Alle Beiträge.

Und ja, wie hilft Ihre Methode, alle Objekte in der gleichen Situation neu zu erstellen?

 
Artyom Trishkin:

Slawa empfahl diese Methode als die einzige, die am besten geeignet ist. Sie können seine Beiträge durchsuchen - es ist in seinem Profil - Veröffentlichungen/Alle Beiträge.

Und, ja, wie würde Ihre Methode, alle Objekte neu zu erstellen, in der gleichen Situation helfen?

Ich würde folgendes tun, mit einem Drittanbieter-Indikator müssen Sie ObjectsTotal() zu verfolgen, und wenn der größte Index meiner Panel-Objekt kleiner ist als ObjectsTotal()-1, dann neu erstellen Sie das Panel. Ich muss Ihre Methode erst in allen möglichen Situationen ausprobieren, aber bisher sehe ich keine größere Freiheit bei der Verwendung von Objects Visibility.
 
Artyom Trishkin:

Ich kann Meta Trader 5 nicht erstellen
Grund der Beschwerde: