Diskussion zum Artikel "Farbpuffer in Multi-Symbol-Multi-Perioden-Indikatoren"

 

Neuer Artikel Farbpuffer in Multi-Symbol-Multi-Perioden-Indikatoren :

In diesem Artikel werden wir die Struktur des Indikatorpuffers bei Multi-Symbol- und Multi-Perioden-Indikatoren untersuchen und die Darstellung farbiger Puffer dieser Indikatoren auf dem Chart organisieren.

Ein einfarbiger Indikatorpuffer ist ein reguläres Double-Array, das bei der Berechnung des Indikators mit Daten gefüllt wird. Wir können Daten aus diesem Array abrufen und sie mit dem Befehl CopyBuffer() in einem Chart anzeigen, vorausgesetzt, das empfangende Array ist ein Double-Array, das als Plot-Puffer für einen Indikator festgelegt wurde (SetIndexBuffer()). Beim Kopieren von Daten aus dem Puffer des berechneten Teils des Indikators in den Puffer seines Teils, der gezeichnet wird, werden die Daten im Chart in einer Farbe angezeigt, die für das Puffer-Array des Zeichenteils festgelegt ist. Bei mehrfarbigen Puffern ist die Situation ein wenig anders. Neben dem Datenfeld verfügt der Farbpuffer auch über ein Feld mit Farbindizes.


Ausgehend von den obigen Ausführungen gehen wir davon aus, dass

  1. der Indikatorzeichnungspuffer (plot buffer) kann je nach Zeichenstil ein oder mehrere Arrays zum Plotten verwenden.
  2. für jedes Farbfeld wird ein zusätzliches Feld verwendet, das ein Feld mit Farbindizes des Zeichnungspuffers ist, dessen Index um 1 größer ist als der Index des letzten dem Zeichnungspuffer zugewiesenen Feldes.

Zum besseren Verständnis erstellen wir einen neuen Indikator, in dem wir mehrere Puffer für die Darstellung angeben, darunter einfache und farbige, die mehrere Arrays für die Konstruktion verwenden:


Wir haben die folgende Indikatorvorlage:

Autor: Artyom Trishkin

 

Hallo Artem, wie kann man einen eigenen Indikator hinzufügen? Ich schaffe es nicht! Ich muss etwas falsch machen?! Wenn es ein Beispiel gäbe... Schritt für Schritt durch den Code und es wäre klar! Aber er sofort!... Fehler bei der Erstellung des Indikators... OnInit Rückgabewert ist -1... Hilfe im Allgemeinen, bitte!

  MqlParam mql_params[];
   ArrayResize(mql_params, 2);

   mql_params[0].type          = TYPE_STRING;
   mql_params[0].string_value  = "My_Indicators\\INDI_MSMT\\Test";
//---
   mql_params[1].type          = TYPE_INT;
   mql_params[1].integer_value = 10;

   handle_ind2 = indicators.AddNewCustom(NULL, PERIOD_CURRENT, "My_Indicators\\INDI_MSMT\\Test.ex5", "DON_MFI_SIS", 1, mql_params);

//handle_ind1 = IndicatorCreate(NULL, PERIOD_CURRENT, IND_CUSTOM, 1, mql_params);

 
Igor Bakhrushen Erstellung des Indikators... OnInit Rückgabewert ist -1... Hilfe im Allgemeinen, bitte!


Anhand des Bildes ist es schwierig zu verstehen, was Sie dort falsch machen. Bitte fügen Sie den Code, der nicht funktioniert, zusammen mit dem benutzerdefinierten Indikator, den Sie verwenden.
 
Artyom Trishkin #:
Anhand des Bildes ist es schwierig zu verstehen, was Sie dort falsch machen. Bitte fügen Sie den Code, der nicht zusammen mit dem benutzerdefinierten Indikator, den Sie verwenden, funktioniert.

Ihre Bibliothek wurde nicht in irgendeiner Weise geändert, ich habe es einfach kopiert... Der Test wurde nur für einen Puffer gemacht, ich verstehe nicht ganz, wie das alles funktionieren soll, wenn man 20 davon hat! Wie auch immer, Schritt für Schritt! .... danke!

Dateien:
INDI_MSMT_1.mqh  638 kb
Test.mq5  8 kb
DON_MFI_SIS.mq5  10 kb
 
Igor Bakhrushen #:

Ihre Bibliothek wurde in keiner Weise verändert, ich habe sie nur kopiert... der Test wurde nur für einen Puffer gemacht, ich verstehe nicht ganz, wie das alles funktionieren soll, wenn man 20 davon hat! Wie auch immer, Schritt für Schritt!.... danke!

Ich habe mir Ihre Codes angesehen. Wo ist der funktionierende benutzerdefinierte Indikator? Es ist nur ein Dummy mit einem nicht-farbigen Puffer. Wahrscheinlich brauchen Sie diesen Artikel: https://www.mql5.com/de/articles/13578. Er enthält alles für die Arbeit mit einfarbigen benutzerdefinierten Indikatoren.

Готовим мультисимвольные мультипериодные индикаторы
Готовим мультисимвольные мультипериодные индикаторы
  • www.mql5.com
В статье рассмотрим принципы создания мультисимвольных мультипериодных индикаторов и получение от них данных в советниках и индикаторах. Рассмотрим основные нюансы использования мульти-индикаторов в советниках и индикаторах, и их отрисовку через буферы пользовательского индикатора.
 
Artyom Trishkin #:

Ich habe mir Ihre Codes angesehen. Wo ist der funktionierende benutzerdefinierte Indikator? Es gibt nur einen Dummy mit einem nicht-farbigen Puffer. Wahrscheinlich brauchen Sie diesen Artikel: https://www.mql5.com/de/articles/13578. Er enthält alles für die Arbeit mit einfarbigen benutzerdefinierten Indikatoren.

Hallo Artem, vielen Dank, dass du es dir angeschaut hast! Ich habe es mit nicht-farbigen Puffern zum Laufen gebracht, aber es ist ein bisschen zaghaft... aus irgendeinem Grund dauert es sehr lange, bis es geladen ist... vielleicht Sonntag? Brauchen Sie einen Verlauf? Wenn Sie das Terminal neu starten, wird es dann sofort gezeichnet? Auf dem Foto im Rahmen haben drei Puffer den gleichen Wert, das sollte nicht so sein. Versetzt um einen Balken, auch im Rahmen. Bei farbigen Bildern ist es ein Problem... Es wird überhaupt nichts geladen! Können Sie sich das mal ansehen? Vielen Dank!


 
Sorry, ich habe die Puffer falsch gewählt! Ich habe versehentlich den Typ geändert... und dann nicht den richtigen! Also fügen wir 0 hinzu! CIndMSTF::Calculate::Test_Indi_MSMT: CopyBuffer(0) failed. Fehler 4806 Daten können nicht gefunden werden! Und es passiert mit verschiedenen Puffern!

 
Igor Bakhrushen CopyBuffer(0) failed. Fehler 4806 Daten können nicht gefunden werden! Und es passiert mit verschiedenen Puffern!

Wenn die Daten nicht empfangen werden, verlässt der Indikator OnCalculate() einfach mit der Rückgabe des Wertes Null, was dem Hinweis entspricht, dass er noch nicht berechnet wurde, und versucht beim nächsten Tick erneut, Daten zu empfangen. In diesem Fall wird mit dem ersten Zugriff auf die erforderlichen, aber nicht empfangenen Daten der Prozess der Auslagerung dieser Daten gestartet.

 
Artyom Trishkin #:

Werden die Daten nicht empfangen, beendet der Indikator OnCalculate() einfach mit der Rückgabe des Wertes Null, was einem Hinweis darauf gleichkommt, dass er noch nicht berechnet wurde, und versucht beim nächsten Tick erneut, Daten zu empfangen. In diesem Fall beginnt mit dem ersten Zugriff auf die erforderlichen, aber nicht empfangenen Daten der Prozess der Auslagerung dieser Daten.

Warum tritt dieses Problem nicht auf, wenn das Terminal neu gestartet wird? Es wird alles auf einmal gezeichnet! Es tritt auf, wenn man zu einer anderen TF wechselt... und manchmalhat dieses"array out of range in 'INDI_MSMT_!.mqh' (680,51)" immer genug Größe, und manchmal nicht.... das ist mir ein Rätsel!


 
Igor Bakhrushen #:
INDI_MSMT_.

Ich habe diese Datei nicht. Ich weiß nicht, wie ich hier helfen kann...

 
Artyom Trishkin #:

Ich habe diese Datei nicht. Ich weiß nicht, wie ich hier helfen kann...

Dateien:

Gestern habe ich 'INDI_MSMT_!.mqh' angehängt , die allererste...