Fehler, Irrtümer, Fragen - Seite 465

 
uncleVic:
Schreiben Sie der CD auch darüber. So wie "nicht alles, was in der Rezension steht, kann auch im Tester ausgewählt werden".
Nein, kein Rückzieher. Ich habe zwei Terminals geöffnet - Alpari und MK - und bin hin und her gewechselt, aber bei letzterem habe ich vergessen, den EURGBP zur Marktübersicht hinzuzufügen.
 
marketeer:
Nein, Rückschlag. Ich habe zwei Terminals geöffnet - Alpari und MK - und bin hin und her gewechselt, aber bei letzterem habe ich vergessen, den EURGBP zur Marktübersicht hinzuzufügen.
Das kommt vor.
 

Ich versuche, in dem Skript ein Array zu erstellen, das sich wie eine Indikatorreihe verhält. Wenn nämlich ein neuer Eintrag erscheint, wird das gesamte Array zurückgeschoben und der neue Eintrag an eine Nullposition gesetzt.

void OnStart()
  {
   int a[];
   int size=5;               // размер массива
   bool flag=true;           // флаг направления индексации
   ArraySetAsSeries(a,flag);  // зададим направление индексации
   ArrayResize(a,size);      // зададим размер массива
//---
   for(int i=0;i<size;i++)  // задаём значения и распечатываем массив
      a[i]=size-i;         // 54321
   Print("[",a[0],"][",a[1],"][",a[2],"][",a[3],"][",a[4],"]");
//---
   ArrayResize(a,size-1);     // уменьшаем размер 5432
   ArraySetAsSeries(a,!flag);  // меняем направление индексации 2345
   ArrayResize(a,size);       // возвращаем в исходный размер  2345х
   ArraySetAsSeries(a,flag);   // возвращаем в исходную индексацию х5432   
   a[0]=6;                   // задаём "пустому" нулевому данному значение
//---
   Print("[",a[0],"][",a[1],"][",a[2],"][",a[3],"][",a[4],"]");
   // в результате получаем 64321 вместо нужного 65432
  }

Wie man so schön sagt: Warum?

Vielleicht habe ich mich geirrt, aber es ist das erste, was mir einfällt - ein weiterer Fehler in der Sprachoptimierung.

HZZY Ich bitte auch diejenigen, die Daten mit Hilfe von Schleifen verschieben wollen, sich nicht zu bemühen. Dies funktioniert gut für Arrays von 5...100...1000..., aber nicht für größere Arrays.

 
Urain:

Ich versuche, in dem Skript ein Array zu erstellen, das sich wie eine Indikatorreihe verhält. Wenn nämlich ein neuer Eintrag erscheint, wird das gesamte Array zurückgeschoben und der neue Eintrag an eine Nullposition gesetzt.

Wie man so schön sagt: Warum?


Was, wenn wir die Klasse CArrayInt nehmen und ein Insert verwenden, um Daten hineinzuschieben?
 
uncleVic:
Und wenn wir nehmen Klasse CArrayInt, und fügt dort Daten?

Ich möchte in der Lage sein, das Array über Parameter zu übergeben, während das Array selbst in der Klasse privat ist.

Soweit ich mich erinnere, werden bei dieser Methode lediglich die Daten in der Schleife verschoben, und das ist ziemlich langsam.

 
Urain:

Ich versuche, in dem Skript ein Array zu erstellen, das sich wie eine Indikatorreihe verhält. Wenn nämlich ein neuer Eintrag erscheint, wird das gesamte Array zurückgeschoben und der neue Eintrag an eine Nullposition gesetzt.

Wie man so schön sagt: Warum?

Vielleicht habe ich es verm asselt, aber es ist das erste, was mir einfällt - ein weiterer Fehler in der Sprachoptimierung.

HZZY Ich bitte auch diejenigen, die Daten mit Hilfe von Schleifen verschieben wollen, sich nicht zu bemühen. Dies funktioniert gut für Arrays von 5...100...1000..., aber nicht für größere Arrays.


Apropos "ZZZY": Beeinträchtigt die Größenänderung nicht Ihr Gedächtnis?
 
uncleVic:
Was "ZZI" betrifft: Ihre Größenänderungen fragmentieren bei Ihnen nicht den Speicher?

Ich kenne keine andere Funktion (die Speicher zuweist) in mql5.

HH Und soweit ich es verstanden habe, ist die Richtung der Anordnung auch eine rein virtuelle Sache.

ZZY Anscheinend muss man nicht mit Speicher, sondern mit Adressraumvirtualisierung arbeiten. Auch das verlangsamt die Arbeit, schließlich ist der direkte Zugriff schneller.

 
Urain:

Ich möchte in der Lage sein, das Array über Parameter zu übergeben, während das Array selbst in der Klasse privat ist.

Soweit ich mich erinnere, dient diese Methode nur zum Verschieben von Daten in einer Schleife, und das ist ziemlich langsam.

Ich werde darüber nachdenken müssen, die Array-Klassen (für mich) zu verbessern.
 
uncleVic:
Ich müsste darüber nachdenken, wie ich die Array-Klassen (für mich) verbessern kann.

Ja, eine virtuelle Einfügung bei einer Nullposition wäre schön. Aber nicht, um die Daten wirklich zu verschieben, sonst wäre es zu lang und ineffizient.

Wie auch immer, es ist schlecht, dass Sie nicht mit Speicher direkt arbeiten können, es hat gute Virtualisierung Beschleunigung, auch C + + Geschwindigkeit ist 1,5 mal schneller, wenn Sie eine Zelle-Adresse anstelle eines Arrays Adresse.

 
Urain:

Ich versuche, in dem Skript ein Array zu erstellen, das sich wie eine Indikatorreihe verhält. Das heißt, wenn ein neuer Eintrag erscheint, wird das gesamte Array zurückgeschoben, und der neue Eintrag wird an der Nullposition vorgenommen.

ZZZY Ich bitte Kameraden, die zu raten, um Daten durch den Zyklus zu verschieben nicht zu befürchten, diese Option funktioniert gut für Arrays von 5...100...1000..., aber bei der größeren Größe Array ist inakzeptabel.


Aber darf ich vorschlagen, nicht die gesamte Anordnung zu verschieben? :)

Dynamisches Array, neue Daten werden an das Ende geschrieben, die Größe wird geändert/gespeichert, und das AsSeries-Flag ändert nur die Indizierung.

Bei normaler Reihenfolge sind es N Elemente des Arrays, bei "serieller" Größe-N-1.

Документация по MQL5: Основы языка / Типы данных / Объект динамического массива
Документация по MQL5: Основы языка / Типы данных / Объект динамического массива
  • www.mql5.com
Основы языка / Типы данных / Объект динамического массива - Документация по MQL5