[ARCHIVE !] Toute question de débutant, pour ne pas encombrer le forum. Professionnels, ne passez pas à côté. Nulle part sans toi - 4. - page 523

 
Lisi4ka330:

Chers experts, n'y aurait-il pas une erreur dans le manuel?

Voici mon raisonnement :

Au début du code, on appelle la fonctionint ArrayCopyRates qui copie les données des barres du graphique actuel dans un tableau bidimensionnel de type RateInfo[][6] et renvoie le nombre de barres copiées ou -1 en cas d'échec selon l'exemple de cette fonction :

la barrecourante est la barre avec l'index 0-0 , donc, en retournant au code original, nous copions l'élément avec l'index 0-0 (la barre courante) du tableau1 , vers array2 avec l'index 0-0, nous obtenons les 10 dernières barres (où la dernière barre est la barre actuelle, celle avec l'index [0]), ce qui est contraire à ce que nous avons écrit dans le tutoriel... et respectivement, en copiant l'élément avec l'index Bars*6-60,60 du tableau 1 dans le tableau 2 avec l'index de départ de l'élément 0, nous obtenons des informations sur les barres de l'historique.


Sans faire de déclarations fracassantes, vérifions-le dans la pratique :

//+------------------------------------------------------------------+
//|                                                       массив.mq4 |
//|                                                  Copyright 2012, |
//+------------------------------------------------------------------+
#property copyright "Copyright 2012,"
#property link      "https://forum.mql4.com/ru/46980/page525"
#property show_inputs
extern string s=" -----номер бара--------";
extern int a=9;//номер 10 последних баров 
//+------------------------------------------------------------------+
//| script program start function                                    |
//+------------------------------------------------------------------+
int start()
{if(a<10)
{double array1[][6];double array2[10][6];
  ArrayCopyRates(array1);
  ArrayCopy(array2,array1,0,Bars*6-60,60);
// теперь array2 содержит 10 последних баров из истории(имеется в виду,что последний бар-это текущий бар,бар с индексом [0])
Alert("Контрольный бар - ",a," время - ",TimeToStr(array2[a][0]),"  цена открытия - ",array2[a][1]);}return(0);}
 
Roll:


Sans faire de grandes déclarations, mettons-le à l'épreuve :

Oui, en pratique, il s'avère effectivement que l'élément avec l'indice Bars*6-60,60 est la barre actuelle... Alors comment expliquez-vous cela dans l'exemple ?

double array1[][6];
ArrayCopyRates(array1,"EURUSD", PERIOD_H1);
Print("Текущий бар ",TimeToStr(array1[0][0]),"цена открытия ", array1[0][1]);
La barre courante est array1[0][0] et après avoir copié le tableau il devient array1[Bars*6-60,60][0].... il s'avère que quelque part il y a une renumérotation... Bien sûr, le résultat est clair après avoir utilisé la fonction dans la pratique... mais la logique est désordonnée, à mon avis)))
 
Lisi4ka330:

Oui, en pratique, il s'avère que l'élément avec l'indice Bars*6-60,60 est la barre actuelle ...


C'est votre conclusion.
 
Roll:


Sans faire de grandes déclarations, mettons-le à l'épreuve :

#property show_inputs
extern string s=" -----номер бара--------";
extern int a=9;//номер 10 последних баров 
//+------------------------------------------------------------------+
//| script program start function                                    |
//+------------------------------------------------------------------+
int start()
{if(a<10)
{double array1[][6];double array2[10][6];
  ArrayCopyRates(array1);
  ArrayCopy(array2,array1,0,Bars*6-60,60);
// теперь array2 содержит 10 последних баров из истории(имеется в виду,что последний бар-это текущий бар,бар с индексом [0])
Alert("Контрольный бар - ",a," время - ",TimeToStr(array2[a][0]),"  цена открытия - ",array2[a][1]);}return(0);}

Voici donc un élément spécifique du tableauTimeToStr(array2[a][0]).

Que la sortie soit correcte, je suis d'accord. Mais qu'est-ce que Bars*6-60 a à voir avec ça? Quelle valeur est substituée à Bar lors du calcul ? Si ce sont des barres, comment obtenir les 10 dernières barres ?

Vous remarquerez que je ne suis pas le seul à ne pas avoir compris cela sur le forum, mais bien d'autres.

Il s'avère que le nombre de toutes les barres est multiplié par 6 et moins 60. D'où vient ce chiffre ? Ça n'a pas de sens du tout.

 
hoz:

Voici donc un élément spécifique du tableauTimeToStr(array2[a][0]).

La sortie est correcte, je suis d'accord. Mais qu'est-ce que Bars*6-60 a à voir... Quelle valeur est substituée à Bar lors du calcul ? Si ce sont des barres, comment obtenir les 10 dernières barres ?

Comme vous pouvez le constater, je ne suis pas le seul à ne pas l'avoir compris sur le forum, beaucoup d'autres ne l'ont pas compris.



int Bars -- Nombre de barres sur le graphique actuel.

 
hoz:

Il s'avère que le nombre de toutes les barres est multiplié par 6 et moins 60. D'où vient le chiffre 6 ? Ça n'a pas de sens du tout.

Référence MQL4 - Opérations sur les tableaux - ArrayCopyRates
 
Roll:



int Bars -- Nombre de barres sur le graphique actuel.


Alors, d'où viennent les 10 derniers ?

int Bars = 10 000;

Alors Bars*6 - 60 = 10 000*6 - 60 = 60 000 - 60 = 59 960;

La valeur de59 960 est supérieure à la valeur de Bars. Et cela signifie déjà qu'il est en dehors du tableau. Et 10 est introuvable...

 
hoz:

Il s'avère que le nombre de toutes les barres est multiplié par 6 et moins 60. D'où vient le chiffre 6 ? Ça n'a pas de sens du tout.

Pour ne pas aggraver la confusion, je veux corriger l'erreur que j'ai faite dans la réponse précédente : la notation "array1[Bars*6-60,60][0]" n'est pas correcte, car Bars*6 est le nombre total d'éléments dans array1.Chaque barre a 6 propriétés, supposons que nous ayons 30 barres, en multipliant par 6 nous obtenons le nombre d'éléments dans le premier tableau - 180. Le deuxième tableau ne comporte que 60 "cellules" libres (c'est-à-dire 10 x 6 propriétés), nous devons donc sélectionner seulement 60 éléments du premier tableau à copier. En exprimant [Bars*6-60,60], nous soustrayons 60 du total, c'est-à-dire 180 - 60 = 120, c'est-à-dire que 120 éléments du premier tableau seront écrits dans l'élément zéro du second, 121 dans le premier, et ainsi de suite. Une autre question est de savoir comment il se fait que les informations sur les dernières barres formées ne sont pas écrites au début du premier tableau, mais à la fin ... Mais apparemment, la réponse se trouve dans le code de la fonction, et il est inutile de creuser davantage...
 
