Caratteristiche del linguaggio mql5, sottigliezze e tecniche - pagina 40

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

  return(INIT_SUCCEEDED);
}
 

l'esempio è preso dal controllo del post a caso

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

I punti e virgola non influenzano il risultato della compilazione .... nessun errore
 
ruslan:

I punti e virgola non influenzano il risultato della compilazione .... risultato senza errori

Non ce ne sono.
 

L'inizializzazione di variabili statiche chiamando funzioni è una caratteristica non documentata che è apparsa completamente per caso, ma che ora è molto problematica da rimuovere.

Le chiamate alle funzioni dell'ambiente commerciale per inizializzare le variabili statiche sono fortemente scoraggiate

 
float f = 16777217; // 16777216.0
 
Vladimir Karputov:


Non c'è bisogno di togliere la frase dal contesto. La frase dice così:

Per garantire la massima precisione nei test, le barre dei minuti vengono utilizzate anche in modalità real tick. Questi sono usati per controllare e correggere i dati delle zecche. Permette anche di evitare la divergenza dei grafici nello Strategy Tester e nel terminale client.

Questo significa che la storia delle barre di un minuto non corrisponde alle barre di tick?

Come è possibile ... supponendo che i dati corrispondano alla storia reale del trading?

 
#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
}
 
Raccomandazioni per misurare la velocità del tester

Eseguite diverse ottimizzazioni (non una!) per 10 passaggi (50 sarebbe troppo). Tenete a mente che c'è una cache di ottimizzazione, quindi o ricompilate EA tra le ottimizzazioni, o cambiate i valori di enumerazione dei parametri falsi (questo è preferibile). I 2 valori estremi in alto e in basso dovrebbero essere scartati. Analizza i 6 valori rimanenti di ogni ottimizzazione.

Non usare il timer a microsecondi per le misure di massa. Usa il normale millisecondo GetTickCount. Usare una gamma così ampia di date di prova che i millisecondi si misurano in centinaia e migliaia. Allora otterrete misurazioni più precise e stabili.

 
fxsaber:
Raccomandazioni per misurare la velocità del tester
Hai dimenticato di specificare che l'inizio della misurazione è all'inizio del primo OnTick. La fine della misurazione è all'inizio di OnDeinit
Motivazione: