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

 
A100:

No voy a escribir lo que pueda, por si resulta ser simple y pavlick_ de nuevo

No entiendo su comportamiento.

 
Los comentarios no relacionados con este tema han sido trasladados a "Preguntas de los principiantes de MQL5 MT5 MetaTrader 5".
 
Alexey Navoykov:
Lanzar un puntero no hará nada. No importa cómo lo lances, el objeto es el mismo.

Me corrijo.

 

¿Quién trató de probar en ticks reales, es necesario crear un historial de 1 minuto o se formará sobre la base de ticks descargados(símbolo personalizado)?

De alguna manera no tengo una prueba, he subido siete días de ticks, estoy ejecutando la prueba y esto es lo que aparece en los registros:

2018.12.24 22:04:16.925 Core 1  no data synchronized, 41 bytes read
2018.12.24 22:04:16.925 Core 1  symbol EURUSD_custom synchronization error
2018.12.24 22:04:16.925 Core 1  cannot get history EURUSD_custom,M1
 
forexman77:

¿Quién trató de probar en ticks reales, es necesario crear un historial de 1 minuto o se formará sobre la base de ticks descargados (símbolo personalizado)?

De alguna manera no voy a probar, subió siete días de garrapatas, la ejecución de la prueba es lo que está en los registros:

Hasta ahora.

 

DoubleToString para cálculos de precios "iguales" puede dar resultados diferentes. En este caso DoubleToString puede ser diferente de NormalizeDouble.

#property strict

#define  PRINT(A) Print(#A + " = " + (string)(A))

void OnStart()
{
  const double Koef =  0.25;
  const int iDelta = 32;
  const double point = 0.00001;
  
  const double high = 1.06736;
  const double low = 1.06676;
  
  const double Avg = (high + low) * 0.5;  
  const double Size = (high - low) * Koef * 0.5;
  
  // Вычисление одной и той же цены разной последовательностью сложения одного и того же количества пипсов
  const double Price1 = Avg - Size - point * iDelta;
  const double Price2 = Avg - (Size + point * iDelta);  
  
  PRINT(DoubleToString(Price1, 5));   // DoubleToString(Price1,5) = 1.06666
  PRINT(DoubleToString(Price2, 5));   // DoubleToString(Price2,5) = 1.06667

  PRINT(NormalizeDouble(Price1, 5)); // NormalizeDouble(Price1,5) = 1.06667
  PRINT(NormalizeDouble(Price2, 5)); // NormalizeDouble(Price1,5) = 1.06667
}
 
fxsaber:

DoubleToString para cálculos de precios "iguales" puede dar resultados diferentes. En este caso DoubleToString puede ser diferente de NormalizeDouble.

El comportamiento descrito no es una característica exclusiva del lenguaje MQL5. "Laforma de representar los números reales en la memoria de la máquina está definida por la norma IEEE 754 y es independiente de las plataformas, los sistemas operativos y los lenguajes de programación."
 

Si alguien necesita una plantilla de variable estática no resuelta basada en https://www.mql5.com/ru/forum/1111/page2364#comment_10048274

El problema se resuelve implementando el método en el lugar de la declaración. No es muy bonito, pero funciona.

Ошибки, баги, вопросы
Ошибки, баги, вопросы
  • 2018.12.28
  • www.mql5.com
Общее обсуждение: Ошибки, баги, вопросы
 
Ilya Malev:

Si alguien necesita una plantilla de variable estática no resuelta basada en https://www.mql5.com/ru/forum/1111/page2364#comment_10048274

El problema se resuelve implementando el método en el lugar de la declaración. No es muy bonito, pero funciona.

Tienes una palabra extra estática ahí. No se utiliza fuera de una clase

 
Alexey Navoykov:

Tienes una palabra estática extra en la lista. No se utiliza fuera de la clase.

(cansado) si fuera el problema, habría aparecido el error "'k' - redefinición; modificadores de tipo diferentes", pero no está en la captura de pantalla. Así que el compilador no se preocupa y no es eso.