Einzelne Array-Berechnung während der Optimierung - Seite 7

 
forexman77:

Versucht , ein Array auf globaler Ebene zu deklarieren (mql4-Code)

Füllen Sie es in das Feld

Wenn es beim Start nicht gesetzt ist, wird das Datum 1971 gedruckt, d.h. das Feld ist leer.

Wenn ich das Feld am Anfang fülle, erscheinen die Werte. Vielleicht liegt es daran, dass das Array zu bestimmten Zeiten neu initialisiert wird, aber ohne das Array lässt sich der Code nicht kompilieren?

Das Feld verschwindet. Was mache ich falsch?

Hier habe ich eine Idee, falls jemand sie auch braucht. Ich habe ein Feld in ein anderes kopiert.

datetime T_[];//на глобальном уровне
//////////////////////////////////////////////////////////////////
int init()
  {
   ArraySetAsSeries(T_,true);
   massiv();

   return(0);
  }
/////////////////////////////////////////////////////////////////
int start()
  {
   if(ArraySize(T_)==0)
   massiv();

  return(0);  
  }
////////////////////////////////////////////////////////////////
void massiv()
  {
   datetime T[40]=
   {
   1262731020,1262735700,1262821920,1262903400,1262989740,1263247200,1263339060,1263420000,1263507480,1263595500,
   1265324700,1265407200,1265752980,1265926500,1265930820,1267657200,1267740300,1267826460,1268175840,1268346360,
   1270504920,1270684140,1270768500,1272924180,1273011720,1273097100,1273272240,1273528800,1273617180,1275344100,
   1275516000,1275602400,1275689160,1276034400,1276124580,1276208700,1276211640,1278027960,1278369780,1278373920
   };
   ArraySetAsSeries(T,true);
   ArrayInitialize(T_,0);
   ArrayResize(T_,40);
   ArrayCopy(T_,T,0,0,WHOLE_ARRAY);
   ArrayFree(T);
  }
 
forexman77:

Hier ist eine Idee, falls jemand sie auch braucht. Kopieren eines Arrays in ein anderes.

Wozu ist das gut?

Die ursprüngliche Frage war, dass das Array in den folgenden Iterationen der Optimierung nicht neu berechnet werden sollte. Jetzt wird er einfach ausgefüllt und in den anderen kopiert. Das wird nichts nützen. Ich gehe davon aus, dass dieses Array T[40] nur zur Veranschaulichung so dargestellt wird, während es in Wirklichkeit sequentiell berechnet und gefüllt werden sollte. Bei jedem weiteren Optimierungslauf wird dieses Feld wie zuvor neu berechnet, mit dem einzigen Unterschied, dass es anders organisiert ist.

 
Alexey Viktorov:

Wozu dient es?

Die ursprüngliche Frage war, dass das Array in den folgenden Iterationen der Optimierung nicht neu berechnet werden sollte. Und jetzt wird er einfach ausgefüllt und in einen anderen kopiert. Das wird nichts nützen. Ich gehe davon aus, dass dieses Array T[40] nur zur Veranschaulichung so dargestellt wird, während es in Wirklichkeit sequentiell berechnet und gefüllt werden sollte. Bei jedem weiteren Optimierungslauf wird dieses Array in der gleichen Weise neu berechnet, mit dem einzigen Unterschied, dass es anders angeordnet ist.

Das durch geschweifte Klammern deklarierte Array wurde nicht gespeichert; es konnte nicht global deklariert und dann in der inite gefüllt werden (das Array wurde nicht innerhalb eines Durchlaufs gespeichert).

Zwischen den Iterationen der Optimierung wird das Array, so wie ich es verstehe, nicht gespeichert, d. h. das Programm setzt alles zurück, was vorher war.

 
forexman77:

Das mit geschweiften Klammern deklarierte Array wurde nicht gespeichert, es konnte nicht global deklariert und dann im inite gefüllt werden (das Array wurde nicht in einem Durchlauf gespeichert).

Zwischen den Iterationen der Optimierung wird das Array, so wie ich es verstehe, nicht gespeichert, d. h. das Programm setzt alles zurück, was vorher war.

Es wird nicht lange dauern, die Schleife auf diese Weise zu füllen. Aber es ist ein anderes Problem, wenn die Berechnung von Array-Elementen sehr lange dauert. Wenn das der Fall ist, wird es nicht helfen. Die Array-Elemente werden immer noch bei jeder Iteration neu berechnet werden. Und wenn das Array auf diese Weise gefüllt wird, kann man auch global alle Elemente in geschweiften Klammern aufzählen. Ich verstehe den Sinn dieser Zauberei nicht...
 
Alexey Viktorov:
Und wenn das Array auf diese Weise gefüllt wird, können Sie auch alle Elemente in geschweiften Klammern auf globaler Ebene auflisten. Ich verstehe den Sinn dieser Zauberei nicht...
Sie können dies auch global tun. Aber ich mag es nicht, einen Turm aus mehreren tausend Elementen darauf zu haben)
 
forexman77:
Sie könnten es auf einer globalen tun. Aber die Idee, darauf einen Turm aus mehreren tausend Elementen zu bauen, gefiel mir nicht).

Gott sei Dank ist alles so gelaufen, wie Sie es wollten.

Hat sich die Geschwindigkeit erhöht?

 
Alexey Viktorov:

Gott sei Dank ist alles so gelaufen, wie Sie es wollten.

Hat sich die Geschwindigkeit erhöht?

Es wird immer schneller.
 

Ich habe kein neues Thema erstellt.

Jetzt versuche ich Folgendes zu tun: Es gibt ein Array mit dem ersten Wert Datum, zweite und dritte Zahlen double. Ich muss das Array nach Datum sortieren, aber ich möchte die zweiten und dritten Werte an das Datum gebunden werden.

Dann plane ich, mehrere Arrays in einem zusammenzufassen und sie nach Datum zu sortieren.

Ich habe versucht, es auf diese Weise zu tun, aber soweit ich verstehe, wird die Sortierung nach Array-Index durchgeführt, d. h. nach i.

double m[215][3];
m[i][0]=Data;
m[i][1]=f1;
m[i][2]=f2;
 
forexman77:

Ich habe kein neues Thema erstellt.

Jetzt versuche ich Folgendes zu tun: Es gibt ein Array mit dem ersten Wert Datum, zweite und dritte Zahlen double. Brauchen Sie, um das Array nach Datum Wert zu sortieren, aber haben die zweiten und dritten Werte an das Datum gebunden.

...

Siehe hier:https://www.mql5.com/ru/forum/42036
Сортировка двухмерного массива.
Сортировка двухмерного массива.
  • www.mql5.com
Форум трейдеров MQL5.community
 
Anatoli Kazharski:
Siehe hier:https://www.mql5.com/ru/forum/42036

Es geht hauptsächlich um Klassen, die für mich ein dunkler Wald sind. Aber einige Gedanken sind aufgetaucht. Erstellen Sie ein Array mit getrennten Daten und Zahlen. Nur, wie erhält man die Indexnummer, in der sich die Daten nach der Sortierung befinden, d. h. wie erhält man das i, das sich in der zweiten Dimension befindet?

datetime m[215][1];
double d[215][2];

m[0][i]=Dat_DtTm;
d[i][0]=f1;
d[i][1]=f2;