hoz:


Alors, d'où viennent les 10 derniers ?

int Bars = 10 000;

Alors Bars*6 - 60 = 10 000*6 - 60 = 60 000 - 60 = 59 960 -- erreur !!!

La valeur de59 960 est supérieure à la valeur de Bars. Et cela signifie déjà qu'il a dépassé les limites du tableau. Et 10 n'est nulle part.


Victor, ne t'inquiète pas, tu vas y arriver. "L'expérience est le fils des erreurs difficiles..." Allez du simple au complexe, et non l'inverse :

"PROGRES (du lat. progressus - mouvement vers l'avant), une direction de développement caractérisée par une transition de l'inférieur au supérieur, du moins parfait au plus parfait. Le progrès peut concerner le système dans son ensemble, ses éléments individuels, la structure de l'objet en développement. Le concept de progrès est l'opposé du concept de régression.

REGRESSE (du latin regressus - mouvement inverse), type de développement caractérisé par le passage du haut vers le bas. Le contraire du progrès."

 
Roll:


Victor, ne vous inquiétez pas, vous êtes en avance sur le jeu. "L'expérience est le fils des erreurs..." Allez du simple au complexe, et non l'inverse :

"Progrès (du latin progressus - mouvement vers l'avant), direction du développement, caractérisée par le passage de l'inférieur au supérieur, du moins parfait au plus parfait. Le progrès peut concerner le système dans son ensemble, ses éléments individuels, la structure de l'objet en développement. Le concept de progrès est l'opposé du concept de régression.

REGRESSE (du latin regressus - mouvement inverse), le type de développement qui se caractérise par la transition du haut vers le bas. Le contraire du progrès."


pourquoi ne pas simplement l'expliquer à la personne ? l'aider à progresser ? et tout ce discours sur la régression relève plutôt de la ringardise d'un professeur....