Öğrenme mantığı - sayfa 15

 
hrenfx :

Bazen MQL4'teki verileri dokunmadan sıralamaya ihtiyaç vardır. MQL4'te işaretçiler yoktur ve yapılar da yoktur.

Alternatif bir seçenek, bir Konumlar dizisi[][2] oluşturmak, sıralamanın gerekli olduğu parametreyi sıfır dizininde kopyalamak ve ilkini konumlara vermektir. Ardından diziyi standart ArraySort işleviyle sıralayın.

Avantaj - ArraySort verimli bir sıralama algoritması kullanır, ayrıca yerel kodda çalışır.

 
Candid :

Alternatif bir seçenek, bir Konumlar dizisi[][2] oluşturmak, sıralamanın gerekli olduğu parametreyi sıfır dizininde kopyalamak ve ilkini konumlara vermektir. Ardından diziyi standart ArraySort işleviyle sıralayın.

Bir önceki sayfadaki betiğimi kendi yöntemine çevirebilir misin? Açıklamayı anlamadım.
 
hrenfx :
Bir önceki sayfadaki betiğimi kendi yöntemine çevirebilir misin? Açıklamayı anlamadım.

https://www.mql5.com/en/users/candid tarafından önerilen yolu beğendim. Daha önce biraz daha zorlaştırdı. Daha basit bir tane kullanacağım. Bu durumda, herhangi bir işarete göre sıralayabilirsiniz. çok rahat
 
hrenfx :
Bir önceki sayfadaki betiğimi kendi yöntemine çevirebilir misin? Açıklamayı anlamadım.

Tüm senaryo olmayacak, ancak bayanların bir taslağı, bu fikri anlamak için yeterli olmalı

 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 ;
}


Şimdi Konumlar[0][1]'de - Dizi dizisinin en küçük öğesinin dizini, Konumlar[1][1]'de - bir sonraki en büyük öğenin dizini, Konumlar[i][1]'de - dizini i-inci olanı.

 
Candid :

Senaryonun tamamı olmayacak, ancak bayanlar işlevinin bir taslağı, bu fikri anlamak için yeterli olmalı

MQL4'te çok boyutlu dizilerle çalışmanın özelliklerini bilmiyordum. Teşekkürler, yöntem çalışıyor:

 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 ;
}
Neden: