MT4 iMAOnArray und iBandsOnArray Auswirkungen der Anzahl der Elemente auf die Berechnungen - Seite 7

 
Alexey Viktorov:

Heißt das, dass die Funktion iMAOnArray() nach if(rates_total-i >= rates_total-100);, wenn nur noch 100 Balken zu berechnen sind, zunächst das ALL-Array neu berechnet?

Nein, nur die Hälfte.
 
Alexey Viktorov:

Heißt das, dass die Funktion iMAOnArray() nach if(rates_total-i >= rates_total-100);, wenn nur noch 100 Balken zu berechnen sind, zunächst das GANZE Array neu berechnet?

iMAOnArray

Gibtden Wertdestechnischen Indikators Gleitender Durchschnittzurück, der anhand der im Array gespeicherten Daten berechnet wurde.

doubleiMAOnArray(
doublearray[],// array
inttotal,// Anzahl der Elemente
intma_period,//Zeitraum
intma_shift,// Verschiebung des Durchschnitts
intma_method,// Mittelungsmethode
int shift//shift
);

Parameter

array[]

[in] Array mit Daten.

insgesamt

[in]Anzahl der zu berechnenden Elemente. 0 bedeutet alle Elemente des Arrays.

Das ist richtig, der erste Aufruf von iMAOnArray mit 0 in der Größe Wert bedingungslos berechnet das gesamte Array, und dann scheint es, dass nur die letzten oder höchstens die letzten 2 Werte berechnet werden, obwohl wer weiß, kann es alles neu berechnen... Deshalb verlangsamt sich die Entwicklung. Deshalb spielt es keine Rolle, wie viele Balken Sie durch Offset erhalten wollen, es wird sowieso das gesamte Feld gezählt.

 
Sergey Efimenko:

iMAOnArray

Gibtden Wertdestechnischen Indikators Gleitender Durchschnittzurück, der anhand der im Array gespeicherten Daten berechnet wurde.

doubleiMAOnArray(
doublearray[],// array
inttotal,// Anzahl der Elemente
intma_period,//Zeitraum
intma_shift,// Verschiebung des Durchschnitts
intma_method,// Mittelungsmethode
int shift//shift
);

Parameter

array[]

[in] Array mit Daten.

insgesamt

[in]Anzahl der zu berechnenden Elemente. 0 bedeutet alle Elemente des Arrays.

Das ist richtig, der erste Aufruf von iMAOnArray mit 0 in der Größe Wert wird sicherlich das gesamte Array zu berechnen, und dann scheint es, dass nur die letzten oder höchstens die letzten 2 Werte berechnet werden, obwohl wer weiß, kann es alles neu berechnen... Deshalb verlangsamt sich die Entwicklung. Deshalb spielt es keine Rolle, wie viele Balken Sie durch Offset erhalten wollen, es wird sowieso das gesamte Feld gezählt.

Ich habe mich also geirrt. Und warum gibt es ohne Ihre komplexen Berechnungen keine Bremsen?
 
Alexey Viktorov:
Dann habe ich mich geirrt. Warum gibt es dann keine Verzögerung ohne Ihre komplizierten Berechnungen?
Das ist die Frage: Warum wird es langsamer, wenn man es aus dem Code heraus aufruft, aber nicht, wenn man es einfach über das Diagramm legt? Nun, nur die Entwickler werden wissen, wo die Antwort zu finden ist. Ich habe eine Menge komplizierter Indikatoren in meinen Charts und einige von ihnen verwenden sogar rekursive Schleifen und sollen "lange denken", während dies eine einfache Aufgabe ist, die so viel Zeit zur Berechnung benötigt.
 
Sergey Efimenko:
Das ist die Frage, warum es sich verzögert, wenn man es vom Code aus aufruft, aber nicht, wenn man es einfach über das Diagramm legt. Nun, nur die Entwickler wissen, wo sie die Antwort suchen müssen. Ich habe eine Menge komplizierter Indikatoren in meinen Charts, und einige von ihnen verwenden sogar rekursive Schleifen, und sie sollen "lange denken", aber dies ist eine einfache Aufgabe, die so lange dauert, um berechnet zu werden.

Ich spreche hier nicht von einem einfachen Diagramm-Overlay. Ich spreche von diesem Testcode. Es wird dort genannt, nicht eingeblendet.

Trotzdem glaube ich, dass ich mich durch das Kopieren eines Teils des Arrays durchgekämpft habe. Und auch MODE_LWMA berechnet auf die gleiche Weise neu, als würde man das gesamte Feld zählen.


Rot wird für die gesamte Historie berechnet. Grün sind die letzten 50 Takte.

 
Alexey Viktorov:

...

Trotzdem glaube ich, dass ich mich durch das Kopieren eines Teils des Arrays durchgekämpft habe. Und auch MODE_LWMA berechnet auf die gleiche Weise neu, als würde man das gesamte Feld zählen.

...

Er hat sie auch besiegt.

 
Alexey Viktorov:

Ich spreche hier nicht von einem einfachen Diagramm-Overlay. Ich spreche von diesem Testcode. Es wird dort genannt, nicht überlagert.

Trotzdem glaube ich, dass ich mich durch das Kopieren eines Teils des Arrays durchgekämpft habe. Und auch MODE_LWMA berechnet auf die gleiche Weise neu, als würde man das gesamte Feld zählen.


Rot zählt die gesamte Geschichte. Grün sind die letzten 50 Takte.

