English

How can I fix this problem with arraysort?

 164 DottorMarket 2014.11.03 11:35   Hello to everyone! I don't know how to solve this problem.... ```void CreateIndi()   {    string  Valuta;    double  Apertura,Prezzo,Percent;    int     B=0,Divisore=1;    double  Percentuale[];    double  NumeroValuta[];       ArrayResize(Percentuale,SymbolsTotal(StrumentiWatchList));    ArrayResize(NumeroValuta,SymbolsTotal(StrumentiWatchList)); // ???????    for(int i=0; SymbolsTotal(StrumentiWatchList)>i; i++)      {       RefreshRates();       Valuta           = SymbolName(i,StrumentiWatchList);       Apertura         = iOpen(Valuta,PERIOD_D1,GiorniIndietro);       Prezzo           = iClose(Valuta,PERIOD_D1,GiorniIndietro);       Percent          = ((Prezzo - Apertura)/Apertura)*100;       Percentuale[i]   = Percent; NumeroValuta[i] = i; // ?????       if(MarketInfo(Valuta,MODE_PROFITCALCMODE)==0) Divisore=10;       else Divisore=1;      }    ArraySort(Percentuale,WHOLE_ARRAY,0,MODE_DESCEND); // The problem is here, infact I lose data "valuta"    for(B=0; SymbolsTotal(StrumentiWatchList)>B; B++)      {       if(Percentuale[B]>Signal)         {          ObjectCreate("PerValuta"+(string)B,OBJ_LABEL,0,0,0);          ObjectSet("PerValuta"+(string)B,OBJPROP_CORNER,CORNER_LEFT_UPPER);          ObjectSet("PerValuta"+(string)B,OBJPROP_YDISTANCE,(15*B)+40);          ObjectSet("PerValuta"+(string)B,OBJPROP_XDISTANCE,10);          ObjectSet("PerValuta"+(string)B,OBJPROP_HIDDEN,True);          ObjectSet("PerValuta"+(string)B,OBJPROP_SELECTABLE,false);          ObjectSetText("PerValuta"+(string)B,(string)NumeroValuta[B],8,"Calibri",clrBlack);// ??????          WindowRedraw();          ObjectCreate("PerValore"+(string)B,OBJ_LABEL,0,0,0);          ObjectSet("PerValore"+(string)B,OBJPROP_CORNER,CORNER_LEFT_UPPER);          ObjectSet("PerValore"+(string)B,OBJPROP_YDISTANCE,(15*B)+40);          ObjectSet("PerValore"+(string)B,OBJPROP_XDISTANCE,65+25);          ObjectSet("PerValore"+(string)B,OBJPROP_HIDDEN,True);          ObjectSet("PerValore"+(string)B,OBJPROP_SELECTABLE,false);          ObjectSetText("PerValore"+(string)B,DoubleToStr(Percentuale[B],2)+" %",8,"Calibri",clrGreen);          WindowRedraw();         }      }   }```  The main problem is that data "Percentuale" is sorted in descending order but the currency names are wrong... How can I solve?Thanks
 253 ffoorr 2014.11.03 14:10 #   hi dottormarket, just add a value so the name of object will be different :```   string instrument[]; int size_inst = ArrayResize(instrument,SymbolsTotal(true) ); // ??????? for(B=0; BSignal) { ObjectCreate("PerValuta"+instrument[B],OBJ_LABEL,0,0,0); ObjectSet ("PerValuta"+instrument[B],OBJPROP_CORNER,CORNER_LEFT_UPPER); ObjectSet ("PerValuta"+instrument[B],OBJPROP_YDISTANCE,(15*B)+40); ObjectSet ("PerValuta"+instrument[B],OBJPROP_XDISTANCE,10); ObjectSet ("PerValuta"+instrument[B],OBJPROP_HIDDEN,True); ObjectSet ("PerValuta"+instrument[B],OBJPROP_SELECTABLE,false); ObjectSetText("PerValuta"+instrument[B],""+ instrument[B]+" "+(string)NumeroValuta[B],8,"Calibri",clrBlack);// ?????? WindowRedraw();       }  }```
 13130 WHRoeder 2014.11.03 15:29 #   DottorMarket:  The main problem is that data "Percentuale" is sorted in descending order but the currency names are wrong...```      Percentuale[i]   = Percent; NumeroValuta[i] = i; // ????? ArraySort(Percentuale,WHOLE_ARRAY,0,MODE_DESCEND); // The problem is here, infact I lose data "valuta" ``` The moment you sort Percentuale, there is no longer a connection to NumeroValuta and the symbol. Either don't sort as suggested by ffoorr, or you must keep the connection via a 2d array:```#define Percentuale  0 #define NumeroValuta 1 #define COUNT     2 double  Array[][COUNT];       ArrayResize(Array,SymbolsTotal(StrumentiWatchList));    for(int i=0; SymbolsTotal(StrumentiWatchList)>i; i++){       :       Array[i][Percentuale]   = Percent;       Array[i][NumeroValuta]  = i;      }    ArraySort(Array,WHOLE_ARRAY,0,MODE_DESCEND);    for(B=0; SymbolsTotal(StrumentiWatchList)>B; B++)      {       if(Array[B][Percentuale]>Signal)         { int iSymbol = Array[B][NumeroValuta]          string Instrument = SymbolName(iSymbol,true);          ObjectCreate("PerValuta"+Instrument,OBJ_LABEL,0,0,0); : ```
 253 ffoorr 2014.11.03 17:09 #   You where right WHRoeder, I have followed your code line, but nothing  show up in the window, maybe someone will be more lucky : ```   #define Percentuale  0 #define NumeroValuta 1 #define COUNT     2   double  Array[][2]; int  CreateIndi_2()   {    double  open,close,pourcent;int B=0;    double Signal = 0.5;    int    Divisore[];    string symb[];    ObjectsDeleteAll();    string Instrument;            int size_arr =   ArrayResize(Array,SymbolsTotal(true));          int size_ins =   ArrayResize(symb,SymbolsTotal(true));           int size_div  =   ArrayResize( Divisore,SymbolsTotal(true));      for(int i=0; iSignal)                             //    {                                                              int    iSymbol    = (int) Array[B][NumeroValuta];           Instrument = SymbolName(iSymbol,true);                   ObjectCreate("PerValuta2"+Instrument,OBJ_LABEL,0,0,0);          ObjectSet   ("PerValuta2"+Instrument,OBJPROP_CORNER,CORNER_LEFT_UPPER);          ObjectSet   ("PerValuta2"+Instrument,OBJPROP_YDISTANCE,(15*B)+20);          ObjectSet   ("PerValuta2"+Instrument,OBJPROP_XDISTANCE,10);          ObjectSet   ("PerValuta2"+Instrument,OBJPROP_HIDDEN,True);          ObjectSet   ("PerValuta2"+Instrument,OBJPROP_SELECTABLE,false);         ObjectSetText("PerValuta2"+Instrument,"ooo"+Instrument+"    "+(string)Array[B][NumeroValuta],8,"Calibri",clrYellow);// ??????          WindowRedraw();               ObjectCreate("PerValore2"+Instrument,OBJ_LABEL,0,0,0);          ObjectSet   ("PerValore2"+Instrument,OBJPROP_CORNER,CORNER_LEFT_UPPER);          ObjectSet   ("PerValore2"+Instrument,OBJPROP_YDISTANCE,(15*B)+20);          ObjectSet   ("PerValore2"+Instrument,OBJPROP_XDISTANCE,125);          ObjectSet   ("PerValore2"+Instrument,OBJPROP_HIDDEN,True);          ObjectSet   ("PerValore2"+Instrument,OBJPROP_SELECTABLE,false);         ObjectSetText("PerValore2"+Instrument,"ooo"+DoubleToStr(Array[B][Percentuale],2)+" %",8,"Calibri",clrLime);          WindowRedraw();      //  }      } return( 0 );   } //============================================================================ ```
 164 DottorMarket 2014.11.03 23:52 #   Thanks guys!!!A very great solution... It works perfectly! Doc
 164 DottorMarket 2015.01.04 19:47 #   hello and H.N. year =)) The code posted by ffoorr is perfect but there is a new problem if I impose strict mode.  When I impose strict mode the compiler returns "array out of range" in... etc etc how can I fix this problem? :(  thanks Alfredo
 164 DottorMarket 2015.01.05 16:04 #   nothing?
13130
WHRoeder 2015.01.05 17:52 #

 DottorMarket: returns "array out of range" in...DottorMarket: nothing? "Doesn't work" is meaningless - just like saying the car doesn't work. Doesn't start, won't go in gear, no electrical, missing the key, flat tires - meaningless. There are no mind readers here. How should we know, You don't post what array, what line, what the variable values were. There are no mind readers here.