Discusión sobre la documentación de MQL4 - página 16

 
Yurixx:

Y agradecería que se dijera claramente cuándo es necesaria la doble normalización.

Exactamente, aquí hay un evidente malentendido. La ayuda de esta función da un ejemplo en el que esta función es completamente inútil:

double NormalizeDouble( valor doble, dígitos int)
Redondea el valor de punto flotante a la precisión dada. Devuelve el valor normalizado del tipo double.
Los valores calculados de StopLoss y TakeProfit, así como el precio abierto de las órdenes pendientes deben ser normalizados con una precisión cuyo valor se almacena en la variable predefinida de Dígitos.
Parámetros:
valor - Valor en coma flotante.
dígitos - Formato de precisión, número de dígitos después del punto decimal (0-8).
Muestra:
 double var1=0.123456789; Print(DoubleToStr(NormalizeDouble(var1,5),5); // salida: 0.12346

Esta doble conversión me resultó muy confusa la primera vez que la vi. De hecho, al imprimir el código en el registro del Asesor Experto, el

Print( DoubleToStr( var1, 5 ); 
Quizás el ejemplo con alguna función comercial sería mucho más informativo, es decir, es ahí donde realmente se necesita la normalización. El ejemplo con la función CompareDoubles() de stdlib.mq4 también sería muy informativo (este es el lugar donde los principiantes se pisan casi siempre):

// Функция корректного сравнения двух переменных типа double из библиотеки stdlib.mq4
bool CompareDoubles(double number1,double number2)
{
   if(NormalizeDouble(number1-number2,8)==0) return(true);
   else return(false); 
}
Renat, ¿no es una opción?
 
Ahora que estamos hablando de ello, me gustaría hacer una pregunta que me ha costado un tiempo. Aquí hay un ejemplo de código:
int start()
  {
   double haOpen, haHigh, haLow, haClose;
   if(Bars<=10) return(0);
   ExtCountedBars=IndicatorCounted();
//---- check for possible errors
   if (ExtCountedBars<0) return(-1);
¿Cuál es la diferencia fundamental entre el primer return(0) y el segundo return(-1)?
¿Cómo afecta a la ejecución de un indicador (o Asesor Experto)?
¿Qué ocurre cuando se devuelve un valor negativo?
Y puedo escribir algo como:
void start()
{
  //
  //...
  //
  return;
}
 
En principio no hay diferencia, porque el valor de retorno no es analizado por el terminal (de momento). De hecho, este es un estilo de grabación que ayuda al propio programador a entender que en este caso hay una terminación no estándar (valor menos 1) de start().
 
PSmith:
Y puedo escribir algo como:
void start()
{
  //
  //...
  //
  return;
}

Así es como he estado escribiendo últimamente, por ejemplo. :) Es más, ni siquiera utilizo el retorno final. Parece que en algún lugar de la documentación se llegó a decir que en funciones como void no es necesario el retorno final.
 
Aquí hay otra pregunta: ¿por qué la función
doble iVolumen( string symbol, int timeframe, int shift)
devuelve un valor de tipo doble?
 
Originalmente no era doble, pero en algún momento resultó que el tipo int no siempre es adecuado para almacenar volúmenes (por ejemplo, tome un marco de tiempo mensual para un instrumento altamente volátil). En este caso es fácil obtener un error de desbordamiento.
 

De la documentación (Tipos de datos): Las constantes enteras pueden asumir valores de -2147483648 a 2147483647. Julio de 2002, EURUSD: número máximo de ticks por mes en la historia, 670000. Se necesitarían 3.000 meses, es decir, 250 años, para conseguir un desbordamiento incluso con este volumen máximo de ticks. Por otro lado, los volúmenes pueden crecer más, por lo que la cifra no es tan inalcanzable en teoría...

 
Mathemat:

De la documentación (Tipos de datos): Las constantes enteras pueden asumir valores de -2147483648 a 2147483647. Julio de 2002, EURUSD: número máximo de ticks por mes en la historia, 670000. Se necesitarían 3.000 meses, es decir, 250 años, para conseguir un desbordamiento incluso con este volumen máximo de ticks. Por otro lado, los volúmenes pueden crecer más, por lo que la cifra no es tan inalcanzable en teoría...


Yo mismo he hecho esa pregunta y he recibido exactamente esa respuesta. Aunque sea difícil de creer. Pero si pones las cotizaciones del mercado de valores en MT4 ...
 
¡El mismo mes en _DJI - 42228720! Sí...
 

Rosh, si he entendido bien tu silencio, no hay una declaración clara para qué casos y para qué expresiones/variables es necesaria la normalización. Si este es el caso, tal vez se pueda responder a una pregunta más sencilla: ¿la normalización de los valores calculados de la forma

int StLs=25;
double prc = Ask + StLs*Point;

¿O debo averiguarlo por mi cuenta, en un experimento?