Ich habe den Eindruck, dass Sie meine Beiträge Wort für Wort, wenn nicht sogar Satz für Satz lesen. Was zu gewinnen? Ich schrieb, dass ich eine solche Idee (ähnlicher Code mit Einschränkung der Balkenberechnung) sofort hatte, und ich habe es ausprobiert und keine Leistungssteigerung erhalten, weil das Array ist immer noch vollständig berechnet (total=0), die Tatsache, dass Sie kopieren (füllen Sie den Puffer) nur die letzten 100 Elemente, ändert sich nicht die Verlangsamung Berechnungen, es Bremsen nicht immer Elemente in den Puffer, und die Berechnung des Arrays Durchschnitt, der entweder vollständig berechnet wird (total=0) oder gibt Ergebnisse nur die ersten N Elemente (total=N), und das brauchen die letzten, während die Änderung der Richtung Indizierung nicht den gewünschten Effekt.
 
Sergey Efimenko:
Ich habe den Eindruck, dass Sie meine Beiträge Wort für Wort oder sogar Satz für Satz lesen. Was zu gewinnen? Ich schrieb, dass ich eine solche Idee (ähnlicher Code mit Einschränkung der Balkenberechnung) sofort hatte, und ich habe es sofort ausprobiert und keine Leistungssteigerung erhalten, weil Das Array wird immer noch vollständig berechnet (total=0), die Tatsache, dass man nur die letzten 100 Elemente kopiert (in den Puffer füllt), macht die Berechnungen nicht langsamer, es geht nicht darum, Elemente in den Puffer zu bekommen, es geht um die Berechnung eines durchschnittlichen Arrays, das entweder vollständig berechnet wird (total=0) oder nur Ergebnisse für die ersten N Elemente liefert (total=N), und die letzten werden benötigt, eine Änderung der Richtung der Indizierung bringt nicht den gewünschten Effekt.

Offenbar werden meine Nachrichten auch gelesen... Der vorherige Code passt nicht, ich habe herausgefunden, wo der Fehler gemacht wurde. Der letzte Screenshot zeigt einen anderen Ansatz, obwohl nur die letzten 50 Balken gezählt werden.

Ich habe den Code nicht sofort gepostet, weil ich Reaktionen wie "das funktioniert sowieso nicht" erwartet habe, denn... Der Code ist nicht geheim, wenn Sie prüfen wollen, wie er mit Ihrem Indikator funktioniert, lassen Sie es mich wissen.

Dmitry Fedoseev:

Er hat auch gewonnen.

Und Sie können nur Aufsehen erregen. Zählen Sie mit, mit wie vielen Forumsmitgliedern Sie in diesem Tonfall kommunizieren, wie jetzt mit mir. Geh weg, Satan.
 
Alexey Viktorov:

...

Alles, was Sie tun können, ist, einen Aufstand zu machen. Zählen Sie mal, mit wie vielen Forumsteilnehmern Sie in diesem Tonfall reden, so wie Sie jetzt mit mir reden. Verschwinde, Satan.

So habe ich mit Leuten wie Ihnen gesprochen. Ich weiß, dass es hier eine Koalition von Ihnen gibt.

Bereits gestern haben Sie hier über das Scheitern des Array-Kopieransatzes geschrieben. Sie war auf die LWMA gerichtet - es hat funktioniert. Sie sind nicht faul genug, um es mit der EMA und der Heerschar der heiligen Macht zu überprüfen? Hast du eine Kerze in der Kirche aufgestellt?

Du jammerst und jammerst, und jedes Mal sagst du: "Oh, ich verstehe, ich habe einen Fehler gemacht.

Ein Kampf. Wenn Sie ein wenig Verstand hätten, hätten Sie längst gesehen, dass das Problem dieses Themas gelöst ist.

Du wolltest wieder einmal angeben, aber man hat dir die Hörner abgeschossen und du hast dich sofort bei Satan beklagt. Mann!

 
Alexey Viktorov:

Offenbar werden meine Nachrichten auch gelesen... Der vorherige Code passt nicht, ich habe herausgefunden, wo der Fehler gemacht wurde. Der letzte Screenshot zeigt einen anderen Ansatz, obwohl nur die letzten 50 Balken gezählt werden.

Ich habe den Code nicht sofort gepostet, weil ich Reaktionen wie "das funktioniert sowieso nicht" erwartet habe, denn... Der Code ist nicht geheim, wenn Sie prüfen wollen, wie er mit Ihrem Indikator funktioniert, sagen Sie es mir.

Hätte ich erraten sollen, dass es einen anderen Code gibt? Oben ist auch ein Screenshot zu sehen, auf dem die letzten 100 Balken gezählt werden, aber tatsächlich werden alle Balken gezählt, aber nur 100 in den Puffer kopiert. Ja, und warum nicht gleich den Code veröffentlichen? Eine solche Antwort hätte es nicht gegeben. Ich hätte inhaltlich geantwortet, dass ich nicht verstehe, worum es geht. Aus dem Code können Sie sofort ersehen, was vor sich geht, was zählt und ob es die oben genannten Fehler gibt. Und was zeigt Ihnen der Bildschirm? Nichts anderes als das Ergebnis, und über das Ergebnis wurde bereits gesagt, dass es auf verschiedene Arten erreicht werden kann, aber nicht alle davon sind für die vorliegende Aufgabe akzeptabel - um die Rechenzeit zu reduzieren.