学習ロジック - ページ 15

 
hrenfx:

MQL4では、データそのものに触れることなく、データをソートする必要がある場合があります。MQL4にはポインターはなく、構造体もありません。

別の方法として、配列Positions[][2]を作成し、ゼロインデックスでソートされるパラメータをコピーし、最初のインデックスをPositionsに与える方法があります。そして、標準関数 AgraSort で配列をソートします。

AgraSortは効率的なソート アルゴリズムを使用し、さらにネイティブコードで動作することが利点です。

 
Candid:

あるいは、配列Positions[][2]を作成し、ゼロインデックスでソートするパラメータをコピーして、最初のインデックスをPositionsに与えることもできます。次に、標準の 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;
}