Diskussion zum Artikel "Erstellen von Multi-Symbol- und Multi-Perioden-Indikatoren" - Seite 3

 
Denis Kirichenko #:

Um etwas zu testen, muss man im Paradigma dessen sein, was vor sich geht ))

Ich habe festgestellt, dass es für mich einfacher ist, meine eigene Version zu entwerfen, da ich mit dem derzeitigen Ansatz nicht vertraut bin. Insbesondere scheint es mir, dass die Klasse CIndMSTF eine Art Superklasse ist. Auf ihrer Basis werden dann eine Reihe von Indikatorklassen erstellt. Unheimlich - die Datei IndMSTF.mqh besteht aus 4 Tausend Zeilen Code )) Ich bin den Weg gegangen, eine Instanz der Klasse CIndicators als Indikatorensammlung zu verwenden. Das ist sehr praktisch. Sie müssen das Rad nicht neu erfinden...

Warum sollte die Klasse CIndMSTF dann Daten in Puffern (SBuffer m_buffers[]) speichern? Wir haben sie einmal in OnCalculate() berechnet, und das reicht aus. D.h. wir haben sie als Parameter per Referenz genommen, berechnet und an Sie weitergegeben...

Ich werde später mehr darüber schreiben, womit ich nicht einverstanden bin, wenn ich meine Version fertig habe...

Ja, es gefällt mir, dass es diesen Mechanismus gibt:

Wegen der Erweiterbarkeit - so dass einmal berechnete Daten in einem separaten Array vom Berechnungsteil liegen. CopyBuffer kopiert eine bestimmte Anzahl von Balken in ein Array und passt die Größe des empfangenden Arrays an die kopierte Datenmenge an. D.h., wenn Sie ständig Daten benötigen, müssen Sie diese ständig aus dem Puffer des Berechnungsteils kopieren.

Hier haben wir es so gemacht, dass es ein ständig gefülltes Array mit allen Daten gibt, und die Daten werden daraus per Index geholt. Ohne Kopieren. Das Kopieren erfolgt einmal beim Start, und dann werden die Daten nur zwei Balken auf einmal am Ende der Liste hinzugefügt. Ich glaube, die gleiche Logik wird in SB in der von Ihnen erwähnten Klasse verwendet. Vielleicht habe ich es vergessen und liege falsch.

 
Artyom Trishkin #:

Wegen der Erweiterbarkeit - um die berechneten Daten in einem separaten Array vom Berechnungsteil zu halten. CopyBuffer kopiert eine bestimmte Anzahl von Takten in das Array und passt die Größe des empfangenden Arrays an die kopierte Menge an Daten an. D.h., wenn Sie ständig Daten benötigen, sollten Sie diese ständig aus dem Puffer des Berechnungsteils kopieren.

Hier haben wir es so gemacht, dass es ein ständig gefülltes Array mit allen Daten gibt, aus dem die Daten per Index geholt werden. Ohne Kopieren. Das Kopieren erfolgt einmal beim Start, und dann werden die Daten nur zwei Balken auf einmal am Ende der Liste hinzugefügt. Ich glaube, die gleiche Logik wird in SB in der von Ihnen erwähnten Klasse verwendet. Vielleicht habe ich es vergessen und liege falsch.

Ja, es gibt das Füllen von Arrays. Aber es gibt auch einen Versuch des direkten Zugriffs - die api-Methode CIndicator::GetData(), die die native Funktion CopyBuffer() direkt aufruft.

 
100 Fehler, 6 Warnungen 100 7. Warum 100 Fehler beim Kompilieren. Was mache ich falsch?

 
StohanoV #:
100 Fehler, 6 Warnungen 100 7. Warum 100 Fehler beim Kompilieren. Was mache ich falsch?

Der allererste Fehler im Protokoll des Editors lautet wie?

 
Artyom Trishkin #:

Eine Nachricht von den Entwicklern im Forum.

Ich erinnere mich an etwas Ähnliches über 4, aber ich muss es über 5.... verpasst haben.

Seltsam, dass solche Dinge nicht im Terminal konfigurierbar sind. Und auch nicht in der Dokumentation beschrieben sind.

Bitte sagen Sie mir, ob Ihr Ansatz es Ihnen erlaubt, Daten aus dem Nullpuffer des oberen TF beim ersten Tick zu erhalten?

 
Aleksey Vyazmikin #:

Ich erinnere mich an so etwas bei den vier, aber bei den fünf habe ich es offenbar verpasst....

Es ist seltsam, dass solche Dinge nicht im Terminal konfiguriert werden. Und auch nicht in der Dokumentation beschrieben sind.

Bitte sagen Sie mir, ob Ihr Ansatz es erlaubt, Daten aus dem Nullpuffer des oberen TF beim ersten Tick zu erhalten?

Probieren Sie es aus. Wahrscheinlich nicht