Diskussion zum Artikel "Verringerung der Speicherbelegung mittels Hilfsindikatoren"

 

Neuer Artikel Verringerung der Speicherbelegung mittels Hilfsindikatoren :

Braucht ein Indikator für seine Berechnungen die Werte vieler anderer Indikatoren belegt er eine Menge Speicherplatz. In diesem Beitrag werden verschiedene Methoden beschrieben, wie man die Speicherbelegung mittels Hilfsindikatoren verringern kann. Eingesparter Speicherplatz erlaubt es uns, die Menge der gleichzeitig verwendeten Währungspaare. Indikatoren und Strategien im Client-Terminal zu erhöhen. Und steigert so die Zuverlässigkeit des Handels-Portfolios. Diese einfache Berücksichtigung der technischen Ressourcen Ihres Rechners kann sich in echtem Gewinn in Ihrem Depot niederschlagen.

Sie haben wahrscheinlich bereits Expert Advisors oder Indikatoren verwendet oder erzeugt, die für ihre Arbeit Hilfsindikatoren verwenden.

So nutzt der berühmte MACD-Indikator zwei Kopien des EMA-Indikators (exponential gleitenden Mittelwerts) zur Berechnung des Unterschieds ihrer Werte:


So ein zusammengesetzter Indikator entspricht in der Tat mehreren einfachen Indikatoren. Der gerade erwähnte MACD braucht dreimal so viel Speicherplatz und Prozessorzeit wie ein einziger EMA, da er sowohl dem Puffer des Hauptindikators als auch dem Puffer all seiner Hilfsindikatoren Speicherplatz zuweisen muss.

Und neben dem MACD, gibt es noch komplexere Indikatoren, die mehr als zwei Hilfsindikatoren verwenden.

Darüber hinaus nimmt diese Speicherplatzbelegung noch erheblich zu, wenn:

  • der Indikator mehrere Zeitrahmen verwendet (wenn er z.B. die Gleichzeitigkeit von Wellen auf mehreren Zeitrahmen nachverfolgt), und somit für jeden Zeitrahmen separate Kopien der Hilfsindikatoren erzeugt;
  • der Indikator ein Mehrwährungs-Indikator ist;
  • ein Händler den Indikator zum Handel auf mehreren Währungspaaren verwendet (ich weiß von Personen, die auf mehr als zwei Dutzend Paaren gleichzeitig handeln).

Autor: Andrew

 

Der Ansatz ist verständlich. Aber die Relevanz der Aufgabe ist verwirrend.

Während ein 64-Bit-System riesige Mengen an RAM unterstützt, verblasst die Relevanz der Aufgabe. Selbst ein 32-Bit-System mit seinen 3 GB kann durchaus solche Speichergrößen ziehen, wie Sie sie hier einsparen. Schließlich wächst der Speicher beim Laden neuer Indikatoren linear an, was bedeutet, dass 48 MB mehr oder weniger für moderne Computer nichts sind.

Okay, gehen wir davon aus, dass die Aufgabe relevant ist (ich stimme zu, dass es Leute gibt, die sich dafür interessieren). Aber bedenken Sie, dass die Aufgabe der Speichereinsparung in direktem Konflikt mit der Aufgabe der Leistung steht.

Sie sollten also auch diesem Punkt Beachtung schenken.

Soweit ich das aus meiner Sicht beurteilen kann, kämpfen die MQs um die Leistung, und darauf konzentrieren sich alle Bemühungen.

Wenn Sie bei nicht gezeichneten Indikatoren Speicherressourcen einsparen müssen, übertragen Sie den Indikatorcode einfach in den Expert Advisor. Hier haben Sie die volle Kontrolle über den zugewiesenen Speicher. Gleichzeitig können Sie beim Empfang der gleichen Art von Daten sparen. Viele Indikatoren fordern die gleichen Daten für ihre eigene Verarbeitung an. Wenn Sie die Daten einmal erhalten haben, müssen Sie sie in der Folgezeit nicht mehr ansprechen.

Kombinieren wir nun die beiden Aufgaben Geschwindigkeit und Speichergröße. Die meisten nicht zeichnenden Indikatoren sind mit der Berechnung des letzten Balkens beschäftigt, was durch die eingebauten Mechanismen zur Blockierung der Neuberechnung des gesamten Arrays angezeigt wird. Es stellt sich heraus, dass es im Expert Advisor möglich sein wird, 154 Speicherzellen zuzuweisen (zum Beispiel für die Berechnung der Maske mit der Periode 153), wobei die Leistung nicht schlechter sein wird als bei einem normalen Indikator.

Aber die Möglichkeit, Berechnungen zu parallelisieren, geht im Expert Advisor verloren, und das ist ein direkter Schlag unter die Gürtellinie für die Leistung. Tatsächlich verbrauchen die Indikatoren gerade wegen der Parallelität Speicher. Schließlich arbeitet jeder Indikator in einem eigenen Thread, und dieser Thread muss seine eigene Instanz von Quelldaten haben.

Документация по MQL5: Основы языка / Переменные
Документация по MQL5: Основы языка / Переменные
  • www.mql5.com
Основы языка / Переменные - Документация по MQL5
 

