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

 

Bonjour, j'ai une question sur les tableaux. J'ai créé un tableau unidimensionnel avec quelques difficultés. Tout devrait bien se passer, car je n'ai pas d'erreur au moment de la compilation, mais maintenant je dois l'exécuter dans le testeur et voir l'erreur EURUSD,M1 : array out of range in ,, (218,12) qui indique exactement la position de mon tableau de deuil. S'il vous plaît dites-moi ce qui ne va pas avec elle

int Totall=OrdersTotal();
  double Price;                                                               // Цена выбранного ордера
  double Mas[];                                                                //массив для упорядочивания всех ордеров
  for(int i=0; i<OrdersTotal(); i++)                                           // Цикл перебора ордер
   {
    if(OrderSelect(i,SELECT_BY_POS))                                           // Если есть следующий
     {
       Price=OrderOpenPrice();
       Mas [i] = Price;                                                        //Как раз перед квадратной скобкой и есть ошибка  array out of range in ,, (218,12)
         
         ArraySort (Mas,WHOLE_ARRAY,0,MODE_ASCEND);                           // Теперь цены открытия упорядочены по убыванию
          
        int Blizko2=ArrayBsearch(Mas,Ask,WHOLE_ARRAY,0,MODE_DESCEND);          //Определен индекс ближайшего большего по значению елемента к текущей цене
             PriceBlizko2 = Mas[Blizko2];                                      // Цена выбранного ордера

          ArraySort (Mas,WHOLE_ARRAY,0,MODE_ASCEND);                           // Теперь цены открытия упорядочены по убыванию
          
        int Blizko1=ArrayBsearch(Mas,Bid,WHOLE_ARRAY,0,MODE_ASCEND);           //Определен индекс ближайшего меньшего по значению елемента к текущей цене
            PriceBlizko1=Mas[Blizko1];
     }
   }       
Veuillez me conseiller, il y a peut-être un autre moyen d'assigner un prix de commande à chaque élément du tableau?
 
vikzip:

Bonjour, j'ai une question sur les tableaux. J'ai créé un tableau unidimensionnel avec quelques difficultés. Tout devrait bien se passer, car je n'ai pas d'erreur au moment de la compilation, mais maintenant je dois l'exécuter dans le testeur et voir l'erreur EURUSD,M1 : array out of range in ,, (218,12) qui indique exactement la position de mon tableau de deuil. S'il vous plaît dites-moi ce qui ne va pas avec elle


Votre code est faux à la base, mais l'erreur est due au fait que la taille du tableau n'a pas été définie avant qu'il ne soit rempli.

if(OrderSelect(i,SELECT_BY_POS))                                           // Если есть следующий
     {
       Price=OrderOpenPrice();
       ArrayResize(Mas, i+1);
       Mas [i] = Price; 
 
Vitaly Muzichenko:

Votre code est fondamentalement faux, mais l'erreur est due au fait que la taille du tableau n'a pas été définie avant de le remplir.


Merci beaucoup ! Pouvez-vous me dire si la séquence n'est pas correcte ? L'idée est de déterminer les prix des ordres les plus proches du prix du dessous et du dessus. Veuillez me faire part de votre point de vue.

 
vikzip:

Merci beaucoup ! Pouvez-vous me dire si la séquence n'est pas correcte ? L'idée est de déterminer les prix des ordres les plus proches du prix par le bas et par le haut. S'il vous plaît, dites-moi votre point de vue.

Vous avez beaucoup de choses inutiles dans votre boucle. Vous devez remplir le tableau avec les prix dans la boucle et les utiliser en dehors de la boucle.

  for(int i=0; i<OrdersTotal(); i++)                                           // Цикл перебора ордер
   {
    if(OrderSelect(i,SELECT_BY_POS))                                           // Если есть следующий
     {
       ArrayResize(Mas, i+1);
       Mas[i] = OrderOpenPrice();                                                        //Как раз перед квадратной скобкой и есть ошибка array out of range in ,, (218,12)
   /*
         ArraySort (Mas,WHOLE_ARRAY,0,MODE_ASCEND);                           // Теперь цены открытия упорядочены по убыванию
          
        int Blizko2=ArrayBsearch(Mas,Ask,WHOLE_ARRAY,0,MODE_DESCEND);          //Определен индекс ближайшего большего по значению елемента к текущей цене
             PriceBlizko2 = Mas[Blizko2];                                      // Цена выбранного ордера

          ArraySort (Mas,WHOLE_ARRAY,0,MODE_ASCEND);                           // Теперь цены открытия упорядочены по убыванию
          
        int Blizko1=ArrayBsearch(Mas,Bid,WHOLE_ARRAY,0,MODE_ASCEND);           //Определен индекс ближайшего меньшего по значению елемента к текущей цене
            PriceBlizko1=Mas[Blizko1];
   */
     }
   }       
 
Vitaly Muzichenko:

Vous avez beaucoup de choses inutiles dans la boucle. Vous devez remplir le tableau avec les prix dans la boucle, et travailler avec en dehors de la boucle.


Je vois. Merci beaucoup ! !! Est-ce que j'ai bien saisi l'idée ?

 
vikzip:

Je vois. Merci beaucoup ! !! Tu as bien saisi l'idée ?

C'est possible. La même tâche peut être accomplie de plusieurs manières.

 
double Price;                                                               // Цена выбранного ордера
  double Mas[];                                                                //массив для упорядочивания всех ордеров
  for(int i=0; i<OrdersTotal(); i++)                                           // Цикл перебора ордер
   {
    if(OrderSelect(i,SELECT_BY_POS))                                           // Если есть следующий
     {
       Price=OrderOpenPrice();
       ArrayResize(Mas, i+1);
       Mas [i] = Price; 
     }
   } 
          ArraySort (Mas,WHOLE_ARRAY,0,MODE_ASCEND);                           // Теперь цены открытия упорядочены по убыванию
          
        int Blizko2=ArrayBsearch(Mas,Ask,WHOLE_ARRAY,0,MODE_DESCEND);          //Определен индекс ближайшего большего по значению елемента к текущей цене
             PriceBlizko2 = Mas[Blizko2];                                      // Цена выбранного ордера                                                             Вот в этой строке

          ArraySort (Mas,WHOLE_ARRAY,0,MODE_ASCEND);                           // Теперь цены открытия упорядочены по убыванию
          
        int Blizko1=ArrayBsearch(Mas,Bid,WHOLE_ARRAY,0,MODE_ASCEND);           //Определен индекс ближайшего меньшего по значению елемента к текущей цене
            PriceBlizko1=Mas[Blizko1];


Vitaly Muzichenko:

C'est possible. Une seule et même tâche peut être mise en œuvre de plusieurs manières.


Je viens de faire une boucle pour déterminer les indices des éléments les plus proches et le testeur montre une erreur à Mas [Blizko2].Peut-être est-ce parce qu'il n'y a pas encore d'ordres lorsque je lance l'EA ?

(Veuillez me conseiller, peut-être savez-vous où chercher quelque chose de similaire ?)
 
vikzip:

Je viens de sortir de la boucle la définition des indices des éléments les plus proches et dans le testeur montre une erreur à la place Mas [Blizko2] .peut-être est-ce parce que lorsque vous exécutez l'EA il n'y a pas encore d'ordres ?

Essayez comme ceci

if(ArraySize(Mas)>0) { // если массив не пустой, то

         ArraySort (Mas,WHOLE_ARRAY,0,MODE_ASCEND);                           // Теперь цены открытия упорядочены по убыванию
          
        int Blizko2=ArrayBsearch(Mas,Ask,WHOLE_ARRAY,0,MODE_DESCEND);          //Определен индекс ближайшего большего по значению елемента к текущей цене
             PriceBlizko2 = Mas[Blizko2];                                      // Цена выбранного ордера

          ArraySort (Mas,WHOLE_ARRAY,0,MODE_ASCEND);                           // Теперь цены открытия упорядочены по убыванию
          
        int Blizko1=ArrayBsearch(Mas,Bid,WHOLE_ARRAY,0,MODE_ASCEND);           //Определен индекс ближайшего меньшего по значению елемента к текущей цене
            PriceBlizko1=Mas[Blizko1];

 }
 
Vitaly Muzichenko:

Essayez ceci


Merci beaucoup ! !! J'ai une autre question : est-ce que je détermine correctement l'indice du plus petit élément le plus proche du prix actuel en changeantMODE_DESCEND enMODE_ASCEND ?

 
vikzip:

Merci beaucoup ! !! J'ai une autre question : est-ce que je détermine correctement l'indice de l'élément inférieur le plus proche du prix actuel en changeantMODE_DESCEND enMODE_ASCEND ?

Pas de réponse, je n'ai jamais utiliséArrayBsearch.