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

 
Yurixx:

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?

No creí que estuvieras esperando mi respuesta a la pregunta. Mi respuesta es: no hago la normalización en estos casos y las órdenes se abren normalmente. Pero hubo un momento en el que cargué un historial hecho manualmente e intenté ejecutar un probador en él, y fue entonces cuando me sorprendí. En casi todos los casos, la normalización debe utilizarse por si acaso - ya sean valores de indicadores de tu propia cosecha insertados en los parámetros de precio de OrderSend() [por ejemplo, todo tipo de Pivots] o cálculos complejos (y no complejos) dentro del EA - en todos los casos, no puedes estropear nada con mantequilla.

Pero realmente, no puedo dar una formulación clara, cuando es absolutamente innecesario aplicar la normalización de precios en OrderSend(). En principio, una persona nocturna tendrá una sensación en medio año, pero no hay necesidad de hacerlo, sino de normalizarlo todo el tiempo.
 
Además, mientras revisaba el ayudante hoy, encontré un grupo de funciones bajo Conversiones de Datos:

que proporcionan la conversión de datos de un formato a datos de otro formato.

Cabe destacar la función NormalizeDouble(), que garantiza la exactitud requerida en la representación de los precios. En las operaciones de negociación no se pueden utilizar precios no normalizados cuya exactitud supere en al menos un dígito la requerida por el servidor de negociación.
 
También NormalizeDouble

double NormalizeDouble( valor doble, dígitos int)
Redondear un número en coma flotante a la precisión especificada.
Los valores calculados de StopLoss y TakeProfit, así como los precios de apertura de las órdenes pendientes deben ser normalizados a la precisión, cuyo valor se almacena en la variable predefinida Dígitos.
Parámetros:
valor - Valor con coma flotante.
dígitos - Un formato de precisión, el número de dígitos después del punto decimal (0-8).
Ejemplo:
  double var1=0.123456789;
Print(DoubleToStr(NormalizeDouble(var1,5),5));
// output: 0.12346
 
"Ejemplo:
  doble var1=0.123456789;
Print(DoubleToStr(NormalizeDouble(var1,5),5));
// salida: 0,12346".

Estos son ejemplos que me gustaría ver en la documentación. Todo es sencillo y comprensible. Lo insertas en un Asesor Experto o en un indicador y ves el resultado al instante.
 
¿Te refieres a esto?
 

Rosh, por favor, mira la página 16 del mismo foro, ya he escrito sobre esta función y sugerencias para mejorar la ayuda a la misma.

 
Por el momento se ha solucionado (se hará en la nueva versión):

double NormalizeDouble( valor doble, dígitos int)
Redondear un número de punto flotante a la precisión especificada.
Los valores calculados de StopLoss y TakeProfit, así como los precios abiertos de las órdenes pendientes deben ser normalizados a la precisión, cuyo valor se almacena en la variable predefinida Dígitos.

Parámetros:
valor - Valor con coma flotante.
dígitos - Un formato de precisión, el número de dígitos después del punto decimal (0-8).
Ejemplo:
 double var1=0.123456789;
Print(DoubleToStr(NormalizeDouble(var1,5),8));
// salida: 0.12346000



Este ejemplo demuestra el recorte a través de NormalizeDouble() a 5 dígitos, mientras que Print() simplemente lo renderiza (perdón por ese estilo no ruso).
 

Sí, el ejemplo se volvió significativamente más informativo en cuanto el número de caracteres comenzó a diferir.

 
bool SendFTP( string filename, string ftp_path=NULL)
Envía el archivo a la dirección de correo electrónico especificada en la ventana de publicación. Devuelve FALSE si no tiene éxito.
La función no funciona en modo de prueba. Esta función tampoco puede ser llamada desde los indicadores personalizados.
El archivo que se envíe debe estar ubicado en la carpeta terminal_directory\experts\files o en sus subcarpetas.
El envío no se realiza si no se especifica una dirección FTP y/o una contraseña de acceso en la configuración.
[...]
void SendMail( string subject, string some_text)
Envía un correo electrónico a la dirección especificada en la configuración de la pestaña Correo.
El envío puede estar prohibido en los ajustes, también la dirección de correo electrónico puede no estar especificada. Se debe llamar a la función GetLastError() para obtener la información del error.
[...]

Tarea de observación: encontrar 2 diferencias.
 
Al parecer, hay que rendirse para poder tirar la respuesta correcta por la espalda... :)