Toute question des nouveaux arrivants sur MQL4 et MQL5, aide et discussion sur les algorithmes et les codes. - page 1426

 
Aleksei Stepanenko:
Voulez-vous trier les valeurs des deux lignes ou seulement de la première ?

Seulement dans le premier. Il y a une erreur dans le code.

Je suis désolé... Je ne sais pas comment supprimer le code. Je dirai donc simplement que dans le bloc 2, au lieu de LoY[S2][0]=Bid ; vous avez besoin de LoY[0][52]=Bid;

 

Pourquoi ne puis-je pas échanger les lignes et les colonnes en même temps ?

double LoY[31][2];
 

Si vous faites la bonne commande en une fois, pouvez-vous nommer les numéros des cellules que vous voulez remplir avec la valeur 0.5555 ?


 
Aleksei Stepanenko:

Pourquoi ne puis-je pas échanger les lignes et les colonnes en même temps ?

Alors ArrayFill(LoY,0,10,0.5555) ; ne fonctionnera pas. Mais il a besoin d'éléments de tableau dans lesquels il change les valeurs pour aller *en séquence*. Mais si je lui donne LoY[31][2]
, alors les éléments du tableau où je veux changer la valeur passeront par 1. Dans ce cas, il "résumera" les 31 lignes du tableau en une seule ligne d'abord.

 
Aleksei Stepanenko:

Si vous voulez le faire dans le bon ordre, pouvez-vous me dire les numéros des cellules que vous voulez remplir avec 0,5555 ?


La première ligne contient les cellules 1 à 10. Mais une fois que vous les avez remplis avec 0.5555, toute la première ligne doit être triée... disons par ordre croissant. ArrayFill(LoY,0,10,0.5555) au lieu de ArrayFill(LoY,0,10,0.5555) ne me convient pas.

J'ai corrigé les erreurs dans le code

 

Voici le script :

void OnStart()
   {
   int arr[31,2]={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,
                  31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61};
   //до заполнения              
   string str="";
   for(int i=0; i<31; i++) for(int j=0; j<2; j++) str+=(string)arr[i,j]+", ";
   printf(str);
   //после заполнения
   str="";
   ArrayFill(arr, 0, 10, 555); 
   for(int i=0; i<31; i++) for(int j=0; j<2; j++) str+=(string)arr[i,j]+", ";
   printf(str);
   }

résultat :

2021.03.20 19:42:26.602 primer AUDUSD,H1: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 

2021.03.20 19:42:26.602 primer AUDUSD,H1: 555, 555, 555, 555, 555, 555, 555, 555, 555, 555, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 

l'est-il ou non ?

 
Aleksei Stepanenko:

Voici le script :

résultat :

C'est vrai ou pas ?

Merci beaucoup. Ça ressemble à ce dont j'ai besoin. Mais j'apprécierais si vous pouviez mettre ce code non pas comme un script, mais dans mon code. Ainsi, je comprendrai et assimilerai plus rapidement les nouvelles informations. Seulement j'ai des valeurs de prix dans le tableau au lieu d'entiers.

Merci encore pour votre aide.

 
si vous devez remplir différemment, alors au lieu de
ArrayFill()

utiliser

for(int i=0; i<10; i++) arr[i,0]=555;
 
Aleksei Stepanenko:
Si elle doit être remplie différemment, alors au lieu de

utiliser

Ok. Aujourd'hui, j'espère absorber quelques nouvelles informations pour moi. Et je vous ferai connaître les résultats demain.

Merci encore.

 
ANDREY:

pas comme un script, mais le coller dans mon code.

Je n'ai rien écrit d'autre, j'ai juste répété ton code.

Visuellement, les chiffres ne sont pas disposés correctement (sur deux lignes, au lieu de 31), et vous pensiez que c'était ce dont vous aviez besoin.

Il est fort probable que vous ayez eu besoin d'affecter 0,5555 à la boucle au lieu de ArrayFill. Essayez-le.

double LoY[31][2],LoU,LoU1;
int S,S1,S2;

void OnTick()
{
//*************************************************** БЛОК 1
if (Minute()==20&&Minute()!=S1)
{
for(int i=0; i<10; i++) LoY[i,0]=0.555;
S1=Minute();
}
//*************************************************** БЛОК 2
if (Minute()!=S)
{
LoY[S2][0]=Bid;
ArraySort(LoY,WHOLE_ARRAY,0,MODE_ASCEND);
Print("----LoY[1][0]-- В ---  [0]  ",  LoY[0][0],"  [1] ",   LoY[1][0],"  [2] ",   LoY[2][0],"  [3] ",   LoY[3][0],"  [4] ",   LoY[4][0],"  [26] ",   LoY[26][0],"  [27] ",   LoY[27][0],"  [28] ",   LoY[28][0],"  [30] ",   LoY[30][0],"  [60] ",   LoY[60][0]);
S2++;
if (S2==62)
{
S2=0;
}
S=Minute();
}
}
Raison: