Theorie der EA-Beschleunigung bei Verwendung eines benutzerdefinierten Indikators (Funktion - iCustom) - Seite 5

 
Alexander Laur:
Können Sie die Aufgabe beschreiben? Was soll das Skript mit all den Balken machen? Ich denke, Sie versuchen, das Problem direkt zu lösen. Es ist schwierig, Ratschläge zu erteilen, ohne das zu lösende Problem zu sehen.

Ich habe das Skript, hier ist die ToRhttps://www.mql5.com/p/21/234411 , aber es gibt Schwierigkeiten bei der Bedienung wegen des Mangels an Speicher.... oder besser gesagt, sie läuft nach einem kurzen Durchlauf des Skripts ab.

 
Alexander Laur:
Die Seite ist gesperrt. Dass Sie ein Skript haben, ist gut, aber es löst das Problem nicht. Was macht das Skript?
Das Skript analysiert die Position des Indikators im Verhältnis zum Preis. Es gibt viele Kriterien - das Ziel ist es, die optimalen Einstellungen für den Indikator zu finden, in denen der Indikator eine Unterstützungs- oder Widerstandszone darstellt. Das Skript erlaubt es, beliebige Indikatoren, die dem gleitenden Durchschnitt ähnlich sind, zu verbinden und die Aufzählung der Parameter durchzuführen.
 
Alexander Laur:

Renat antwortete, dass es nur einen Weg gibt - einen Teil der Indikatorberechnung in ein Skript zu übertragen.

Das verstehe ich, aber es macht die Arbeit komplizierter und erhöht meine Kosten erheblich. Das macht das Werkzeug (Skript) nicht vielseitig.

Alexander Laur:

Sie können auch Masochismus betreiben und den berechneten Parameterbereich in Teilbereiche aufteilen. Führen Sie das Skript aus und ändern Sie die Parameter in jedem Teilbereich. Ich weiß, es ist zeitaufwendig, aber was können wir tun?

Jetzt denke ich, dass die Lösung darin bestehen könnte, den Prozess des Öffnens eines Diagramms durch das Skript zu automatisieren, einige Indikatoren darauf zu berechnen, das Diagramm durch das Skript zu schließen und ein neues zu öffnen - dies wird es ermöglichen, den Speicher zu löschen?

Alexander Laur:

Die zweite Möglichkeit ist der Wechsel zu 5. D.h. wir sollten nach den optimalen Parametern für den 5. Indikator suchen und dann die optimalen Parameter im 4. In der 5 ist es möglich, das Be- und Entladen von Indikatoren zu verwalten. Die Lade-/Entladevorgänge sind jedoch recht ressourcenintensiv.

Ich denke, es ist besser, kostspielige Operationen zu haben als keine, und ich verstehe, dass in 5 mehr Speicher verwendet werden kann, aber ich brauche Indikatoren, die für 4 geschrieben wurden, weil ich mit 4 handle...

Meine Berechnungen basieren auf der ersten und ich weiß nicht, wie man den Indikator in 5 umwandelt, aber es ist möglich, die Indikatoren miteinander kompatibel zu machen, zumindest nach dem Kompilieren ...

 
Alexander Laur:

Der Befehl zum Hinzufügen eines Indikators zum Diagramm wurde nicht gefunden. Durch das Löschen des Diagramms geben Sie natürlich Speicherplatz frei. Aber wenn Sie das Diagramm schließen, werden alle Indikatoren im Diagramm geschlossen.

Es gibt einen Befehl zum Öffnen neuer Diagramme, aber es gibt keinen Befehl, um den Indikator an das neu geöffnete Diagramm anzuhängen. Aus diesem Grund wird die echte Automatisierung auch in diesem Fall nicht funktionieren.

Was ist mit iCustom, wir verwenden es, um den Indikator aufrufen - es ist gleichbedeutend mit dem Hinzufügen eines Diagramms - in der Tat, ich nicht das Diagramm auf dem Diagramm setzen.
 
Alexander Laur:

DerAufruf eines Indikators über iCustom() fügt dem Diagramm kein Diagramm hinzu.

Wenn Sie das Diagramm nicht auf das Diagramm legen, welches Diagramm werden Sie dann löschen, um Speicherplatz freizugeben?

Verschwenden Sie nicht Ihre Zeit, vertrauen Sie Renate.

Vielleicht habe ich mich geirrt. Gehen wir es noch einmal durch:

1. Es gibt ein Skript, das die iCustom-Indikatorfunktion aufruft und die Chartpuffer im Speicher speichert.

2. Der iCustom-Funktionsaufruf ist mehrfach - dadurch wird der Arbeitsspeicher gefüllt und der Indikator gibt Nullen zurück.

Das Terminal muss doch mit Speicher arbeiten können, oder? Das Löschen des Caches ist meines Erachtens möglich, wenn die Daten nicht erforderlich sind, und sie sind nicht erforderlich, wenn das Diagramm mit den Daten entfernt wird.

4. Löschen Sie die Tabelle und geben Sie den Arbeitsspeicher für weitere Berechnungen unter Punkt 1 frei.

Wo liege ich falsch?


P.S. So wie ich es verstehe, sind die Daten an das Diagramm gebunden, auf dem die Berechnung durchgeführt wird - unabhängig davon, welche Anführungszeichen dafür verwendet werden.

 
-Aleks-:

Vielleicht habe ich mich geirrt. Gehen wir es noch einmal durch:

1. Es gibt ein Skript, das die Funktion iCustom indicator aufruft und die Grafikpuffer im Speicher ablegt.

2. Der iCustom-Funktionsaufruf ist mehrfach - dadurch wird der Arbeitsspeicher gefüllt und der Indikator gibt Nullen zurück.

Das Terminal muss doch mit Speicher arbeiten können, oder? Das Löschen des Caches ist meines Erachtens möglich, wenn die Daten nicht erforderlich sind, und sie sind nicht erforderlich, wenn das Diagramm mit den Daten entfernt wird.

4. Löschen Sie die Tabelle und geben Sie den Arbeitsspeicher für weitere Berechnungen unter Punkt 1 frei.

Wo liege ich falsch?


P.S. So wie ich es verstehe, sind die Daten an das Diagramm gebunden, auf dem die Berechnung durchgeführt wird - es spielt keine Rolle, welche Notierungen dafür verwendet werden.

Unter Punkt 3.

Das Terminal speichert den Zwischenspeicher der Zeitreihen und der darauf basierenden Indikatoren für einige Zeit nach dem Schließen, damit beim nächsten Aufruf nicht alles auf einmal neu berechnet werden muss.

 
Andrey Khatimlianskii:

Unter Punkt 3.

Das Terminal speichert den Zwischenspeicher der Zeitreihen und der darauf basierenden Indikatoren nach dem Schließen für einige Zeit, so dass bei einem erneuten Zugriff nicht alles auf einmal neu berechnet werden muss.

Aber was ist "einige" Zeit? Gibt es vielleicht andere Kriterien/Methoden für die Freigabe von Ressourcen (Löschen des Cache aus dem Speicher)?
 
-Aleks-:
Aber was ist "einige" Zeit? Gibt es vielleicht andere Kriterien/Methoden für die Freigabe von Ressourcen (Entfernen des Cache aus dem Speicher)?

Nein, Renat hat bereits geantwortet.

In MT5 wird der Cache geleert, wenn der Expert Advisor, der Indikatoren als Ressourcen verwendet, entladen wird. D.h. Sie können einen Chart mit einem Expert Advisor laden, einen Teil davon lesen und den Chart schließen. Aber es ist ohnehin nicht sehr schnell.

Ich weiß nicht, wie es im MT4 aussieht.

 
Andrey Khatimlianskii:

Nein, Renat hat bereits geantwortet.

In MT5 wird der Cache geleert, wenn der Expert Advisor, der Indikatoren als Ressourcen verwendet, entladen wird. D.h. Sie können einen Chart mit einem Expert Advisor laden, einen Teil davon lesen und den Chart schließen. Aber es ist ohnehin nicht sehr schnell.

Ich weiß nicht, wie es im MT4 aussieht.

Der Speicher wird nach der Ausführung des Skripts wieder freigegeben. Der Speicher für die Berechnung der aus dem Indikator gewonnenen Daten wird also freigegeben, aber er betrifft nicht die Puffer des Diagramms, richtig?

Und wenn wir Daten nicht durch einen grafischen Puffer, sondern auf andere Weise übersetzen - zum Beispiel durch globale Variablen (ich weiß nicht, ob dort ein Puffer erstellt werden kann), dann kann der Effekt der Speicherknappheit überwunden werden?

 
Hier ist ein Experiment.
1. öffnen Sie das Diagramm und den "Task-Manager" - belegter Speicher 215692 kb
2. I Indikator anwenden - belegter Speicher 219612 kb (Zunahme 3920 kb)
3. Entfernen des Indikators - belegter Speicher 217984 kb (freigegeben 1628 kb)
Und die verbleibenden 2292kb des nicht freigegebenen Speichers gingen, wie ich verstanden habe, in den Cache?
Nimmt der Puffer nicht zu viele Daten auf - Verlauf vom Februar 2013 auf der Sentry.
Grund der Beschwerde: