Array Sort ((String Values)) MQL5

To add comments, please log in or register
Ahmed Alesawy
21
Ahmed Alesawy  

 >>> can you help me please ?

I can not find the equivalent in MQL5 doing sort for ((( string values ))) .... this my code in MQL4 and ArraySort works OK in string values

string x[];
ArrayResize(x,OrdersTotal()+1);
for(int i=0;i<OrdersTotal();i++)
      {
         if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)
         {
            x[i]=OrderSymbol();
         }
      }
ArraySort(x,WHOLE_ARRAY,0,MODE_ASCEND); // I can not find the equivalent in MQL5 work on string values
Enrique Dangeroux
449
Enrique Dangeroux  
Egyptian.Smart:

 >>> can you help me please ?

I can not find the equivalent in MQL5 doing sort for ((( string values ))) .... this my code in MQL4 and ArraySort works OK in string values

https://www.mql5.com/en/docs/array/arraysort

It can not sort based on string according to the docs. 

Maybe this https://www.mql5.com/en/articles/1334 can help you to give Arrays more functionality found in other programming languages.

Documentation on MQL5: Array Functions / ArraySort
Documentation on MQL5: Array Functions / ArraySort
  • www.mql5.com
"The indicator analyzes data for the last month and draws all candlesticks with small" "to define such candlesticks. The candlesticks having the volumes comprising the first InpSmallVolume" "per cent of the array are considered small. The candlesticks having the tick volumes comprising ...
Ahmed Alesawy
21
Ahmed Alesawy  
Egyptian.Smart:

 >>> can you help me please ?

I can not find the equivalent in MQL5 doing sort for ((( string values ))) .... this my code in MQL4 and ArraySort works OK in string values


I solve My Problem by working with ArrayString.mqh file

#include <Arrays\ArrayString.mqh> // put this line at the begin of code after #property lines

void OnTick()
{
      CArrayString *array=new CArrayString; // put this line at the begin of OnTick() or at the begin of OnStart()
.
.
.
      string x[];
      for(int i=0;i<PositionsTotal();i++)
      {
         PositionGetTicket(i);
         array.Insert(PositionGetString(POSITION_SYMBOL),i);
      }
      array.Sort(0);
      for(int i=0;i<PositionsTotal();i++)
      {
         x[i]=array.At(i);
      }
Enrique Dangeroux
449
Enrique Dangeroux  
Egyptian.Smart:

I solve My Problem by working with ArrayString.mqh file


Glad you solved your problem and posted the solution. Thanks!

Ahmed Alesawy
21
Ahmed Alesawy  
Enrique Dangeroux:

https://www.mql5.com/en/docs/array/arraysort

It can not sort based on string according to the docs. 

Maybe this https://www.mql5.com/en/articles/1334 can help you to give Arrays more functionality found in other programming languages.


Thanks for your response ... I found the solution ... and i put it in comments

nicholi shen
2383
nicholi shen  
Egyptian.Smart:

I solve My Problem by working with ArrayString.mqh file


Hi, just a couple of tips when working with the standard library collections... See comments in code.

void OnStart()
{
   //CArrayString *array=new CArrayString; // put this line at the begin of OnTick() or at the begin of OnStart()
   CArrayString array; //Better to statically instantiate so you don't have to remember to delete. 
   string x[]; //You already have a string array object... no point in having two... but leaving it here for demonstration
   for(int i=0;i<PositionsTotal();i++)
   {
      PositionGetTicket(i);
      //array.Insert(PositionGetString(POSITION_SYMBOL),i);
      //Add is safer and quicker. Only use insert when you have to specify the index
      array.Add(PositionGetString(POSITION_SYMBOL));    
   }
   //array.Sort(0);
   array.Sort();
   ArrayResize(x,array.Total());
   //for(int i=0;i<PositionsTotal();i++)
   for(int i=0;i<array.Total();i++)
   {
      //x[i]=array.At(i);

// use the overloaded operator instead

      x[i]=array[i];    } }
Alain Verleyen
38519
Alain Verleyen  
Egyptian.Smart:

I solve My Problem by working with ArrayString.mqh file

There are a lot of ways to code inefficiently. If you are just happy it's working no problem for me, but putting all these strings in an array to sort it, is really time consuming.

May I ask you why you need to sort symbols used on every position ?

mindful FX UG (haftungsbeschraenkt)
281
Cristof Ensslin  
Ahmed Alesawy:

I solve My Problem by working with ArrayString.mqh file

Thanks, this helped me a ton!

mindful FX UG (haftungsbeschraenkt)
281
Cristof Ensslin  
nicholi shen:

Hi, just a couple of tips when working with the standard library collections... See comments in code.

These tips worked like gold for me, thank you!

To add comments, please log in or register