MT4 iMAOnArray und iBandsOnArray Auswirkungen der Anzahl der Elemente auf die Berechnungen

 

Das ist die Frage. Wenn ich nicht das gesamte Array, sondern nur die letzten N Elemente berechnen muss.

Ich verstehe die Logik der Berechnung dieser Funktionen bei der Begrenzung nicht ganz. Ich habe eine Zeitreihe Array (einer der Indikatorpuffer), wenn ich die Anzahl der Elemente gleich 0, keine Fragen, alles wird gezählt und berechnet, aber wenn ich die Anzahl der Elemente in der Berechnung durch die gleichen Verschiebungen beteiligt verringern, bekomme ich nur die primären. Einfach gesagt gibt es ein Array 5000 Elemente (Balken auf dem Diagramm), um Zeit zu sparen, muss ich nur die letzten 300 berechnen, aber wenn ich den Wert 300 im zweiten Parameter angegeben habe, habe ich primär 5000-4700 Elemente, aber auf Offset 300-0, und weitere Werte bei einem Aufruf ändern sich nicht. Welchen Sinn hat die Verwendung dieses Parameters?

 
Sergey Efimenko:

Das ist die Frage. Wenn ich nicht das gesamte Array, sondern nur die letzten N Elemente berechnen muss.

Ich verstehe die Logik der Berechnung dieser Funktionen bei der Begrenzung nicht ganz. Ich habe eine Timeseries-Array (einer der Indikatorpuffer), wenn ich die Anzahl der Elemente gleich 0, keine Fragen, alles wird gezählt und berechnet, aber wenn ich die Anzahl der Elemente in der Berechnung durch die gleichen Offsets beteiligt verringern, bekomme ich nur die primären. Einfach gesagt gibt es ein Array 5000 Elemente (Balken auf dem Diagramm), um Zeit zu sparen, muss ich nur die letzten 300 berechnen, aber wenn ich den Wert 300 im zweiten Parameter angegeben habe, habe ich primär 5000-4700 Elemente, aber auf Offset 300-0, und weitere Werte bei einem Aufruf ändern sich nicht. Welchen Sinn hat die Verwendung dieses Parameters?

Geben Sie mir ein Codebeispiel, damit ich die Frage richtig verstehe.
 
Alexander Voronkov:
Geben Sie mir einen Beispielcode, damit ich die Frage richtig verstehe.

das funktioniert gut:

Buffer[i]=GetValue(i);
BufferMA=iMAOnArray(Buffer,0,PeriodMA,0,MethodMA,i);
BufferBMA[i]=iBandsOnArray(Buffer,0,PeriodBands,DevBands,0,MODE_MAIN,i)

das funktioniert nicht gut:

Buffer[i]=GetValue(i);
BufferMA=iMAOnArray(Buffer,300,PeriodMA,0,MethodMA,i);
BufferBMA[i]=iBandsOnArray(Buffer,300,PeriodBands,DevBands,0,MODE_MAIN,i);

 
Sergey Efimenko:

das funktioniert gut:

Puffer[i]=GetValue(i);
BufferMA=iMAOnArray(Buffer,0,PeriodMA,0,MethodMA,i);
BufferBMA[i]=iBandsOnArray(Buffer,0,PeriodBands,DevBands,0,MODE_MAIN,i);

Das funktioniert normalerweise nicht:

Puffer[i]=GetValue(i);
BufferMA=iMAOnArray(Buffer,300,PeriodMA,0,MethodMA,i);
BufferBMA[i]=iBandsOnArray(Buffer,300,PeriodBands,DevBands,0,MODE_MAIN,i);

UmZeitzu sparenund nur die letzten 300(Balken im Diagramm)zu zählen, verwenden Sie die Operatoren for() oder if().
 
Alexander Voronkov:
UmZeit zu sparenund nur die letzten 300(Balken im Diagramm) zuzählen, verwenden Sie die Werte der Operatoren for() oder if().

Wie soll ich es vorsichtig ausdrücken... Haben Sie eine Ahnung, wovon Sie sprechen? Haben Sie schon einmal die im Titel genannten Funktionen in Ihrem Code verwendet und versucht, einen Teil eines Arrays zu berechnen, anstatt das gesamte Array? Probieren Sie es aus, vielleicht verstehen Sie dann "visuell", wovon wir sprechen. Ihr Angebot ist relevant für die Berechnung von Balken oder andere Situationen, in denen Sie explizit angeben können, wie viel gezählt werden soll, aber nicht für ein Array mit diesen Funktionen. Der Teil des obigen Codes ist absolut identisch, der einzige Unterschied ist, dass ich im ersten Fall das gesamte Array zähle und im zweiten Fall nur 300 seiner Werte, aber die Werte werden am Ende des Arrays gezählt, während Verweise auf den Anfang verwendet werden. Vielleicht beschreibe ich die Situation nicht klar, aber der Code wird helfen, dies zu sehen, wenn Sie ihn mit einem Indikator verbinden und das Ergebnis vergleichen...

PS Über die "selbstgeschriebene" Version von alternativen Funktionsanaloga ist klar, aber ich möchte das gewünschte Ergebnis mit Hilfe einer Sprache erreichen.

 
Sergey Efimenko:

Wie soll ich es vorsichtig ausdrücken... Haben Sie eine Ahnung, wovon Sie sprechen? Haben Sie schon einmal die im Titel genannten Funktionen in Ihrem Code verwendet und versucht, einen Teil eines Arrays zu berechnen, anstatt das gesamte Array? Probieren Sie es aus, vielleicht verstehen Sie dann "visuell", wovon wir sprechen. Ihr Angebot ist relevant für die Berechnung von Balken oder andere Situationen, in denen Sie explizit angeben können, wie viel gezählt werden soll, aber nicht für ein Array mit diesen Funktionen. Der Teil des obigen Codes ist absolut identisch, der einzige Unterschied ist, dass ich im ersten Fall das gesamte Array zähle, während ich im zweiten Fall nur 300 seiner Werte zähle, aber die Werte werden am Ende des Arrays gezählt, während Referenzen zum Anfang verwendet werden. Vielleicht beschreibe ich die Situation nicht klar, aber der Code wird helfen, dies zu sehen, wenn Sie ihn mit einem Indikator verbinden und das Ergebnis vergleichen...

PS Das mit den "selbstgeschriebenen" alternativen Funktionsanalogien ist klar, aber ich möchte das gewünschte Ergebnis mittels einer Sprache erreichen.

Sagen Sie es einfach, wie es ist, es ist okay.

Ich habe Sie also missverstanden.

 
Nutzt denn niemand diese Funktionen und ist mit dieser Situation konfrontiert?
 
Sergey Efimenko:

das funktioniert gut:

Puffer[i]=GetValue(i);
BufferMA=iMAOnArray(Buffer,0,PeriodMA,0,MethodMA,i);
BufferBMA[i]=iBandsOnArray(Buffer,0,PeriodBands,DevBands,0,MODE_MAIN,i);

Das funktioniert normalerweise nicht:

Puffer[i]=GetValue(i);
BufferMA=iMAOnArray(Buffer,300,PeriodMA,0,MethodMA,i);
BufferBMA[i]=iBandsOnArray(Buffer,300,PeriodBands,DevBands,0,MODE_MAIN,i);

Was erwarten Sie als Ergebnis und wie sollte es normalerweise funktionieren?
 
Alexey Viktorov:
Was erwarten Sie als Ergebnis und wie sollte es normalerweise funktionieren?
Was meinen Sie, was ich erwarte? Ich habe oben geschrieben, dass ich die letzten (aktuellen) 300 aktuellen Werte benötige und nicht die 300 ersten (anfänglichen), außerdem greife ich auf ein Array am Offset 299-0 zu, aber ich erhalte Daten am Offset von "Ende des Arrays" bis "Ende des Arrays - 300" Werte (in meinem Fall von 4999 bis 4700), was bedeutet, dass am Offset 299 ein Wert ist, der am Offset 4999 sein sollte und ähnlich am Offset 0 ein Wert ist, der am Offset 4700 sein sollte. Bei der Verringerung der Anzahl der Array-Berechnungen ist es wichtig, aktuelle Daten anstelle der ursprünglichen historischen Daten zu erhalten. Es stellt sich die Frage, welchen Zweck die Berechnung der ältesten Werte hat, wenn die aktuellen Werte nicht berechnet werden.
 
Sergey Efimenko:
Was meinen Sie, was ich erwarte? Ich habe geschrieben, dass ich 300 neueste (aktuelle) aktuelle Werte benötige, nicht 300 erste (anfängliche), außerdem, dass ich auf ein Array am Offset 300-0 zugreife, aber Daten am Offset von "Ende des Arrays" bis "Ende des Arrays - 300" Werte erhalte (in meinem Fall von 4999 bis 4700), d.h. am Offset 300 gibt es einen Wert, der am Offset 4999 sein sollte, und ähnlich am Offset 0 gibt es einen Wert, der am Offset 4700 sein sollte. Bei der Verringerung der Anzahl der Array-Berechnungen ist es wichtig, aktuelle Daten anstelle der ursprünglichen historischen Daten zu erhalten. Es stellt sich die Frage, welchen Zweck die Berechnung der ältesten Werte hat, wenn die aktuellen Werte nicht berechnet werden.

IstArraySetAsSeries() hilfreich?

Ich stand einmal vor einer solchen Situation und konnte nicht gewinnen, also gab ich auf. Ich habe es ohne iMAOnArray() gemacht.

 
Artyom Trishkin:

Ist ArraySetAsSeries() hilfreich?

Ich stand einmal vor einer solchen Situation und konnte nicht gewinnen, also gab ich auf. Ich habe es ohne iMAOnArray() gemacht.

Das ist das Problem - das Array ist zunächst ein "serieller" Puffer. Das Problem ist in der Begrenzung der Anzahl der Berechnungen, wie ich bereits schrieb, die Daten ist normal, wenn Sie die Berechnung des gesamten Arrays, aber es verlangsamt das Terminal während der Initialisierung und noch schwieriger, wenn mehrere Indikatoren für verschiedene Zeitrahmen, geschweige denn die Optimierung eines EA für einen solchen Indikator; das Problem ist von einem internen MT4 Natur, dh die einzige Lösung ist, ihre eigenen Analog der angegebenen Funktionen zu verwenden, aber ich möchte sie vermeiden

PS Ich verwende auch mein eigenes Analogon von iMAOnArray, aber nicht nur ich werde den Quellcode haben. Obwohl es möglich ist, Bibliotheken zu verwenden, ist iBands auch notwendig, aber die Berechnung der Abweichungen muss gemacht werden. Im Allgemeinen ist es schade, dass dies bei Standardfunktionen der Fall ist.