Ich stimme zu, dass die Leistung an erster Stelle steht und es keinen Sinn macht, Speicherplatz zu sparen (es sei denn, Sie verwenden mehr als 1 GB, was unwahrscheinlich ist).

 
Urain:

Der Ansatz ist verständlich. Aber die Dringlichkeit der Aufgabe ist verwirrend.

Nun, eigentlich kam mir die Idee, diesen Artikel zu schreiben, nachdem sich eine Person, für die ich einen bestimmten zusammengesetzten Indikator geschrieben hatte, darüber beschwerte, dass dieser Indikator bei einigen Paaren nicht installiert war. Bei der Untersuchung stellte sich heraus, dass es sehr hartnäckige Indikatoren gibt, von denen viele nicht in das Terminal passen (das heißt, das Problem lag nicht im Paar, sondern in der Tatsache, dass vor diesem Paar ein Dutzend weiterer mit demselben hartnäckigen Indikator geöffnet wurde). Dieser Indikator verbrauchte 2-mal mehr als der Testindikator in diesem Artikel.

Selbst 32-bit mit seinen 3GB kann solche Speichergrößen durchaus ziehen

Wenn Sie mit einer großen Anzahl von Paaren handeln, tut es das nicht, das ist der Punkt.

Übrigens, das Terminal kann nicht mehr als 2 Gb Speicher zuweisen (insgesamt: RAM + virtueller Speicher). In meinen Experimenten wurde es bei dieser Marke geschlossen.

Natürlich sollte dieses Problem bei 64 Bit nicht bestehen.

OK, gehen wir davon aus, dass die Aufgabe relevant ist (ich stimme zu, dass es Leute gibt, die sich dafür interessieren). Aber denken Sie darüber nach, die Aufgabe der Speichereinsparung steht in direktem Widerspruch zu der Aufgabe der Leistung.

Nicht immer. Die meisten der in diesem Artikel vorgestellten Methoden beeinträchtigen die Leistung nicht.

Wenn Sie bei nicht zeichnungsfähigen Indikatoren Speicherressourcen einsparen müssen, verschieben Sie den Indikatorcode einfach in den Expert Advisor.

Ein Expert Advisor, der nur den letzten Balken von Indikatoren anfordert, ist eine andere Programmklasse als die in diesem Artikel betrachtete. Und es ist nicht immer möglich/praktisch, das eine durch das andere zu ersetzen.

Aber in einem Expert Advisor geht die Möglichkeit der Parallelisierung von Berechnungen verloren, und das ist ein direkter Schlag für die Leistung. Tatsächlich verbrauchen die Indikatoren gerade wegen der Parallelität Speicher. Schließlich arbeitet jeder Indikator in einem eigenen Thread, und dieser Thread muss seine eigene Instanz von Quelldaten haben.
.

Es ist unwahrscheinlich, dass jeder Indikator eines gemeinsamen Paares eine eigene Instanz von Daten hat - es gibt eine interessante Tabelle in dem Artikel über parallele Berechnungen, die durch den Schlüsselbegriff "2 Indikatoren" gefunden werden kann.

 
ds2:

Das Problem der Indikatoren besteht darin, dass jeder von ihnen in seinem eigenen Thread arbeitet und alle notwendigen Daten im Thread selbst speichern muss, um zu funktionieren.

Die Daten zwischen den Threads werden mit CopyBuffer() kopiert. Aber hier ist das Problem: Sie können Daten von einem Thread abrufen, aber Sie können sie nicht dorthin übertragen. Deshalb kann man auch keine Mogostage-Indikatoren bauen, bei denen mehrere Instanzen eines Indikators die gleichen vorverarbeiteten Daten erhalten. Aber genau in dieser Ebene können große Möglichkeiten zur Optimierung von Berechnungen liegen.

Ich denke, wenn MQ dieses Problem löst, wird die Arbeit mit Indikatoren bequemer und flexibler werden. Jetzt können die Daten nur als externe Parameter und nur am Anfang des Threads übergeben werden.



Как написать индикатор в MQL5
Как написать индикатор в MQL5
  • 2010.01.12
  • MetaQuotes Software Corp.
  • www.mql5.com
Что представляет собою индикатор? Это набор вычисленных значений, которые мы хотим отобразить на экране монитора удобным для нас образом. Наборы значений представляются в программах в виде массивов. Таким образом, создание индикатора - это написание алгоритма, который обрабатывает одни массивы (массивы цен) и записывает результаты обработки в другие массивы (значения индикаторов). На примере создания индикатора True Strength Index в статье рассказывается, как писать индикаторы на MQL5
 

Sehr nützlich

so, wenn ich richtig verstehen, die wichtigsten Idee Strom, eine Frage stellt sich:

warum alle Standard-Indikatoren auf MT5 Installation sind nicht als "Klasse" konzipiert?

Dann, warum Master-Assistent nicht Pflege solcher Idee?

 

ohne Begrenzung der maximalen Balkenanzahl unter Extras> Optionen ist eine schnelle Möglichkeit, den Pufferplatz zu reduzieren

int maxbars =100;// letzte Takte
limit = rates_total-rates_total+maxbars;