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

 

Alexander Laur, d.h. solange das Skript/der Berater läuft, ist der Speicher reserviert und kann nicht gelöscht werden - traurige Schlussfolgerung.
Ist es möglich, dass ein Skript ein anderes Skript ausführt und dann das laufende Skript schließt, um den Speicher zu leeren, oder würde dies als komplexe Verarbeitungsumgebung betrachtet werden?

 
-Aleks-:

Alexander Laur, d.h. solange das Skript/der Berater läuft, ist der Speicher reserviert und kann nicht bereinigt werden - traurige Schlussfolgerung.
Ist es möglich, ein anderes Skript auszuführen und dann das laufende Skript zu schließen, um den Speicher zu leeren, oder wird es als komplexe Datenverarbeitungsumgebung betrachtet?

Ich habe sofort vorgeschlagen,"öffnen Chart mit Expert Advisor läuft", kann es getan werden - ChartOpen + ChartApplyTemplate

Die einzige Frage ist, ob der Speicher beim Schließen (Löschen des Expert Advisors) wieder freigegeben wird.

Prüfen Sie es.

 
Andrey Khatimlianskii:

Ich habe sofort vorgeschlagen,"öffnen Chart mit Expert Advisor läuft", kann es getan werden - ChartOpen + ChartApplyTemplate

Die einzige Frage ist, ob der Speicher beim Schließen (Löschen des Expert Advisors) wieder freigegeben wird.

Prüfen.

Ich habe es manuell versucht, indem ich die Vorlage mit vielen Indikatoren auf fast leer geändert habe - der Effekt ist da (aber der Cache bleibt - ich denke, es ist nicht kritisch). Aber wie man das Öffnen und Schließen durch eine Vorlage Skript zu machen - ich weiß es nicht. Ich habe verstanden, dass der Zweifel darin besteht, dass der Speicher nicht gelöscht wird, solange das Skript läuft... Andrei, bitte hilf bei dem Experiment.
 

Zusätzliche Frage: Hat die Wahl des realen Puffertyps für die Berechnung innerhalb des Indikators Auswirkungen auf die Größe des grafischen Puffers?

Typ

Größe in Bytes

Minimaler positiver Wert

Maximaler Wert

Genauigkeit der Darstellung

Analog in C++

Schwimmer

4

1.175494351e-38

3.402823466e+38

7 signifikante Ziffern

Schwimmer

doppelt

8

2.2250738585072014e-308

1.7976931348623158e+308

15 signifikante Ziffern

doppelt


Und eine verrückte Idee, was wäre, wenn wir statt eines grafischen Puffers einen TextOut verwenden würden - ich weiß nur nicht, wie man Daten daraus liest...

 
-Aleks-:

Zusätzliche Frage: Hat die Auswahl des realen Puffertyps für die Berechnung innerhalb des Indikators Auswirkungen auf die Größe des grafischen Puffers?

Meinen Sie mit "grafischem Puffer" die grafische Darstellung eines normalen Indikators?
 
Dennis Kirichenko:
Meinen Sie mit dem Begriff "grafischer Puffer" die grafische Darstellung eines regulären Indikators?

Die Frage ist, ob es möglich ist, die Größe des dem Grafikpuffer zugewiesenen Speichers um einen Balken zu beeinflussen, wenn Sie im Indikatorcode für Berechnungen float statt double verwenden.

//---- buffers

double Vy[];
double bufDirSoft[];

extern int n=3;
extern int BarsN=100;
//----
int ExtCountedBars=0;

 
Wie kann man außerdem feststellen, ob der Speicher voll ist, gibt es irgendwelche Funktionen?
 
-Aleks-:

Die Frage ist, ob es möglich ist, die Größe des dem Grafikpuffer zugewiesenen Speichers um einen Balken zu beeinflussen, wenn Sie im Indikatorcode für Berechnungen float statt double verwenden...

Nein. Es gibt eine magische Funktion, die alle Versuche verdrängt:

bool  SetIndexBuffer(
   int                    index,         // индекс буфера
   double                 buffer[],      // массив
   ENUM_INDEXBUFFER_TYPE  data_type      // что будем хранить
   );

Dieser Mechanismus ist in die Terminal-Sprache selbst eingebaut. Aber es ist eine interessante Idee...

 
-Aleks-:
Wie kann man außerdem feststellen, ob der Speicher voll ist, gibt es irgendwelche Funktionen?

Was meinen Sie mit "kein Speicherplatz mehr"? :-)

Es gibt hier etwas:

https://www.mql5.com/ru/docs/constants/environment_state/terminalstatus#enum_terminal_info_integer

Meiner Meinung nach ist der effektivste Weg, den Speicher für die Indikatorressourcen zu verwalten, die Minimierung des Parameters "Max bars in history" (Einstellungen --> Charts). Soweit ich mich erinnere, beträgt das Minimum für den Parameter 5k.

Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Состояние клиентского терминала
Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Состояние клиентского терминала
  • www.mql5.com
Стандартные константы, перечисления и структуры / Состояние окружения / Состояние клиентского терминала - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
-Aleks-:
Wie kann ich außerdem feststellen, ob der Speicher voll ist, gibt es irgendwelche Funktionen?

Es ist möglich, Informationen über das Terminal abzurufen

TERMINAL_MEMORY_TOTAL

Speichergröße, die dem Terminalprozess (Agent) zur Verfügung steht, in MB

int

TERMINAL_MEMORY_AVAILABLE

Die Größe des verfügbaren Speichers des Terminalprozesses (Agent) in MB

int

TERMINAL_MEMORY_USED

Größe des vom Terminal (Agent) verwendeten Speichers in MB

int

Grund der Beschwerde: