Сортировка массива

 

Добрый день, у меня есть функция сортировки массива но она как то криво сортирует. Должно сортировать от меньшего до большего значения.  Может кто  подсказать в чем может быть проблема?


double SortSell()
{     
      int a = CountSellPos();
      double PriceSell[];
      

      ArrayResize(PriceSell,a);
  
      for(int i=PositionsTotal()-1; i>=0; i--){
        
         if(a_position.SelectByIndex(i))
         
            if(a_position.Symbol()==Symbol())
             ArraySort(PriceSell);
              {
              ENUM_POSITION_TYPE pos_type = (ENUM_POSITION_TYPE)PositionGetInteger(POSITION_TYPE);
                
               
               
               if(pos_type==POSITION_TYPE_SELL){
               
                    ArrayResize(PriceSell,ArraySize(PriceSell)+1);
                    PriceSell[i]=a_position.PriceOpen();
                    

                    
                    Print(i,"-",PriceSell[i]);
               
                   
                 }

      }   
     }
     
     
      return(0);
     

}

Вывод сортировки :

Документация по MQL5: Операции с массивами / ArraySort
Документация по MQL5: Операции с массивами / ArraySort
  • www.mql5.com
ArraySort - Операции с массивами - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
Файлы:
 
Bogdan03:

Добрый день, у меня есть функция сортировки массива но она как то криво сортирует. Должно сортировать от меньшего до большего значения.  Может кто  подсказать в чем может быть проблема?


Вывод сортировки :

.
 
Попробуйте сортировать после добавления всех данных в массив (а не на каждом шаге итерации)
 

Вызывайте ArraySort() один раз в конце за пределами цикла.

Потом проходите в цикле по массиву и выводите.

Сейчас вывод не из массива идет, а в том порядке, в котором позиции перебираются.

 
Dmitry Fedoseev #:

Вызывайте ArraySort() один раз в конце за пределами цикла.

Потом проходите в цикле по массиву и выводите.

Сейчас вывод не из массива идет, а в том порядке, в котором позиции перебираются.

Yevhenii Levchenko #:
Попробуйте сортировать после добавления всех данных в массив (а не на каждом шаге итерации)

Спасибо за наводку, попытался сделать но все ровно что-то не так. Можно попросить Вашего мнения ?

 for(int i=PositionsTotal()-1; i>=0; i--){
      

         if(a_position.SelectByIndex(i))
         
            if(a_position.Symbol()==Symbol())  
              {
              ENUM_POSITION_TYPE pos_type = (ENUM_POSITION_TYPE)PositionGetInteger(POSITION_TYPE);

               if(pos_type==POSITION_TYPE_SELL){
       
 
               ArrayResize(PriceSell, ArraySize(PriceSell)+1);
               PriceSell[i]=a_position.PriceOpen();  
               
               int Size=ArraySize(PriceSell);

               for(int e=0; e<Size; e++){
                Print(e,"-",PriceSell[e]);
                      one = PriceSell[0];
                      two = PriceSell[1];
                 }
               
               
      
              }
     
           }
        }
     
     
      ArraySort(PriceSell);

Вывод: 

Файлы:
 
Bogdan03 #:

Спасибо за наводку, попытался сделать но все ровно что-то не так. Можно попросить Вашего мнения ?

Вывод: 

Примерно так:

   ArrayResize(PriceSell,PositionsTotal());
   int j=0;  
 
   for(int i=PositionsTotal()-1; i>=0; i--){
      if(a_position.SelectByIndex(i)){
         if(a_position.Symbol()==Symbol()) {
            ENUM_POSITION_TYPE pos_type = (ENUM_POSITION_TYPE)PositionGetInteger(POSITION_TYPE);
            if(pos_type==POSITION_TYPE_SELL){
               PriceSell[j]=a_position.PriceOpen();  
               j++;
            }
         }
      }   
   }
   
   ArrayResize(PriceSell,j);

   ArraySort(PriceSell);


 
Dmitry Fedoseev #:

Примерно так:

Cпасибо Вам большое, это то что нужно!   :)

Причина обращения: