Errores, fallos, preguntas - página 1701

 
pako:
¿Hay peces en los tikes?
Eso es lo que quiero averiguar.
 
fxsaber:
Eso es lo que quiero averiguar.

Sólo tiene sentido probarlo en algunos lmax. E incluso eso es cuestionable.

¿Has probado los volúmenes, el sentimiento, el vidrio? Para mí tiene mejor sabor. Mis operaciones favoritas son las de la cinta y el cristal, pero no encuentro nada parecido en forex.

 
Комбинатор:

Sólo tiene sentido probarlo en algunos lmax. Y eso es dudoso.

¿Has probado los volúmenes, el sentimiento, el vidrio? Para mí tiene mejor sabor. Mi operación favorita es con Ribbon y Gauge, pero no hay nada parecido en forex.

Quiero probar el intercambio. De alguna manera, hasta ahora tengo claro lo que hay que hacer allí. Y no está claro por qué no se hace ni siquiera en forma de indicadores.

Sólo los bichos me retrasan.

 
void OnStart()
  {
//---
   Print("-----------------------------   ");
   Print("DBL_MAX= ", DBL_MAX);
   Print("IntegerToString(int(DBL_MAX) )= ", IntegerToString(int(DBL_MAX) ) );
   Print("IntegerToString(uint(MathAbs(DBL_MAX) ) )= ", IntegerToString(uint(MathAbs(DBL_MAX) ) ) );
  }

Ejecuto un script como este

y obtener

DBL_MAX= 1.797693134862316e+308

IntegerToString(int(DBL_MAX) )= -2147483648

IntegerToString(uint(MathAbs(DBL_MAX) ) )= 0

------

Pregunta: ¿por qué se obtiene un número negativo al convertir un número doble positivo en int?

 
Print("-----------------------------   ");
   Print("DBL_MAX= ", DBL_MAX);
   Print("IntegerToString(int(DBL_MAX) )= ", IntegerToString(int(DBL_MAX) ) );
   Print("IntegerToString(uint(MathAbs(DBL_MAX) ) )= ", IntegerToString(uint(MathAbs(DBL_MAX) ) ) );
   Print("---");
   Print("int(DBL_MAX)= ", int(DBL_MAX) );
   Print("uint(DBL_MAX)= ", uint(DBL_MAX) );
O sea que sigue siendo lo mismo.
 
fxsaber:
He rellenado una solicitud, aunque estoy harto de hacerlo tan a menudo.
Contestación y cierre inmediato

El autor del indicador codificó deliberadamente el enlace hacia sí mismo.

Se puede prohibir este "hack" o dejarlo a la conciencia de quien lo utiliza.

Hasta ahora eres la primera persona a la que se le impide utilizar el terminal por esta característica desde hace varios años.

¿Cuántos indicadores pueden ejecutarse en modo inactivo y no tenemos ni idea de ellos? No hay ningún tipo de control.

No entiendo muy bien el patetismo habitual de tus posts. Está claro que no estamos hablando de un problema masivo o grave.

1) Sólo deliberadamente, conscientemente, se puede escribir un indicador con el comportamiento especificado. ¿Quién te hace escribir ese código y ejecutar ese indicador? ¿O ejecuta otros programas sin conocer su código?

2) No es más malicioso que muchos otros indicadores con errores lógicos menos evidentes.

3) Al reiniciar el terminal, el indicador se descargará y no volverá a arrancar. Si accidentalmente se inicia un indicador de este tipo - reiniciar el terminal. Y no lo vuelvas a hacer.

Debería tener la posibilidad de borrarme (el indicador) en caso de que se lance al menos una copia, aunque tenga diferentes parámetros de entrada. Para ello, tenía que averiguar el propio mango. Desgraciadamente, en ese momento aún no sabía que es imposible en MQL en el 100% de los casos. Por lo tanto, decidí probar un truco no muy inteligente.

He revisado todas las asas. Si coincide con el azar que escribí en mi indicador antes de comprobarlo, significa automáticamente que el mango me pertenece y puedo borrarme, si es necesario.

A partir de estas consideraciones se escribió un código tan inofensivo, que provocó una reacción tan ambigua, pero obviamente negativa, por parte de los desarrolladores. Verás, no puedes hacer eso. ¿Qué has hecho? Bien, leo el valor de mi buffer a través del CopyBuffer. ¿Es ilegal?

Que la comunidad sepa que se puede crear de tal manera una ejecución incontrolable en segundo plano de cualquier código incluso en la terminal sin gráficos. Aquí hay una pequeña puntilla. Considerarlo o no como un error es probablemente una cuestión de terminología. Tengo entendido que los promotores no pueden cambiar nada arquitectónico aquí. Por eso hay tanta rabia. No puedo explicar esta reacción de otra manera.

De todos modos, nadie dirá nada. Dicho rastrillo quedaría bien reflejado en la Ayuda.

 
Если вы случайно запустили такой индикатор - reiniciar el terminal. Y no lo vuelvas a hacer.
No hay forma de saberlo. ¡No hay manera!
 
Dmytro Zelenskyy:
O sigue siendo lo mismo.

El tipo int tiene un tamaño de 4 bytes. El tipo doble tiene un tamaño de 8 bytes. No debe hacer eso - tratar de obtener 4 bytes de 8 bytes - puede terminar con un sinsentido - especialmente en este caso, cuando el valor DBL_MAX se encuentra fuera de los valores int.

Si tomas el número double d=123456.1258 y tratas de obtener int de él - entonces el número funcionará, pero aún así, no puedes hacerlo de esa manera.

 
Karputov Vladimir:

El tipo int tiene un tamaño de 4 bytes. El tipo doble tiene un tamaño de 8 bytes. No debe hacer eso - tratar de obtener 4 bytes de 8 bytes - puede terminar con un sinsentido - especialmente en este caso, cuando el valor DBL_MAX se encuentra fuera de los valores int.

Si tomas el número double d=123456.1258 y tratas de obtener int a partir de él, el número funcionará, pero todavía no puedes hacerlo.

Ok, cómo convertir correctamente double a int con preservación del signo (el número no importa, si se sale del límite entonces se limita a int)

 
Dmytro Zelenskyy:

OK, cómo convertir correctamente double a int con el signo intacto (el número no importa, si está fuera del límite entonces limítalo a int)

int

El tipo entero int tiene un tamaño de 4 bytes (32 bits). El valor mínimo es -2 147 483 648, el valor máximo es 2 147 483 647. Basado en esto,

   int A=(int)2147483647.0;
   int B=(int)2147483646.2;
   int C=(int)2147483647.2;
   int D=(int)2147483648.0;
   Print("A: ",IntegerToString(A),", B: ",IntegerToString(B),", C: ",IntegerToString(C),", D: ",IntegerToString(D));

ver lo que se devuelve:

A: 2147483647, B: 2147483646, C: 2147483647, D: -2147483648

Creo que el principio está claro.