Merkmale der Sprache mql5, Feinheiten und Techniken - Seite 40

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

  return(INIT_SUCCEEDED);
}
 

das Beispiel stammt aus dem Beitrag Zufällige Prüfung

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

Semikolons haben keinen Einfluss auf das Kompilierungsergebnis .... keine Fehler
 
Ruslan:

Semikolons haben keinen Einfluss auf das Kompilierungsergebnis .... Ergebnis ohne Fehler

Es gibt keine.
 

Die Initialisierung statischer Variablen durch den Aufruf von Funktionen ist eine undokumentierte Funktion, die völlig zufällig aufgetaucht ist, deren Beseitigung jetzt aber sehr problematisch ist.

Von Aufrufen von Funktionen der Handelsumgebung zur Initialisierung statischer Variablen wird dringend abgeraten

 
float f = 16777217; // 16777216.0
 
Wladimir Karputow:


Es gibt keinen Grund, den Satz aus dem Zusammenhang zu reißen. Die Redewendung lautet wie folgt:

Um die größtmögliche Genauigkeit bei den Tests zu gewährleisten, werden im Real-Tick-Modus auch Minutenbalken verwendet. Diese werden zur Überprüfung und Korrektur von Zeckendaten verwendet. Sie ermöglicht es auch, Divergenzen zwischen den Charts im Strategy Tester und im Client-Terminal zu vermeiden.

Bedeutet dies, dass die Historie der Ein-Minuten-Balken nicht den Tick-Balken entspricht?

Wie ist das möglich ... wenn man davon ausgeht, dass die Daten dem realen Handelsverlauf entsprechen?

 
#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
}
 
Empfehlungen für die Messung der Geschwindigkeit des Prüfgeräts

Führen Sie mehrere Optimierungen (nicht eine!) für 10 Durchgänge durch (50 wären zu viel). Denken Sie daran, dass es einen Optimierungscache gibt, kompilieren Sie also entweder EA zwischen den Optimierungen neu oder ändern Sie die Werte der gefälschten Parameteraufzählung (dies ist vorzuziehen). Die beiden Extremwerte am oberen und unteren Rand sollten verworfen werden. Analysieren Sie die verbleibenden 6 Werte aus jeder Optimierung.

Verwenden Sie keinen Mikrosekunden-Timer für Massenmessungen. Verwenden Sie die reguläre Millisekunde GetTickCount. Verwenden Sie einen so großen Bereich von Testdaten, dass die Millisekunden in Hunderten und Tausenden gemessen werden. Dann erhalten Sie genauere und stabilere Messungen.

 
fxsaber:
Empfehlungen für die Messung der Geschwindigkeit des Prüfgeräts
Sie haben vergessen anzugeben, dass der Beginn der Messung am Anfang des ersten OnTick liegt. Das Ende der Messung ist am Anfang von OnDeinit