Calcul d'un seul tableau pendant l'optimisation - page 7

 
forexman77:

J'ai essayé de déclarer un tableau au niveau global (code mql4)

remplissez-le dans l'inite

Lorsqu'il n'est pas défini au départ, il imprime la date de 1971, c'est-à-dire que le tableau est vide.

Si je remplis le tableau au début, les valeurs apparaissent. Peut-être que la raison est que le tableau est réinitialisé à chaque fois, mais sans lui le code ne compile pas ?

Le tableau disparaît. Qu'est-ce que je fais de mal ?

J'ai une idée, si quelqu'un en a aussi besoin. J'ai copié un tableau dans un autre.

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:

Voici une idée, si quelqu'un en a besoin aussi. Copie d'un tableau dans un autre.

C'est pour quoi faire ?

La question initiale était de faire en sorte que le tableau ne soit pas recalculé dans les itérations ultérieures de l'optimisation. Maintenant, il suffit de le remplir et de le copier dans l'autre. Ça ne servira à rien. Je suppose que ce tableau T[40] n'est représenté de cette manière qu'à titre d'illustration, alors qu'il devrait en fait être calculé et rempli de manière séquentielle. Chaque optimisation suivante recalculera ce tableau comme précédemment, la seule différence étant qu'il est organisé différemment.

 
Alexey Viktorov:

A quoi ça sert ?

La question initiale était de faire en sorte que le tableau ne soit pas recalculé dans les itérations ultérieures de l'optimisation. Et maintenant, il est simplement rempli et copié dans un autre. Ça ne servira à rien. Je suppose que ce tableau T[40] n'est représenté de cette manière qu'à titre d'illustration, alors qu'il devrait en fait être calculé et rempli de manière séquentielle. Lors de chaque prochaine optimisation, ce tableau sera recalculé de la même manière qu'auparavant, la seule différence étant qu'il est disposé différemment.

Le tableau déclaré entre accolades n'a pas été sauvegardé ; il ne pouvait pas être déclaré globalement et ensuite rempli dans l'inite (le tableau n'a pas été sauvegardé à l'intérieur d'une exécution).

Entre les itérations d'optimisation, si je comprends bien, le tableau n'est pas sauvegardé, c'est-à-dire que le programme réinitialise tout ce qui était.

 
forexman77:

Le tableau déclaré avec des accolades n'a pas été sauvegardé, il n'a pas pu être déclaré globalement puis rempli dans l'inite (le tableau n'a pas été sauvegardé au cours d'une exécution).

Entre les itérations d'optimisation, si je comprends bien, le tableau n'est pas sauvegardé, c'est-à-dire que le programme réinitialise tout ce qui était.

Ça ne prendra pas longtemps de le remplir dans la boucle comme ça. Mais c'est un autre problème, si le calcul des éléments du tableau prend beaucoup de temps. Si c'est le cas, cela ne sert à rien, car les éléments du tableau seront toujours recalculés à chaque itération. Et si le tableau est rempli de cette façon, on peut aussi énumérer globalement tous les éléments entre crochets. Je ne comprends pas l'intérêt de cette astuce...
 
Alexey Viktorov:
Et si le tableau est rempli de cette façon, vous pouvez également lister tous les éléments entre crochets au niveau global. quelque chose que je ne comprends pas l'intérêt de cette astuce...
Vous pouvez aussi le faire au niveau mondial. Mais, je n'aime pas avoir une tour de plusieurs milliers d'éléments sur le dessus)
 
forexman77:
Vous pourriez le faire à l'échelle mondiale. Mais je n'aimais pas l'idée de construire une tour de plusieurs milliers d'éléments par-dessus).

Dieu merci, tout s'est passé comme tu le voulais.

La vitesse a-t-elle augmenté ?

 
Alexey Viktorov:

Dieu merci, tout s'est passé comme tu le voulais.

La vitesse a-t-elle augmenté ?

C'est de plus en plus rapide.
 

Je n'ai pas créé de nouveau sujet.

Maintenant, j'essaie de faire ce qui suit : il y a un tableau avec la première valeur date, le deuxième et le troisième nombre double. Je dois trier le tableau par date, mais je veux que les deuxième et troisième valeurs soient liées à la date.

J'envisage ensuite de regrouper plusieurs tableaux en un seul et de les trier par date.

J'ai essayé de le faire de cette façon, mais d'après ce que j'ai compris, le tri est effectué par l'index du tableau, c'est-à-dire par i.

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

Je n'ai pas créé de nouveau sujet.

Maintenant, j'essaie de faire ce qui suit : il y a un tableau avec la première valeur date, le deuxième et le troisième nombre double. J'ai besoin de trier le tableau par valeur de date, mais les deuxième et troisième valeurs sont liées à la date.

...

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

C'est surtout sur les cours, qui sont une forêt obscure pour moi. Mais, certaines pensées ont surgi. Faites un tableau avec les dates et les nombres séparément. Seulement, comment obtenir le numéro d'index où se trouvent les dates après le tri, c'est-à-dire obtenir le i qui est dans la deuxième dimension ?

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

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