Fehler, Irrtümer, Fragen - Seite 3126

 
Nikolai Semko #:

Sie bilden eine Datenstruktur oder ein Array von Strukturen in einem EA oder in einem Indikator und senden es an eine Ressource.

Kanvas selbst arbeitet mit einer grafischen Ressource (OBJ_BITMAP_LABEL/ OBJ_BITMAP). Es bleibt also nichts anderes übrig, als einer anderen Anwendung den Namen der Ressource mitzuteilen, und sie wird problemlos auf die Pixel zugreifen. Es muss auch das Pixelformat übergeben werden. Und Sie können die Pixel lesen oder sie mit einem anderen CCanvas ändern. Sie verfügt über eine Methode, CCanvas::Attach, um sie an eine vorhandene Ressource anzuhängen.

 
Nikolai Semko #:

Was ist das Problem, Andrej?
Bilden einer Datenstruktur oder eines Arrays von Strukturen

Überhaupt keine Probleme! Es sind nur die zusätzlichen Schritte, das ist es, was ich meine.

Jeder gepufferte Indikator kann von jedem anderen Indikator oder Expert Advisor gelesen werden.

Zum Beispiel habe ich einen EA, der eine Liste von laufenden Indikatoren erhält und dann erstellt sie auf eine bestimmte Liste von Instrumenten / TF und sammelt dann Signale von ihnen (und sendet sie an Telegramm). So kann jeder Pufferindikator einfach auf einem Diagramm ausgeführt werden, und er wird automatisch übernommen. Der Kanvas-Indikator muss jedoch manuell angeschlossen werden, und der Rest der Arbeit sollte dann manuell erledigt werden.

Wir müssen die Arbeit mit Kanvas-Indikatoren vereinheitlichen. Ich befürchte, dass diese Vereinheitlichung dazu führen wird, dass ... Pufferindikatoren))

 
Nikolai Semko #:

Was ist das Problem, Andrej?

Ich habe keins gefunden und auch nicht danach gesucht.

 
Andrey Khatimlianskii #:

Das ist kein Problem! Das sind nur unnötige Gesten, das ist es, was ich meine.

Jeder Buffer-Indikator kann von jedem anderen Indikator oder EA gelesen werden, und ein Kanvas benötigt einen Kastum-Layer.

Zum Beispiel habe ich einen EA, der eine Liste von laufenden Indikatoren erhält und dann erstellt sie auf eine bestimmte Liste von Instrumenten / TF und sammelt dann Signale von ihnen (und sendet sie an Telegramm). So kann jeder Pufferindikator einfach auf einem Diagramm ausgeführt werden, und er wird automatisch übernommen. Der Kanvas-Indikator muss jedoch manuell angeschlossen werden, und der Rest der Arbeit sollte dann manuell erledigt werden.

Wir müssen die Arbeit mit Kanvas-Indikatoren vereinheitlichen. Ich befürchte, dass diese Vereinheitlichung dazu führen wird, dass ... Pufferindikatoren)).

Ich spreche von erweiterten Möglichkeiten, einschließlich der Verwendung derselben Klassen für die Visualisierung, sowohl in Indikatoren als auch in Expert Advisors. Bei Indikatoren gibt es natürlich immer eine Pufferübertragungsmethode, und niemand verbietet ihre Verwendung bei reiner Leinwand.
Übrigens habe ich bereits eine hybride Methode der Übertragung implementiert, bei der ein Array von Strukturen in einem Puffer über eine Union übertragen wird. Zwar ist auf der Empfängerseite ein zusätzliches Add-on erforderlich, aber erstens ist es nicht kompliziert und zweitens macht es die Arbeit mit den Daten eines anderen Indikators einfacher und bequemer für den Benutzer, da es sich um Strukturen und nicht um Arrays von Doubles handelt. Das wird den Nutzern bestimmt gefallen.
 
Mihail Matkovskij #:

Kanvas selbst arbeitet mit einer grafischen Ressource (OBJ_BITMAP_LABEL/ OBJ_BITMAP). Es bleibt also nur noch, den Namen der Ressource einer anderen Anwendung mitzuteilen, und diese kann dann problemlos auf die Pixel zugreifen. Es muss auch das Pixelformat übergeben werden. Und Sie können die Pixel lesen oder sie mit einem anderen CCanvas ändern. Sie verfügt über eine Methode namens CCanvas::Attach, um sie an eine vorhandene Ressource anzuhängen.

Es ist unwahrscheinlich, dass eine Grafik übertragen werden muss, da sie häufig mit den Balken und Preisen des anderen Fensters synchronisiert und in das Ereignismodell integriert ist.
Das Indikatorfenster wird nicht gebildet, wenn es nicht vorhanden oder nicht aktiv ist.
Wenn das Indikatorfenster nicht vorhanden ist, gibt es nur den Weg über iCustom mit Puffer oder Puffer. Aber wie ich schon sagte, können Sie eine Struktur oder ein Array von Strukturen in diese Puffer legen.
 
Andrei Trukhanovich #:

Ich konnte es nicht finden, und ich habe nicht einmal danach gesucht.

Vielen Dank für die Berichterstattung.
Jetzt wissen wir, dass Sie das nicht tun.
 
Nikolai Semko #:
Außerdem denke ich, dass die grafische Ressource nicht einmal erzeugt wird, wenn das Indikatorfenster nicht existiert oder nicht aktiv ist.

Ich frage mich, in welchen Fällen ein Indikator läuft und sein Fenster nicht existiert? Und wenn das Fenster inaktiv ist (der Benutzer hat zu einem anderen Diagramm gewechselt oder es minimiert), welche Ressource wird aus dem Speicher entladen, wird sie einfach gelöscht?

Nikolai Semko #:
Aber, wie gesagt, Sie können eine Struktur oder ein Array von Strukturen in diese Puffer einfügen.

Ich glaube, da stimme ich mit Ihnen überein. Ich musste einen Multitasking-Roboter entwickeln. Die erste Anwendungsinstanz erstellt Aufgaben und Diagramme für sie und wendet dann eine spezielle Vorlage mit demselben Roboter an. Dann erstellt der erste Roboter die Aufgaben und die vom Automaten erstellten Roboter führen sie aus. Die Datenübertragung erfolgt über Ressourcen. Die Zahlenketten und Strukturen werden dorthin übertragen. Hier auf der Website gibt es ein Beispiel für die Datenübertragung über http (wenn ich mich recht erinnere). Aber die Daten über die Strukturen, ihre Größen und Typen gehen zuerst dorthin, und dann die Daten selbst. Ich habe beschlossen, es in meinem Expert Advisor einfacher zu machen, indem ich die Strings und Zahlen durch ein Array von uchar-Typen in Form von Strings übergebe, was den Prozess des Lesens/Schreibens stark vereinfacht. Aber ich habe noch nie Bytes in Indikatorpuffer geschrieben und sie von dort gelesen. Aber ich sehe schon einen Nachteil dieser Methode - die begrenzte Anzahl von Bytes in den Indikatorbalken. Allerdings befinden sich in jeder Zelle des Arrays 8 Bytes. Vielleicht ist das gar nicht so ein großer Nachteil. Wer weiß...

 
Mihail Matkovskij #:

Ich frage mich, in welchen Fällen ein Indikator läuft, aber sein Fenster nicht vorhanden ist?

Ich meinte die Verwendung von iCustom

Und wenn das Fenster inaktiv ist (der Benutzer hat zu einem anderen Diagramm gewechselt oder es minimiert), wird die Ressource aus dem Speicher entladen, wird sie einfach gelöscht?

Das war nur meine Vermutung, denn es gibt keinen besonderen Grund, Bilder zu erstellen, wenn das Fenster minimiert ist. Wie es in MT implementiert ist, habe ich nicht überprüft, bin aber auf etwas Ähnliches gestoßen. Ich habe alle Feinheiten vergessen.
Auf jeden Fall ist es unwahrscheinlich, dass die Ressource gelöscht wird, aber sie wird auch nicht mit der Zeit aktualisiert. D.h. CCanvas::Update funktioniert nicht

void CCanvas::Update(const bool redraw)
  {
//--- check
   if(m_rcname==NULL)
      return;
//--- update resource and redraw
   if(ResourceCreate(m_rcname,m_pixels,m_width,m_height,0,0,0,m_format) && redraw)
      ChartRedraw(this.m_chart_id);
  }
 
Nikolai Semko #:

Ich meinte die Verwendung von iCustom

Es stellt sich heraus, können Sie Werte durch die Ressource und Puffer übergeben, aber nicht durch Kanvas Ressource. Es ist eine interessante Aufgabe, einen Indikator mit Ausgabe an Kanvas mitiCustom aufzurufen.Ich habe es nicht ausprobiert. Ich habe den Eindruck, dass in diesem Fall Fehler vorliegen könnten. Kann es sein, dass ein solcher Indikator, der über iCustom geladen wird, überhaupt nicht funktioniert?

In jedem Fall ist es unwahrscheinlich, dass die Ressource gelöscht wird, aber sie wird auch nicht mit der Zeit aktualisiert. D.h. CCanvas::Update funktioniert nicht.

Ich glaube, ResourceCreate funktioniert, aber das Ergebnis wird nicht mit ChartRedraw gerendert. Die Aufrufe der Funktion laufen, aber das System versteht, dass das Diagramm nicht aktualisiert werden muss, solange es inaktiv ist. WennResourceCreate jedoch nicht funktioniert,stellen Sie sich vor, dass der Indikator bei einem zufälligen Tick, wenn das Diagramm inaktiv ist, Daten aktualisiert hat, aber die Kanvas-Ressource nicht aktualisiert wurde. Und dann hat der Benutzer beschlossen, diesen inaktiven Chart zu aktivieren und den Indikator (Kanwa)zu betrachten. Und es stellt sich heraus, dass es ein Häkchen gab, aber die Canva bleibt die gleiche wie vor der Änderung des Diagramms durch den Benutzer. Und was wäre, wenn es in der Zeit der Inaktivität viele Zecken gäbe? Natürlich würde der Indikator sie verarbeiten, aber keines der Ergebnisse würde auf der Leinwand angezeigt werden.

 
Mihail Matkovskij #:

Ich glaube, ResourceCreate funktioniert, aber das Ergebnis wird nicht mit ChartRedraw angezeigt.

Ja, Sie haben wahrscheinlich Recht. Dies ist wahrscheinlich der Fall.
Und um Ressourcen zu sparen, wäre es richtig, die Fensteraktivität zu überwachen und keine Bitmap zu erzeugen, wenn das Fenster nicht aktiv ist.

Es lohnt sich, nachzuprüfen, statt Vermutungen anzustellen.

Grund der Beschwerde: