Preguntas de un "tonto" - página 69

 
rlx:

Todo se convierte correctamente sin errores

En la sección"MQL5 Reference / Language Basics / Data Types / Type conversion", se mencionan dos cosas:

1) La conversión largo=>doble puede llevar a la pérdida de precisión;

2) se permite el tipo datetime en lugar de long (ocupan 8 bytes).

He llegado a la conclusión de que, en el mejor de los casos, la conversión datetime =>double también puede conducir a la pérdida de precisión. Pero no puedo dar un ejemplo.

rlx:

Por qué no almacenar datetime en buffers indic......or de tipo double

Se añaden muchos puntos, o aparece algún tipo de referencia.

Es más fácil poner un espacio extra entre las dos palabras: "topes indicadores" (dos espacios).

 
Yedelkin:

En la sección"MQL5 Reference Guide / Language Basics / Data Types / Type conversion ", se mencionan dos cosas:

1) La conversión largo=>doble puede llevar a la pérdida de precisión;

2) se permite el tipo datetime en lugar del tipo long (ocupan 8 bytes cada uno).

He llegado a la conclusión de que, en el mejor de los casos, la conversión datetime =>double también puede conducir a la pérdida de precisión. Pero no puedo dar un ejemplo.

Es más fácil poner un espacio extra entre dos palabras: "topes indicadores" (dos espacios).

Escriba una sencilla prueba de conversión y lo comprobará por sí mismo. Y puedes contárnoslo a los demás después.

 
Vladix:

Escriba una sencilla prueba de transformación y lo comprobará por sí mismo. Y puedes decírselo a todos los demás después.

¿Tiene una respuesta sustantiva?

Una "simple prueba de conversión" ya ha sido dada por rlx. Parece que funciona correctamente. Las dudas basadas en el material de referencia se exponen más arriba. Si hay un ejemplo de conversión incorrecta de datetime =>double, por favor pregunte.

 
Yedelkin:

¿Hay una respuesta sustantiva?

Una "simple prueba de conversión" ya ha sido dadapor rlx. Parece que funciona correctamente. Las dudas basadas en el material de referencia se exponen más arriba. Si hay un ejemplo de conversión incorrecta de datetime =>double, por favor envíemelo.

void OnStart()
  {   
   double vDbl = 1.7976931348623158 e+308;
   datetime vTime = (datetime)vDbl;
   
   Print((double)vTime);  
  }

2011.09.25 16:24:38 test (EURUSD,H1) -9.223372036854776e+018

Este es un ejemplo de cuándo pueden surgir problemas, pero definitivamente no es su caso

 
Vladix:

2011.09.25 16:24:38 test (EURUSD,H1) -9.223372036854776e+018

Este es un ejemplo de cuándo pueden surgir problemas, pero definitivamente no es su caso

¡Felicidades! ¡Vive y aprende!
 
Vladix:

2011.09.25 16:24:38 test (EURUSD,H1) -9.223372036854776e+018

Este es un ejemplo de cuando podría haber un problema, pero definitivamente no es su caso

No es un ejemplo muy correcto, ya que el tonto dice polla de cristal durante 20 minutos (no se trata de ti sino de los que lo van a utilizar)

El valor actual de la fecha es 1316816136 esos 10 dígitos, son 40 años, la mantisa doble tiene 16 dígitos,

por lo que el desbordamiento del doble de mantis y la subsiguiente conversión incorrecta de datetime a doble se producirá en 6*40=240 años.

Creo que tendremos tiempo de usarlo.

 
Yedelkin:
¡Spa! ¡Se vive y se aprende mucho tiempo!

Ahora he reunido un ejemplo sólo para ti. El resultado es el siguiente:

el tipo de fecha está definido hasta el 31.12.3000 23:59:59, es32535215999

el tipo doble está definido hasta1,7976931348623158e+308

Resulta que al convertir el máximo valor posible de datetime a double, todavía hay margen permitido en el número de dígitos significativos.

Por lo tanto, la conclusión es que funcionará correctamente en todos los casos.

Urain:

No es un ejemplo muy correcto, ya que se dice a un tonto con la polla de cristal durante 20 minutos.

No es una buena analogía.

Es sólo un ejemplo de la necesidad de comprobar los valores límite de los valores cuando se dan los tipos, sólo como una nota lateral. Pero, de nuevo, este no es el caso.

 

Los cálculos anteriores no los hice correctamente, más precisamente aquí: se utilizan 15 dígitos, porque si el 16 está presente, hay un error de conversión

   long i,l;double d;
   for(i=0;i<999999999999999;i+=365*86400){d=(double)i;l=(long)d;if(i!=l)break;}
   Print("до ",(1970+i/(365*86400))," года datetime в double преобразуется верно");

hasta 31711762 año datetime a doble se convierte correctamente

Así que dormimos bien hasta los 31 millones de años.

 

Llamada a funciones importadas de la biblioteca ex5.

Por favor, explique. Leer https://www.mql5.com/ru/docs/runtime/imports

Las bibliotecas del sistema (DLL) se cargan según las reglas del sistema operativo. Si la biblioteca ya está cargada (por ejemplo, por otro Asesor Experto e incluso desde otro terminal cliente que se ejecuta en paralelo), la llamada va a la biblioteca ya cargada.

¿Cómo se cargan las librerías ex5?Si la librería ya está cargada (por ejemplo, por otro Asesor Experto, e incluso desde otro terminal cliente, ejecutándose en paralelo),

Para la prueba, he creado la biblioteca

lib.mq5.

#property library
int      i=0;

int Get(void) export {return(i++);}

Compilado lib.mq5 en lib.ex5

Creación de un Asesor Experto

experto.mq5

#import "lib.ex5"
  int Get(void);
#import
void OnTick()
  {
   Print(Get());
  }

Lo compiló.

Puse el Asesor Experto en EURUSD.

Imprime

0

1

2

3

4

5

Poner un Asesor Experto (opcional) en GBPUSD

Imprime

6 --- del Asesor Experto en EURUSD

0 --- de GBPUSD Expert Advisor.

7 --- del Asesor Experto en EURUSD

1 --- del asesor de GBPUSD.

8 --- del asesor de EURUSD

2 --- del asesor de GBPUSD.

Es decir, se descarga otra copia de la biblioteca lib.ex5 para el Asesor Experto GBPUSD.

¿Alguien sabe cómo imprimir

6 --- del Asesor Experto en EURUSD

7 --- de GBPUSD Expert Advisor.

8 --- del Asesor Experto en EURUSD.

9 --- del asesor de GBPUSD.

10 --- Asesor de EURUSD

11 --- del asesor de GBPUSD.

Sólo utilizando las capacidades de MT5

PD// O tal vez tenga que conectar la biblioteca de una manera especial.

///// Es decir, necesito que esta biblioteca ex5 se cargue una vez.

Документация по MQL5: Программы MQL5 / Вызов импортируемых функций
Документация по MQL5: Программы MQL5 / Вызов импортируемых функций
  • www.mql5.com
Программы MQL5 / Вызов импортируемых функций - Документация по MQL5
 

Hola. Podría decirme, por favor. ¿Por qué las órdenes y las operaciones tienen un ticket pero las posiciones no?

¿Y cuál es la diferencia entre un billete y un identificador?