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).
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
boolCompareDoubles(doublenumber1,doublenumber2){if(NormalizeDouble(number1-number2,8)==0)return(true);
elsereturn(false);
}
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:
intstart(){doublehaOpen, haHigh, haLow, haClose;
if(Bars<=10)return(0);
ExtCountedBars=IndicatorCounted();
//---- check for possible errorsif(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:
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().
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.
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...
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 ...
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?
Para iniciar sesión y usar el sitio web MQL5.com es necesario permitir el uso de Сookies.
Por favor, active este ajuste en su navegador, de lo contrario, no podrá iniciar sesión.
Ha iniciado sesión. La autenticación de dos factores se ha desactivado. Vuelva a configurarla y escanee un nuevo código QR, o continúe con la autenticación de dos factores desactivada.
Y agradecería que se dijera claramente cuándo es necesaria la doble normalización.
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.
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
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):
Renat, ¿no es una opción?
¿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:
Y puedo escribir algo como:
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...
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 ...
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?