Mql5 dilinin özellikleri, incelikleri ve çalışma yöntemleri - sayfa 183

 
Denis Kirichenko :

Meslektaşlarım, mümkünse bir makro oluşturmaya yardımcı olmanızı rica ediyorum.

İki boyutlu bir diziyi dinamik olarak bildirmeniz gerekir. Ayrıca ikinci boyutun da değiştirilmesi gerekiyor. Bu döngü gibi:

Ancak bu durumda derleyici yemin eder:

Şuna benzer bir makro görmek istiyorum:

Bir satır yerine:

Teşekkür ederim.

Bir dizi yapı kullanıyorum, kopyalama dahil her şey çalışıyor

https://www.mql5.com/ru/forum/85652/page46#comment_15990662

girerken alan adlarını yazmanız gereken tek şey, ama bana yakışıyor

 
Uzman Danışmanlarda statik değişkenleri/dizileri (const dahil) acilen sıfırlamanız gerekiyorsa, yeniden oturum açmanız yeterlidir.
 
fxsaber :
Uzman Danışmanlarda statik değişkenleri/dizileri (const dahil) acilen sıfırlamanız gerekiyorsa, yeniden oturum açmanız yeterlidir.

TÜM statik değişkenleri sıfırlamaya ihtiyaç varsa (kendisinin sabit olarak bildirdikleri dahil), proje mimarisini değiştirmeniz gerekir). tabii ki IMHO.

 

Yerine ne koyacağımı söyler misin ???? çalışmasını sağlamak için. teşekkürler

 template < typename T, ?????>
void sortArray(T &_array[], ?????) {
   T array;
//---Sort Signals by Time
   for ( int i = 0 ; i < ArraySize (_array); i++) {
      array = _array[i];
       for ( int a = 1 ; a <= i; a++) {
         
             if (_array[i].????? < _array[a - 1 ].?????) {
               for ( int b = i; b >= a; b--) {
                  _array[b] = _array[b - 1 ];
               }
               _array[a - 1 ] = array;
               break ;
            }
 

   return ;
}

Dizinin kontrol edileceği sınıf üyesinin adını bir şekilde fonksiyona söylemek gerekir.

 
Georgiy Liashchenko :

Yerine ne koyacağımı söyler misin ???? çalışmasını sağlamak için. teşekkürler

Dizinin kontrol edileceği sınıf üyesinin adını bir şekilde fonksiyona söylemek gerekir.

Bu seçenek:

 struct MyStruct
{
   double a;
   double b;
};

typedef bool (*FuncLess)( const MyStruct&, const MyStruct& );


bool LessA( const MyStruct& struct1, const MyStruct& struct2 )
{
   return struct1.a < struct2.a;
}

bool LessB( const MyStruct& struct1, const MyStruct& struct2 )
{
   return struct1.b < struct2.b;
}

template < typename T, typename FuncType >
void sortArray( T& _array[], FuncType func )
{
   T array;
//---Sort Signals by Time
   for ( int i = 0 ; i < ArraySize ( _array ); i++ )
   {
      array = _array[i];
       for ( int a = 1 ; a <= i; a++ )
      {
         if ( func( _array[i], _array[a - 1 ] ) )
         {
             for ( int b = i; b >= a; b-- )
            {
               _array[b] = _array[b - 1 ];
            }
            _array[a - 1 ] = array;
             break ;
         }
      }
   }
   return ;
}

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart ()
{
   MyStruct structArray[ 25 ];
   
   for ( int i = 0 ; i < 25 ; i++ )
   {
      structArray[i].a = rand ();
      structArray[i].b = rand ();
   }
   
   sortArray< MyStruct, FuncLess >( structArray, LessA );
   
   for ( int i = 0 ; i < 25 ; i++ )
   {
       PrintFormat ( "1: structArray[%i] = %f %f" , i, structArray[i].a, structArray[i].b );
   }
   
   sortArray< MyStruct, FuncLess >( structArray, LessB );
   
   for ( int i = 0 ; i < 25 ; i++ )
   {
       PrintFormat ( "2: structArray[%i] = %f %f" , i, structArray[i].a, structArray[i].b );
   }
}
 
Koldun Zloy :

Bu seçenek:

Teşekkürler, ilginç bir seçenek. Ancak, tam olarak aradığım şey değil. Kodu doğru anladıysam, o zaman sıralama işlevini sağa geçiriyorsunuz, ancak zaten içindeki yapının üyelerini yazıyorsunuz. Yani, farklı bir üye adına sahip başka bir üyeye veya başka bir nesneye göre sıralamam gerekirse, her durum için ayrı bir işlev oluşturmam gerekir. Ne yazık ki, bu çok optimal değil. Ancak kalınacak bir yer var) aramaya devam ediyorum

js'de benzer bir şey var, ancak üyelerle bu işlev hemen sıralama satırına yazılır ve daha çok basit ayarlanmış parametrelere benziyor, bu da bir kod yığınına yol açmaz. Evrensel bir seçenek arıyorum, ancak yeterli bilgi yok. Belki bu, bazı işaretçiler veya haritalama yoluyla yapılır, lütfen yardım edin

Документация по MQL5: Основы языка / Типы данных / Структуры, классы и интерфейсы
Документация по MQL5: Основы языка / Типы данных / Структуры, классы и интерфейсы
  • www.mql5.com
Структура является набором элементов произвольного типа (кроме типа void). Таким образом, структура объединяет логически связанные данные разных типов. Объявление структуры Имя структуры нельзя использовать в качестве идентификатора (имени переменной или функции). Следует иметь ввиду, что в MQL5 элементы структуры следуют непосредственно друг...
 
Georgiy Liashchenko :

Yerine ne koyacağımı söyler misin ???? çalışmasını sağlamak için. teşekkürler

Dizinin kontrol edileceği sınıf üyesinin adını bir şekilde fonksiyona söylemek gerekir.

Forum evrensel bir çözüm yayınladı. Bulmak gerek.

 
fxsaber :

Forum evrensel bir çözüm yayınladı. Bulmak gerek.

En azından hangi bölümde olduğunu hatırlıyor musun? Samanlıkta iğne aramak gibi)
 
Georgiy Liashchenko :
En azından hangi bölümde olduğunu hatırlıyor musun? Samanlıkta iğne aramak gibi)

Sadece iki ay önce olduğunu hatırlıyorum.

 
Georgiy Liashchenko :

Teşekkürler, ilginç bir seçenek. Ancak, tam olarak aradığım şey değil. Kodu doğru anladıysam, o zaman sıralama işlevini sağa geçiriyorsunuz, ancak zaten içindeki yapının üyelerini yazıyorsunuz. Yani, farklı bir üye adına sahip başka bir üyeye veya başka bir nesneye göre sıralamam gerekirse, her durum için ayrı bir işlev oluşturmam gerekir. Ne yazık ki, bu çok optimal değil. Ancak kalınacak bir yer var) aramaya devam ediyorum

js'de benzer bir şey var, ancak üyelerle bu işlev hemen sıralama satırına yazılır ve daha çok basit ayarlanmış parametrelere benziyor, bu da bir kod yığınına yol açmaz. Evrensel bir seçenek arıyorum, ancak yeterli bilgi yok. Belki bu, bazı işaretçiler veya haritalama yoluyla yapılır, lütfen yardım edin

Aslında, bu optimaldir. Ve daha karmaşık sıralama koşulları belirlemenizi sağlar.

Örneğin:

 struct MyStruct
{
   int A;
   int B;
   int C;
};

bool Less( const MyStruct& struct1, const MyStruct& struct2 )
{
   if ( struct1.A != struct2.A ){
       return struct1.A < struct2.A;
   }
   if ( struct1.B != struct2.B ){
       return struct1.B < struct2.B;
   }
   return struct1.C < struct2.C;
}

Ve hala başka bir çözüm yok.

Neden: