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

 
-Aleks-:
Das Sammelsurium der notwendigen Indikatoren wird also schneller funktionieren als die Verwendung der einzelnen Indikatoren - die Informationen über die Kurse werden weniger häufig abgefragt?

Nicht unbedingt erforderlich. Achten Sie darauf, dass die Berechnungen nicht doppelt ausgeführt werden. Wenn die vorläufigen Berechnungen von zwei Indikatoren gleich sind, sollten sie zu einem einzigen zusammengefasst werden. Sie sollten nicht einfach alle Indikatoren in einen einzigen einfügen.

Es gibt keine Probleme bei der Einholung der Angebote. Sie müssen nicht angefordert werden, sie kommen von selbst.

 

Ich habe versucht, eine Zeitverzögerung für die Neuberechnung des Indikators zu verwenden:

int OnCalculate(const int rates_total,
                const int prev_calculated,
                const int begin,
                const double &price[])
  {
 static datetime   prevtime;
  datetime per=15; //задержка секунд
   
   if((TimeCurrent()-prevtime)<per) 
   {
   return(rates_total); //прошло мало секунд - поэтому выходим
   }
 
//--- main cycle  
....................

prevtime=TimeCurrent();
return(rates_total);
 }

Bei der Prüfung auf "OHLSnaM1" gibt es fast keinen Unterschied, vielleicht ist die Prüfung auf "alle Zecken" schneller.

 

mein Eindruck von der Funktionsweise von iCustom (wenn sich in den letzten 2 Monaten nichts geändert hat)
wenn Sie den Indikator aus iCustom aufrufen
alle Puffer für einen möglichen Verlauf und die im Cache gespeicherten Ergebnisse werden berechnet, und der Cache wird an die Parameter und den Indikatornamen gebunden

Wenn Sie beim nächsten Mal denselben Indikator und dieselben Parameter für das zweite Index-Array aufrufen, wird das Ergebnis aus dem Cache zurückgegeben (+ Korrektur für neue Verlaufsdaten)
wenn Sie denselben Indikator aufrufen, aber nur einen Parameter ändern - wird die vollständige Berechnung aller Puffer für die mögliche Historie und das Speichern eines anderen Caches, aber mit einer Bindung an die neuen Parameter, durchgeführt.


Sie können angeben, wie viel Historie vom Expert Advisor heruntergeladen werden soll, wenn Sie einen solchen Parameter im Indikator festlegen, aber bei diesem Aufruf sollten Sie immer die gleiche Zahl übergeben - die Größe der Historie.
(dies wird die Geschwindigkeit des ersten Aufrufs von iCustom beeinflussen).

Sie können versuchen, die Berechnung unnötiger Puffer, wenn möglich, sowohl im Indikator als auch über Indikatorparameter zu entfernen, wie im Beispiel mit der Historiengröße
(Verringerung der Cache-Größe - Erhöhung der Rechengeschwindigkeit)

 

Ich danke Ihnen allen für die Informationen.

Ich möchte klären, wenn in einem Indikator mit 5 Grafikpuffer zu verwenden, nicht eine grafische Puffer, sondern ein gewöhnliches Array - zur Ausgabe von Daten durch eine grafische Puffer, wie ich vorgeschlagen, die Geschwindigkeit des Indikators während der Optimierung wird schneller, weil weniger Speicher für den Indikator zugeordnet werden, und daher weniger Zeit damit verbringen, mit ihm zu arbeiten?

Wenn die Optimierung durchgeführt wird und die Indikatoreinstellungen nicht bei jedem Durchgang geändert werden, wird der Indikator dann neu berechnet?

 
-Aleks-:

Ich danke Ihnen allen für die Informationen.

Ich möchte klären, wenn in einem Indikator mit 5 Grafikpuffer zu verwenden, nicht eine grafische Puffer, sondern ein gewöhnliches Array - zur Ausgabe von Daten durch eine grafische Puffer, wie ich vorgeschlagen, die Geschwindigkeit des Indikators während der Optimierung wird schneller, weil weniger Speicher für den Indikator zugeordnet werden, und daher weniger Zeit damit verbringen, mit ihm zu arbeiten?

Wenn die Optimierung durchgeführt wird und die Indikatoreinstellungen nicht bei jedem Durchgang geändert werden, wird der Indikator dann neu berechnet?

Der Puffer ist ein Array, das nur für die Anzeige von Daten geeignet ist.

Während der Optimierung wird der Indikator jedes Mal neu berechnet.

 
komposter:

Ein Puffer ist ein Array, das nur für die Anzeige von Daten geeignet ist.

Ich verstehe das Array, aber das Array zur Berechnung des Indikators kann viel kleiner sein - oft dynamisch.

Zum Beispiel in der Geschichte von 1000 Bars - der benutzerdefinierte Indikator zeichnet 3 SMAs - 5/8/10.

Im Standardfall haben wir einen Grafikpuffer für fast 3000-10-8-5

Und wenn wir meine Methode anwenden

zur Berechnung des SMA(5) benötigen wir ein Array der Größe (sorry für die Terminologie) von 4 Balken

zur Berechnung des SMA(8) benötige ich ein Array von (entschuldigen Sie die Terminologie) 7 Balken

für die Berechnung des SMA(10) benötigen wir ein Array von (Entschuldigung für die Terminologie) 9 Balken

und einem Diagramm-Array mit 1000 Balken benötigen Sie 1000+4+7+9, da die Arrays diese einfach überschreiben.

