Fehler, Irrtümer, Fragen - Seite 672

 
MetaDriver:

Wie viele Balken befinden sich im Fenster?

Die Barren sind 2000000 wert.
 
papaklass:

Das Problem ist, dass beim Umschalten der TF kein Speicher im Terminal freigegeben wird. Starten Sie den Task-Manager, werfen Sie den Indikator auf das Diagramm und beobachten Sie, wie der Speicher wächst. Wechseln Sie dann zu einer anderen TF und Sie werden sehen, dass der Speicher wieder zu wachsen beginnt. Aber logischerweise sollten beim Wechsel zu einer anderen TF die Daten der vorherigen TF aus dem Speicher entladen werden. Da die Daten der vorherigen TF nicht gelöscht werden, wächst der Speicher, bis er neu startet und einen Fehler erzeugt. Wenn Sie Ihren Indikator aus dem Diagramm entfernen, werden Sie feststellen, dass der Speicher nach einer bestimmten Zeit gelöscht wird. Sie wird jedoch nicht gelöscht, wenn der Indikator läuft.

Meine Meinung: Die Lösung für dieses Problem ist ServiceDec.

Danke, ich werde den Indikator zuerst löschen, bevor ich die TF umstelle. Außerdem habe ich die maximalen Balken im Fenster von 2000000 auf 1000000 reduziert, was mir MetaDriver offenbar mitteilen will.

Bis jetzt scheint es zu funktionieren.

 
pusheax:

Danke, ich werde den Indikator zuerst löschen, bevor ich die TF umstelle. Außerdem habe ich die maximale Anzahl der Takte im Fenster von 2000000 auf 1000000 reduziert, offenbar will mir MetaDriver das sagen.

Bis jetzt scheint es zu funktionieren.

Warum brauchen Sie 100.000? 100.000 reichen mir, das will ich Ihnen sagen.

Sie schränkt die Prüfung in keiner Weise auf eine bestimmte Tiefe ein.

Sie begrenzt nur (1) die Anzeige in Fenstern (2) die Größe der Anzeigepuffer.

Ich habe die "sichtbare Geschichte" lange und absichtlich eingeschränkt. Das Ergebnis ist, dass ich keine Probleme mit dem Speicher habe.

 
MetaDriver:

Warum brauchen Sie eine Million? 100.000 reichen mir, und das ist genau das, was ich andeuten wollte.

Die Prüfung wird in keiner Weise auf eine bestimmte Tiefe beschränkt.

Sie begrenzt nur (1) die Anzeige in den Fenstern und (2) die Größe der Anzeigepuffer.

Ich habe die "sichtbare Geschichte" lange und bewusst eingeschränkt. Das Ergebnis ist, dass ich keine Probleme mit dem Speicher habe.

Ja, danke, ich werde es noch mehr einschränken, um Speicherprobleme zu vermeiden, weil ich 108 Paare bei InstaForex im Allgemeinen benutzen werde.
 
pusheax:
Ja, danke, ich werde 108 Paare bei InstaForex noch mehr benutzen, damit ich keine Speicherprobleme habe.

Das ist ein sehr interessantes Thema. In den frühen Tagen von MT5 habe ich geschrien, dass alle Indikatoren einen neuen Standardparameter haben sollten - die Anzahl der zu berechnenden Balken.

Andernfalls erhalten wir den einzigen Begrenzer - TERMINAL_MAXBARS. Dies ist für Expert Advisors, die viele Symbole in Echtzeit mit Hilfe von Indikatoren analysieren, nicht akzeptabel. In den meisten Fällen (99%) benötige ich in Expert Advisors eine genau festgelegte Anzahl der letzten Balken UND ALLE. Alles andere ist zu viel für mich. Natürlich nicht nur für mich...

Sie wurde ignoriert. Daraufhin habe ich solche Berechnungen in den Code meines Expert Advisors übertragen.

Ach ja, und das Erscheinen vieler selbst geschriebener Patches. Es wurden sogar einige kluge Artikel geschrieben und veröffentlicht, wie der folgende:

Verringerung des Speicherbedarfs für Hilfsanzeigen

Implementierung von Indikatoren als Klassen am Beispiel von Zigzag und ATR

...

 
Indikatoren für den kurzen Verlauf können nicht berechnet werden, da sie eine gemeinsame Ressource für alle Prozesse (Terminal, Fenster, Experten) sind. Außerdem gibt es zahlreiche Regeln für die Aktualisierung, Synchronisierung und Neuberechnung des Marktumfelds der Indikatoren.

Wenn Sie die regulär angezeigten Indikatoren und die kurzen berechneten Indikatoren trennen, ist es einfach, Divergenzen bei den langen kumulativen Indikatoren zu erhalten.

Auch dies wird zu gefährlichen Krücken auf unserer Seite führen.

Eine gute Möglichkeit ist, 100000 Balken pro Diagramm einzustellen oder zu x64 zu wechseln.
 

Renat:
Индикаторы на короткой истории нельзя рассчитывать, так как они являются общим разделяющимся между всеми процессами (терминал, окна, эксперты) ресурсом. Причем на индикаторах действуют множество правил обновления, синхронизации и пересчета рыночного окружения.

Если разделить штатные отображаемые индикаторы и короткие расчетные, то легко будет получить расхождение на длинных кумулятивных индикаторах.

Так же это приведет к опасным костылям на нашей стороне.

Хороший способ - устанавливать 100000 баров на чарт или переходить на х64.

Im Allgemeinen ändert sich nichts. Die Anfragen nach der Möglichkeit, die Größe der Indikatorpuffer in MQL5 zu begrenzen, werden abgelehnt, und wenn Ihr Programm beginnt, wegen der vielen verwendeten Indikatorpuffer eine riesige Menge an Speicher zu verbrauchen - dann wird dies als "Programmierfehler" bezeichnet.

"Bei Expert Advisors benötige ich meistens (99%) eine ganz bestimmte Anzahl von letzten Balken UND ALLE. Alle unnötigen Dinge sind mir zu viel. Natürlich nicht nur ich..." (с)

 
Renat:
2) Indikatoren können nicht in einer kurzen Historie gezählt werden, da sie eine gemeinsame Ressource sind, die von allen Prozessen (Terminal, Fenster, Experten) genutzt wird. Und es gibt viele Regeln für die Aktualisierung, Synchronisierung und Neuberechnung des Marktumfelds von Indikatoren.

3. Wenn Sie die regulär angezeigten Indikatoren von den kurzen berechneten Indikatoren trennen, wird es einfach sein, Divergenzen bei den langen kumulativen Indikatoren zu erhalten.

Auch dies wird zu gefährlichen Krücken auf unserer Seite führen.

1. eine gute Möglichkeit ist, 100000 Balken pro Chart einzustellen oder auf x64 zu wechseln.

1. Genau das habe ich getan. Dennoch ist es ein unbequemer Kompromiss. Wenn ich von den Entwicklungsproblemen einmal ganz absehe (als reiner Benutzer), würde ich gerne eine Wahlmöglichkeit haben, um die Länge der Berechnung festzulegen. Für Diagramme - die volle Länge (allerdings nicht immer, es gibt ernsthafte und große Ausnahmen), für Experten - genau so lang wie nötig. 3.

2. Als Entwickler verstehe ich die Schwierigkeiten und gleichzeitigen Beschränkungen dieses Ansatzes ( ), und dennoch ist der Speicherverbrauch auch mein Problem, das sich nicht in den Hintergrund drängen lassen will. Ich habe einen konkreten Lösungsvorschlag - den Berechnungszeitraum (nennen wir ihn so) als einen gleichwertigen Parameter zu betrachten - nicht schlechter als andere. Dann sind zwei Indikatoren mit ähnlichen Parametern, aber mit unterschiedlichem Berechnungszeitraum, einfach zwei verschiedene Indikatoren. Ja, theoretisch gibt es dumme Anwendungsfälle, die zu zusätzlichen Kosten führen können (wenn der Benutzer die Berechnungszeiträume vervielfacht), aber in der Praxis ist das unwahrscheinlich. Wenn jemand das mitmachen will, ist er/sie schuldig. Genauso wie jetzt ALLE Benutzer schuldig sind, weil sie "zu viele Indikatoren geöffnet haben und sich nicht darum gekümmert haben, TERMINAL_MAXBARS zu reduzieren".


Ich weiß, dass bei der EMA-Berechnung alle Balken vom Beginn der Zeit an verwendet werden, aber ich weiß auch, dass bei Stochastik, RSI und bei einer großen(überwiegenden) Anzahl anderer Indikatoren die Berechnung auf einer organischen Länge erfolgt. Und dieses Wissen gibt mir die Flexibilität, den Berechnungszeitraum (MaxBar) zu wählen. Geben Sie mir einfach eine Auswahl.

 
MetaDriver:

Ungefähr so viel, wie es jetzt die Schuld ALLER Benutzer ist, die "zu viele Indikatoren öffnen und nicht darauf achten, TERMINAL_MAXBARS zu reduzieren".

Ja, besonders unter Meisterschaftsbedingungen, wenn man die Größe von TERMINAL_MAXBARS überhaupt nicht beeinflussen kann.

 
MetaDriver:

1. Ich habe dies getan. Dennoch ist es ein unbequemer Kompromiss. Im Idealfall, wenn wir uns von den Entwicklungsproblemen lösen, würde ich gerne eine Wahlmöglichkeit haben, um die Länge der Berechnung festzulegen (als reiner Benutzer). Für Diagramme - die volle Länge (allerdings nicht immer, es gibt ernsthafte und große Ausnahmen), für Experten - genau so lang wie nötig. 3.

2. Als Entwickler verstehe ich die Schwierigkeiten und gleichzeitigen Beschränkungen dieses Ansatzes, und doch ist der Speicherverbrauch auch mein Problem, und er will nicht in den Hintergrund treten. Ich habe einen konkreten Lösungsvorschlag - den Berechnungszeitraum (nennen wir ihn so) als einen gleichwertigen Parameter zu betrachten - nicht schlechter als andere. Dann sind zwei Indikatoren mit ähnlichen Parametern, aber mit unterschiedlichem Berechnungszeitraum, einfach zwei verschiedene Indikatoren. Ja, theoretisch gibt es dumme Varianten, die zu Mehraufwand führen können (wenn der Benutzer die Berechnungszeiträume vervielfacht), aber in der Praxis ist das unwahrscheinlich. Wenn jemand diese Grenze überschreiten will, ist das seine eigene Schuld. Genauso wie jetzt ALLE Benutzer schuldig sind, "zu viele Indikatoren geöffnet zu haben und sich nicht um die Verringerung von TERMINAL_MAXBARS gekümmert zu haben".


Ich weiß, dass bei der EMA-Berechnung alle Balken vom Beginn der Zeit an verwendet werden, aber ich weiß auch, dass bei Stochastik, RSI und einer großen(überwiegenden) Anzahl anderer Indikatoren eine organische Länge berechnet wird. Und dieses Wissen gibt mir die Flexibilität, den Berechnungszeitraum (MaxBar) zu wählen. Geben Sie mir einfach eine Auswahl.

Die Botschaft ist klar.

Wir selbst wollen den Verbrauch von Ressourcen reduzieren. Vielleicht kann die Lösung eine Funktion IndicatorMaxDepth(uint len) sein, die nur auf in diesem EA erstellte Indikatoren wirkt.

Das Problem ist jedoch, dass während der Prüfung die Puffer der Indikatoren im Akkumulationsmodus zusammen mit der Historie wachsen und keine Speicherung erfolgt. Die Historie des Indikators in Echtzeit zu trimmen und dabei die angegebene Tiefe beizubehalten, ist mit schönen Pannen behaftet und lässt die Programmierer, die sich an die Synchronität der Balken des Diagramms und des Indikatorpuffers gewöhnt haben, aufhorchen.

Eine bessere Option ist der Wechsel zu x64.


Wir werden den Cache der Indikatoren überarbeiten, der nun nach dem Prinzip der maximalen Effizienz und nicht mehr nach dem Prinzip der Speichereinsparung arbeitet. Wir werden versuchen, Indikatoren, die abgelehnt wurden, sofort zu entladen, anstatt sie wie bisher für einige Zeit im Speicher zu halten. Dadurch wird es möglich, Hunderte von Indikatoren hintereinander mit einer direkten Entladung durch IndicatorRelease aufzurufen.

Natürlich, wenn jemand Hunderte von Indikatoren in den Modus der Markt-Scanning, ohne sie zu entladen, dann müssen sie direkt auf die 64-Bit-Version gehen + Installation von zusätzlichen Speicher.

Jetzt ist es seltsam, umfangreiche Tests auf x32 zu machen. Jeder anständige x64-Computer mit 16 GB Arbeitsspeicher (ohne fanatische Grafikkarten und Monitore) kann für 15.000 Rubel gekauft werden.

Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров
  • www.mql5.com
Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров - Документация по MQL5