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

 
Taras Slobodyanik:

le format des commentaires peut varier d'un courtier à l'autre.

Je n'ai pas vu l'absence de "A" et "De".
 
Artyom Trishkin:
Je n'ai pas vu l'absence de "A" et "De".
Artem, regardez ma question ci-dessus....
 

Bonne journée à vous tous !

Pouvez-vous me dire s'il existe une fonction dans MQL4 (ou dans MQL5, mais fonctionnant dans MQL4) qui convertit le tableau LoY[2][7] en tableau LoY[7][2] et vice versa. Quelque chose comme une transposition. Vous trouverez ci-dessous un exemple de transformation dont j'ai besoin. Je veux avoir une fonction. Je sais déjà comment convertir un tableau dans une boucle.

Merci pour votre aide.

 
ANDREY:

Bonne journée à vous tous !

Pouvez-vous me dire s'il existe une fonction dans MQL4 (ou dans MQL5, mais fonctionnant dans MQL4) qui convertit le tableau LoY[2][7] en tableau LoY[7][2] et vice versa. Quelque chose comme une transposition. Vous trouverez ci-dessous un exemple de transformation dont j'ai besoin.

Merci pour votre aide.

Juste pour référence : dans les algorithmes classiques (l'informatique en général) une telle opération est appelée zip,

Je ne trouve pas une telle fonction dans la bibliothèque. C'est un terrible gaspillage et une inefficacité. Il est plus facile et plus rapide de modifier les index dans l'algorithme/le programme ou d'utiliser des accès indirects que de réorganiser TOUTES les données dans les tableaux.

 
Maxim Kuznetsov:

Il est plus facile et plus rapide de modifier les index dans l'algorithme/le programme ou d'utiliser des accès indirects que de réorganiser TOUTES les données dans les tableaux.

Merci beaucoup pour votre réponse. Malheureusement, je ne suis pas aussi avancé en programmation que vous. Je vous serais très reconnaissant si vous pouviez écrire un code mql4 qui change les indices des tableaux pour résoudre mon problème. Et si vous donnez un exemple de référence indirecte, je vous en serai doublement reconnaissant.

Je comprendrai plus précisément votre processus de pensée et j'apprendrai quelque chose de nouveau et d'utile pour moi grâce à vous.

 
ANDREY:

Merci beaucoup pour votre réponse. Malheureusement, je ne suis pas aussi avancé en programmation que vous. Je vous serais très reconnaissant si vous pouviez écrire un code mql4 pour changer les indices des tableaux afin de résoudre mon problème. Et si vous donnez un exemple de référence indirecte, je vous en serai doublement reconnaissant.

Je comprendrai plus précisément votre processus de pensée et j'apprendrai quelque chose de nouveau et d'utile pour moi grâce à vous.

void Convert_7x2_2x7 (const double &src[7][2],double &dst[2][7]) {

   for(int i=0;i<7;i++)

   for(int j=0;j<2;j++) {

dst[j][i]=src[i][j];

   }

}

C'est court, mais c'est la pire chose que vous puissiez faire :-) deux boucles imbriquées et la copie de tableaux élément par élément.

Lorsque vous introduisez votre algorithme, vous pouvez simplement renommer les index. Il suffit de changer i en j dans le code et vice versa...

 
Maxim Kuznetsov:

void Convert_7x2_2x7 (const double &src[7][2],double &dst[2][7]) {

   for(int i=0;i<7;i++)

   for(int j=0;j<2;j++) {

dst[j][i]=src[i][j];

   }

}

court, mais c'est la pire chose que vous puissiez faire :-)

Merci beaucoup. Et un exemple du meilleur ? ?? :-).... pour que je comprenne bien.

La copie élément par élément est longue et consommatrice d'énergie... surtout pour les grands tableaux...... si je ne me trompe pas.

 
Andrei, pourquoi voudrais-tu faire ça ? Si les données sont déjà rassemblées dans un tableau, vous pouvez trouver un moyen de les utiliser telles quelles sans rien déplacer. Ou les pré-assembler dans un tableau dans le bon ordre. Que voulez-vous obtenir ?
 
Aleksei Stepanenko:
Andrei, pourquoi en as-tu besoin ? Si les données sont déjà rassemblées dans un tableau, vous pouvez trouver un moyen de les utiliser telles quelles sans rien déplacer. Ou vous pouvez les assembler dans un tableau dans le bon ordre au préalable. Que voulez-vous obtenir ?

Voici mon code simple pour illustrer ce dont j'ai besoin.

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

void OnTick()
{
//*************************************************** БЛОК 1
if (Minute()==20&&Minute()!=S1)
{
ArrayFill(LoY,0,10,0.5555);

S1=Minute();
}
//*************************************************** БЛОК 2
if (Minute()!=S)
{
LoY[0][S2]=Bid;
ArraySort(LoY,WHOLE_ARRAY,0,MODE_ASCEND);
Print("----LoY[0][1]-- Г ---  [0]  ",  LoY[0][0],"  [1] ",   LoY[0][1],"  [2] ",   LoY[0][2],"  [3] ",   LoY[0][3],"  [4] ",   LoY[0][4],"  [26] ",   LoY[0][26],"  [27] ",   LoY[0][27],"  [28] ",   LoY[0][28],"  [30] ",   LoY[0][30],"  [60] ",   LoY[0][60]);
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();
}
}

Dans le bloc 1, ArrayFill(LoY,0,10,0.5555) s'exécute et attribue aux 10 premiers éléments du tableau la valeur 0.5555. Après cela, je dois trier toute la ligne nulle de la colonne 0 à la colonne 31.

Je veux le trier dans le bloc 2, en utilisant ArraySort(LoY,WHOLE_ARRAY,0,MODE_ASCEND) ; Mais je ne peux pas le trier car cette fonction trie un tableau à deux dimensions par sa première dimension, c'est-à-dire par lignes. Et j'ai une chaîne de caractères à trier uniquement 1. ArraySort() sur la deuxième dimension, c'est-à-dire que les colonnes ne trient pas les tableaux à deux dimensions (seulement à une dimension).

J'ai donc pensé que je devrais peut-être convertir LoY[2][31] après le premier bloc en LoY[31][2], afin que ArraySort() puisse trier les valeurs dont j'ai besoin dans le bloc 2. Et j'ai besoin de trier toutes les valeurs de la ligne zéro après que ArrayFil() ait modifié les 10 premières d'entre elles.

Puis-je trier les tableaux à deux dimensions par la deuxième dimension, c'est-à-dire par colonnes, en utilisant une autre fonction, ou autre chose ?
Désolé... Je ne sais pas comment supprimer le code. Je dirai donc simplement qu'il y a une erreur à la ligne 180 : au lieu de LoY[S2][0]=Bid, il faut LoY[0][52]=Bid ;

Merci pour votre aide.

 
Voulez-vous trier les valeurs des deux rangées ou seulement la première ?