Características del lenguaje mql5, sutilezas y técnicas - página 40

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

  return(INIT_SUCCEEDED);
}
 

el ejemplo está sacado del puesto de control aleatorio

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

El punto y coma no afecta al resultado de la compilación .... sin errores
 
ruslan:

El punto y coma no afecta al resultado de la compilación .... resultado sin errores

No hay ninguna.
 

La inicialización de variables estáticas mediante la llamada a funciones es una característica no documentada que apareció completamente por accidente, pero que ahora es muy problemática de eliminar.

Se desaconsejan las llamadas a funciones de entorno comercial para inicializar variables estáticas

 
float f = 16777217; // 16777216.0
 
Vladimir Karputov:


No es necesario sacar la frase del contexto. La frase dice así:

Para garantizar la mayor precisión en las pruebas, también se utilizan barras de minutos en el modo de ticks reales. Se utilizan para comprobar y corregir los datos de las garrapatas. También permite evitar la divergencia de los gráficos en el Probador de Estrategias y en el terminal del cliente.

¿Significa esto que el historial de barras de un minuto no se corresponde con las barras de ticks?

¿Cómo es posible... suponiendo que los datos correspondan a un historial 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
}
 
Recomendaciones para medir la velocidad del probador

Realice varias optimizaciones (¡no una!) durante 10 pases (50 sería demasiado). Tenga en cuenta que hay un caché de optimización, así que recompile EA entre las optimizaciones, o cambie los valores de enumeración de parámetros falsos (esto es preferible). Los 2 valores extremos de la parte superior e inferior deben ser descartados. Analice los 6 valores restantes de cada optimización.

No utilice el temporizador de microsegundos para las mediciones de masa. Utiliza el GetTickCount regular de milisegundos. Utiliza un rango de fechas de prueba tan grande que los milisegundos se miden en cientos y miles. Así obtendrá mediciones más precisas y estables

 
fxsaber:
Recomendaciones para medir la velocidad del probador
Olvidaste especificar que el inicio de la medición es al comienzo del primer OnTick. El final de la medición se produce al principio de OnDeinit