Wo liege ich falsch?

 
-Aleks-:

Ich danke Ihnen allen für die Informationen.

Ich möchte klären, wenn in einem Indikator mit 5 Grafikpuffer zu verwenden, nicht eine grafische Puffer, sondern ein gewöhnliches Array - zur Ausgabe von Daten durch eine grafische Puffer, wie ich vorgeschlagen, die Geschwindigkeit des Indikators während der Optimierung wird schneller, weil weniger Speicher für den Indikator zugeordnet werden, und daher weniger Zeit damit verbringen, mit ihm zu arbeiten?

Wenn die Optimierung durchgeführt wird und die Indikatoreinstellungen nicht bei jedem Durchgang geändert werden, wird der Indikator dann neu berechnet?

Es ist wichtiger zu verstehen, dass der Indikator bei einem erneuten Aufruf nicht erneut in das Speichersegment (Overlay) geladen wird. Alles andere ist nichts im Vergleich dazu.
 
-Aleks-:

Ich verstehe das Array, aber das Array zur Berechnung des Indikators kann viel kleiner sein - oft dynamisch.

Zum Beispiel in der Geschichte von 1000 Bars - der benutzerdefinierte Indikator zeichnet 3 SMAs - 5/8/10.

Im Standardfall haben wir einen Grafikpuffer für fast 3000-10-8-5

Und wenn wir meine Methode anwenden

zur Berechnung des SMA(5) benötigen wir ein Array der Größe (sorry für die Terminologie) von 4 Balken

zur Berechnung des SMA(8) benötige ich ein Array von (entschuldigen Sie die Terminologie) 7 Balken

für die Berechnung des SMA(10) benötigen wir ein Array von (Entschuldigung für die Terminologie) 9 Balken

und einem Diagramm-Array mit 1000 Balken benötigen Sie 1000+4+7+9, da die Arrays diese einfach überschreiben.

Wo liege ich falsch?

Wenn Sie einen Wert auf einem Balken benötigen, brauchen Sie wirklich keinen Puffer. Der Indikator ist es auch nicht ;)

Und wenn Sie für jeden Balken einen Indikatorwert benötigen, ist es oft wirtschaftlicher, alles zu berechnen und dann nur den neuen Balken schrittweise zu berechnen.
Und nicht alle Algorithmen sind so einfach wie SMA, sie können einfach nicht "für 5 Balken" berechnet werden. Werfen Sie zumindest einen Blick auf den Zick-Zack-Kurs.

Was mich am meisten verwirrt, ist, dass Sie nicht versuchen, die Antworten in der Praxis anzuwenden. Es scheint, als gäbe es keine praktische Aufgabe, sondern nur theoretische Tricks.
Dann verstehe ich nicht, warum ich mich daran beteilige.

 

Übrigens kommt MT4 sehr gut mit der Berechnung nur eines Teils der Historie zurecht und verbraucht nicht den Speicher für den gesamten Puffer, wenn die Schleife durch die letzten 1000 Balken geht (auch wenn 50000 Balken "im Fenster" sind).

Ich bin jedoch auf dieses Problem in MT5 gestoßen - es wird Speicher für alle 50000 Bars zugewiesen, auch wenn nur die letzten 100 gezählt werden.

 
komposter:

Wenn Sie einen Wert auf einem Balken benötigen, brauchen Sie wirklich keinen Puffer. Der Indikator auch nicht ;)

Warum eine Bar? Ich wollte damit nur sagen, dass man zur Berechnung des Wertes eines Indikators selten alle seine Indikatoren für den gesamten Zeitverlauf kennen muss. Deshalb habe ich geschrieben, dass die Puffer (Arrays) nur für die Berechnung verwendet werden, während das Ergebnis der Berechnung von 3 MAs in einem grafischenPuffer gespeichert wird.

Was den Zick-Zack-Kurs betrifft - das bereitet mir jetzt Kopfzerbrechen -, so sind mehrere Antworten erforderlich, aber ich werde einen separaten Thread eröffnen.

komposter:

Was mich am meisten verwirrt, ist, dass Sie nicht versuchen, die Antworten in der Praxis anzuwenden. Es scheint, als gäbe es keine praktische Aufgabe, sondern nur theoretische Spekulationen.

Dann verstehe ich nicht, warum ich mich daran beteilige.

Die Sache ist die, dass ich selbst kein Programmierer bin - meine Untersuchungen werden mir helfen, das Pflichtenheft zu erstellen. Jetzt entwickle ich einen Indikator, der eine Komponente der EA-Engine sein wird - er hat eine Menge Puffer, also denke ich darüber nach, wie ich den EA nicht durch die Integration des Indikators in den Code, sondern durch andere Methoden beschleunigen kann.

Und ich hatte auch gehofft, dass jemand daran interessiert wäre, einen solchen Algorithmus in der Praxis auszuprobieren - um die Arbeitsgeschwindigkeit zu vergleichen ...


komposter:

Übrigens ist MT4 durchaus in der Lage, nur einen Teil der Historie zu berechnen und verbraucht nicht den Speicher für den gesamten Puffer, wenn die Schleife durch die letzten 1000 Bars geht (auch wenn es 50000 im "Fenster" sind).

Ich bin jedoch auf dieses Problem in MT5 gestoßen - es wird Speicher für alle 50000 Bars zugewiesen, auch wenn ich nur die letzten 100 zähle.

Das ist eine traurige Tatsache für 5. Erklären die Entwickler nicht die heilige Bedeutung dieser Tatsache?