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

 
// Возвращает текущее количество объектов классов
int GetAmountObjects( void )
{
   const class CLASS_TMP {} Tmp;
  
   return (( int ):: StringFormat ( "%d" , &Tmp) - 1 );
}
Uygulama örneği
 int OnInit ()
{
   if (GetAmountObjects() > 0 )
     Print ( "До " + __FUNCSIG__ + " были вызваны конструкторы!" );

   return ( INIT_SUCCEEDED );
}
 

gönderiden alınan örnek rastgele kontrol

 void OnStart ()
{
   string Str = "1.23qwedfg" ;
  
   Print (( int )Str);;;;;;;
   Print (( double )Str);;;
}

noktalı virgül derleme sonucunu etkilemez .... hatasız sonuç
 
ruslan :

noktalı virgül derleme sonucunu etkilemez .... hatasız sonuç

Onlar değil.
 

Statik değişkenleri işlev çağrılarıyla başlatmak, tamamen tesadüfen ortaya çıkan, ancak artık kaldırılması çok sorunlu olan belgelenmemiş bir özelliktir.

Statik değişkenleri başlatmak için ticaret ortamının işlevlerini çağırmak kesinlikle önerilmez.

 
float f = 16777217; // 16777216.0
 
Vladimir Karputov :


Cümleyi bağlamdan çıkarmaya gerek yok. İfade şöyle gider:

Test sırasında en yüksek doğruluğu sağlamak için dakika çubukları gerçek tıklama modunda da kullanılır. Kene verilerini kontrol etmek ve düzeltmek için kullanılırlar. Ayrıca, test cihazındaki ve istemci terminalindeki çizelgeler arasındaki tutarsızlığın önlenmesine yardımcı olur.

bu, dakika çubuklarının geçmişinin kene ile eşleşmediği anlamına mı geliyor?

ve bu nasıl mümkün olabilir... verilerin gerçek ticaret geçmişiyle eşleştiğini varsayarsak?

 
#define DEFINE_TOSTRING(A) string ToString( const A Var ) { return((string)Var); }
  DEFINE_TOSTRING(char)
  DEFINE_TOSTRING(short)
  DEFINE_TOSTRING(int)
  DEFINE_TOSTRING(long)
  
  DEFINE_TOSTRING(uchar)
  DEFINE_TOSTRING(ushort)
  DEFINE_TOSTRING(uint)
  DEFINE_TOSTRING(ulong)
  
  DEFINE_TOSTRING(bool)
  
  DEFINE_TOSTRING(string)
  
  DEFINE_TOSTRING(double)
  DEFINE_TOSTRING(float)

  DEFINE_TOSTRING(color)  
  
  DEFINE_TOSTRING(datetime)  
#undef DEFINE_TOSTRING

template <typename T>
string ToString( const T Var ) { return(::EnumToString(Var)); }

void OnStart()
{
  Print(ToString(1));
  Print(ToString(clrRed));
  Print(ToString(TimeCurrent()));
  Print(ToString(ACCOUNT_LOGIN));
}
 
template <typename T>
class IS
{
public:
  template <typename T1>
  static bool Object( const T1* Ptr )
  {
    return(dynamic_cast<const T*>(Ptr) != NULL);
  }
};

class CLASS1 {};
class CLASS2 : public CLASS1 {};
class CLASS3 : public CLASS1 {};

void OnStart()
{
  CLASS2 Object;
  CLASS1* Ptr = &Object;
  
  Print(IS<CLASS1>::Object(Ptr)); // true - Ptr указывает на объект класса CLASS1
  Print(IS<CLASS2>::Object(Ptr)); // true - Ptr указывает на объект класса CLASS2
  Print(IS<CLASS3>::Object(Ptr)); // false - Ptr НЕ указывает на объект класса CLASS3
}
 
Test cihazı yürütme hızını ölçmek için öneriler

10 geçiş (50 çok fazla) için birkaç optimizasyon (yalnızca bir değil!) çalıştırın. Bir optimizasyon önbelleği olduğunu unutmayın, bu nedenle optimizasyonlar arasında EA'yı yeniden derleyin veya sahte parametre yinelemesinin değerlerini değiştirin (bu tercih edilir). Yukarıdan ve aşağıdan 2 aşırı değeri atın. Her optimizasyondan kalan 6 değeri analiz edin.

Toplu ölçümler için mikrosaniye zamanlayıcıyı kullanmayın. Normal milisaniye GetTickCount'u kullanın. Milisaniyelerin yüzlerce ve binlerce olarak ölçüldüğü çok geniş bir test tarihi aralığı kullanın. Ardından daha doğru ve kararlı bir ölçüm sonucu elde edin.

 
fxsaber :
Test cihazı yürütme hızını ölçmek için öneriler
Örnekleme başlangıcının ilk OnTick'in başında olduğunu belirtmeyi unuttunuz. Ölçümün sonu - OnDeinit'in başında