学习逻辑 - 页 15

 
hrenfx:

有时你需要在MQL4中对数据进行排序,而不需要接触数据本身。在MQL4中没有指针,也没有结构。

另一种变体是创建数组Positions[][2],复制要按零索引排序的参数,并将第一个索引给位置。然后用标准函数AgraSort对数组进行排序。

其优点是AgraSort使用了一种 高效的排序算法,此外,它还可以在本地代码中工作。

 
Candid:

或者,你可以创建一个数组Positions[][2],复制要按零索引排序的参数,并将第一个索引给位置。然后用标准的ArguSort函数对数组进行排序。

你能用你的方法转换我在前一页的脚本吗?我不明白这个描述。
 
hrenfx:
你能用你的方法转换我在前一页的脚本吗?我不明白这个描述。

我喜欢https://www.mql5.com/ru/users/candid 所建议的方式。曾经让它变得有点复杂。我将使用一个更简单的。你可以按任何属性进行排序。非常方便。
 
hrenfx:
你能用你的方法转换我在前一页的脚本吗?我不明白这个描述。

我不会给你整个脚本,但我会给你一个函数的草图,它应该足以理解这个想法。

void SortArrayINT( int& Array[], int& Positions[][]) {
  int i, Size = ArraySize(Array);
    
  ArrayResize(Positions, Size);
  
  for (i = 0; i < Size; i++) {
    Positions[i][0] = Array[i];
    Positions[i][1] = i;
  }
  ArraySort(Positions);
  return;
}


现在,Positions[0][1]包含最小的Array元素 的索引,Positions[1][1]包含次大的Array 元素的索引,Positions[i][1]包含第i个元素的索引。

 
Candid:

我不会写整个脚本,但我将给你一个函数的草图,它应该足以理解这个想法。

我不知道在MQL4中使用多维 数组的特殊性。谢谢你,这个方法很有效。

void SortArrayINTCandid( int Array[], int& Positions[][] )
{
  int Size = ArraySize(Array);
    
  ArrayResize(Positions, Size);
  
  for (int i = 0; i < Size; i++)
  {
    Positions[i][0] = Array[i];
    Positions[i][1] = i;
  }

  ArraySort(Positions);

  return;
}

void PrintInfo( string SortName, int Array[] )
{
  int PositionsCandid[][2];
  
  SortArrayINTCandid(Array, PositionsCandid);
  
  Print("Sort by " + SortName);
  Print("SYMBOL   PROFIT   POS   SL");

  for (int i = 0; i < AMOUNT; i++)
    Print(Symbols[PositionsCandid[i][1]] + "   " + Profit[PositionsCandid[i][1]] + "   " +
          Pos[PositionsCandid[i][1]] + "   " + SL[PositionsCandid[i][1]]);
          
  Print("");
          
  return;
}