Скачать MetaTrader 5
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
MQL5 Cloud Network ускоряет расчеты. Попробуй сам!
FlairD
11
FlairD 2015.06.19 21:20 

Здравствуйте господа программисты!

Учу MQL4. Столкнулся с проблемой, решить не могу.

Сама проблема вот в чём: есть набор даных состоящих из 2 разных типов даных (string, double). Нужно отсортировать всё по double в порядке спадания.

Кому не сложно подкиньте идею, или может кусок кода.

Vitaly Muzichenko
2492
Vitaly Muzichenko 2015.06.20 09:32  

Вот кусок кода если поможет, здесь сортировал по объему лота, так-как массив string не сортируется от меньшего к большему и наоборот

void ShowLotPos()
 {
  double l[][2];
  string s[][4];
  double lotshift=0;
  long h[];                                         
  int n=0,Charts=0;  
  Charts=ChartGetIDList(h);
  
  for(int i=0; i<Charts; i++)
   {
    if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
     n++;
     lotshift=GetAmountLotFromOpenPos(ChartSymbol(h[i]),OP_BUY,Magic)-GetAmountLotFromOpenPos(ChartSymbol(h[i]),OP_SELL,Magic);
     ArrayResize(l,i+1);
      l[i][0]=lotshift;
      l[i][1]=i;
     ArrayResize(s,i+1);
      s[i][0]=ChartSymbol(h[i]);
      s[i][1]=(string)lotshift;
      s[i][2]=(string)GetAmountLotFromOpenPos(ChartSymbol(h[i]),-1,-1);
      s[i][3]=(string)GetProfitOpenPosInCurrency(ChartSymbol(h[i]),-1,-1);
   }
//-
 if(n>0)
  {
  int on=0;

   for(int i=0; i<n; i++)
    {
     ArraySort(l, i, 0, MODE_ASCEND);
     if((double)s[(int)l[i][1]][2]==0) continue;
      on++;

     SetLabel("Symbol_"+s[(int)l[i][1]][0],
             " "+s[(int)l[i][1]][0],
             ProfitLoss((double)s[(int)l[i][1]][1]),
             (int)ObjectGetInteger(0,"Прибыль позиции BUY",OBJPROP_XDISTANCE,0),
             (int)ObjectGetInteger(0,"Прибыль позиции BUY",OBJPROP_YDISTANCE,0)+5+(14*on),
             2,8,false,"Symbol");
 }}}
FlairD
11
FlairD 2015.06.20 11:56  
MVS:

Вот кусок кода если поможет, здесь сортировал по объему лота, так-как массив string не сортируется от меньшего к большему и наоборот

 

Индикатор RSI считает силу валютных пар. Значение делиться на 10 для представления типа (целые.десятые). Далее значение силы нужно занести в массив вместе с названием валютной пары. Далее нужно отсортировать по спаданию и вывести.

пример:

AUDCAD 5.6

EURUSD 4.4

AUDCHF 3.1

Вот как пробовал я:

int PowerArray[3][2] = {{AUDCADPower,"AUDCAD"},{AUDCHFPower,"AUDCHF"}, {EURUSDPower, "EURUSD"}};
    ArraySort(PowerArray,WHOLE_ARRAY,0,MODE_DESCEND);

Компилятор выдаёт ошибку "constant expression required" и предупреждение "implicit conversion from 'string' to 'number'".

Vasyl Nosal
18209
Vasyl Nosal 2015.06.26 12:45  
MVS:

Вот кусок кода если поможет, здесь сортировал по объему лота, так-как массив string не сортируется от меньшего к большему и наоборот

 

Опять ты кучей кода завалил. Гы гы гы.

 

Mislaid 21.05.2015 03:43 #

У меня несколько иное решение.

Создаем двухмерный массив, например: double Asort[ 4000, 2]

В первое измерение  Asort[ i, 0] = записываем сортируемое значение.

Во второе помещаем ссылку  Asort[ i, 1] = i  это индекс в исходном массиве.

После сортировки, индекс в исходном массиве.узнаем из второго измерения 

/
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий