Características da linguagem mql5, subtilezas e técnicas - página 40

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

  return(INIT_SUCCEEDED);
}
 

o exemplo é retirado da verificação aleatória do correio

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

os ponto e vírgula não afetam o resultado da compilação .... nenhum erro
 
Ruslan:

os ponto e vírgula não afetam o resultado da compilação .... resultado sem erros

Não há nenhuma.
 

A inicialização de variáveis estáticas através da chamada de funções é um recurso não documentado que apareceu completamente por acidente, mas que agora é muito problemático de remover.

As chamadas às funções do ambiente de negociação para rubricar variáveis estáticas são fortemente desencorajadas

 
float f = 16777217; // 16777216.0
 
Vladimir Karputov:


Não há necessidade de retirar a frase do contexto. A frase é assim:

Para garantir a maior precisão nos testes, também são usadas barras minúsculas no modo de carrapato real. Estes são usados para verificar e corrigir os dados das carraças. Também permite evitar divergências de gráficos no Testador de Estratégia e no terminal do cliente.

Isto significa que a história das barras de um minuto não corresponde a barras de carrapato?

Como é possível ... assumindo que os dados correspondem ao histórico comercial real?

 
#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
}
 
Recomendações para medir a velocidade do testador

Execute várias otimizações (não uma!) para 10 passes (50 seria demais). Tenha em mente que há um cache de otimização, portanto recompile EA entre otimizações, ou altere valores falsos de enumeração de parâmetros (isso é preferível). Os 2 valores extremos na parte superior e inferior devem ser descartados. Analisar os 6 valores restantes de cada otimização.

Não utilize temporizador de microssegundos para medições de massa. Use o GetTickCount em milissegundos. Use uma gama tão grande de datas de teste que milissegundos são medidos em centenas e milhares. Então você terá medidas mais precisas e estáveis.

 
fxsaber:
Recomendações para medir a velocidade do testador
Você esqueceu de especificar que o início da medição é no início do primeiro OnTick. O fim da medição está no início do OnDeinit