mt5 strategy tester ticks - página 11

 
RaptorUK:

Quiero poder controlar los datos del historial que utilizo para poder repetir las pruebas (Strategy Tester) en condiciones controladas.

¿Qué condiciones controladas?

Gracias

 
WhooDoo22:

¿Qué condiciones controladas?

Gracias

Las condiciones que yo elija, no las que elija mi Broker. ¿De qué otra forma propones hacer las pruebas? ¿conjunto de condiciones al azar para cada prueba? pero no nos salgamos del tema.
 
RaptorUK:
Las condiciones que yo elijo, no las que elige mi Broker. ¿De qué otra forma propones hacer la prueba? ¿conjunto de condiciones al azar para cada prueba? pero no nos salgamos del tema.

Entendido.

Gracias

 
angevoyageur:

No. Si leyeras mi enlace y/o el de RaptorUK, te quedaría más claro. Si no, vuelve a leer :-D

1,000000000006551e-005 es simplemente otra notación para 0,00001000000000006551.

Hola angevoyageur,

1.000000000006551e-005

0.00001000000000006551

El decimal del segundo doble se desplaza a la izquierda cinco veces PERO ;) no puede ser devuelto en el probador en este formato porque los dobles devuelven un valor máximo de dieciséis dígitos (cifras significativas) a la derecha de un decimal.



Moderador
1651
angevoyageur 2013.04.14 09:39
WhooDoo22:

Hola comunidad MQL5,

https://www.mql5.com/en/docs/common/comment

"Los datosde tipo double se emiten con la precisión de hasta 16 dígitos después de un punto decimal, y se pueden emitir en formato tradicional o en formato científico, dependiendo de qué notación será más compacta. Los datos de tipo float se emiten con 5 dígitos después del punto decimal. Para dar salida a números reales con otra precisión o en un formato predefinido, utilice la función DoubleToString()".

La representación del precio de USDJPY en 98.370 es un dato de tipo float (salida a 5 dígitos después del decimal).

La representación del precio del USDJPY en -0.0019999999995339 es un dato de tipo double, formato tradicional (salida con hasta 16 dígitos después del decimal).

¿Por qué el doble -0,001999999999533[9 ] devuelve un 18º dígito después del decimal si la salida de un doble es sólo hasta 16 dígitos después del decimal?

Gracias

Los precios son siempre dobles, 98,370 es un doble. Hay 16 dígitos significativos. Los ceros no son significativos.


Si los ceros no son significativos, ¿por qué no se podría devolverel valor 0,00001000000000006551 en el probador en lugar de 1,000000000006551e-005? Preferiría hacer los cálculos en formato 0. 00001000000000006551 .

Gracias

 
WhooDoo22:


Si los ceros no son significativos, ¿por qué no se podría devolverel valor 0,00001000000000006551 en el probador en lugar de 1,000000000006551e-005? ¡Preferiría hacer los cálculos en formato 0. 00001000000000006551 !

Un número de punto flotante ( doble ) siempre se mantiene internamente en este formato . . . 1.000000000006551e-005, ¿has leído y entendido la información en los enlaces dados?

De aquí:números de punto flotante

"Un flotador IEEE-754 (4 bytes) o doble (8 bytes) tiene tres componentes (también hay un formato análogo de 96 bits de precisión extendida bajo IEEE-854): un bit de signo que indica si el número es positivo o negativo, un exponente que da su orden de magnitud, y una mantisa que especifica los dígitos reales del número. Utilizando los flotadores de precisión simple como ejemplo, esta es la disposición de los bits:"

3 partes

SignoMantisaExponente
+1.000000000006551-005

Si quieres ver 0.00001000000000xyz entonces usa DoubleToStr() para formatear la salida a tu gusto.

Articles - Understanding Floating Point Number Representation - Cprogramming.com
Articles - Understanding Floating Point Number Representation - Cprogramming.com
  • www.cprogramming.com
Floating point representations vary from machine to machine, as I've implied. Fortunately one is by far the most common these days: the IEEE-754 standard. This standard is prevalent enough that it's worthwhile to look at it in depth; chances are good you'd be able to use this information on your platform (look for ieee754.h). An IEEE-754...
 
RaptorUK:

Un número de punto flotante ( doble ) siempre se mantiene internamente en este formato . . . 1.000000000006551e-005, ¿has leído y entendido la información en los enlaces dados?

De aquí:números de punto flotante

"Un flotador IEEE-754 (4 bytes) o doble (8 bytes) tiene tres componentes (también hay un formato análogo de 96 bits de precisión extendida bajo IEEE-854): un bit de signo que indica si el número es positivo o negativo, un exponente que da su orden de magnitud, y una mantisa que especifica los dígitos reales del número. Utilizando los flotadores de precisión simple como ejemplo, esta es la disposición de los bits:"

3 partes

SignoMantisaExponente
+1.000000000006551-005

Si quieres ver 0.00001000000000xyz entonces usa DoubleToStr() para formatear la salida a tu gusto.

Sí, he leído todos los enlaces que has proporcionado y me han parecido útiles, gracias de nuevo por proporcionarlos. Mi gusto sería incorporar DoubleToString y elegir el valor del penúltimo lugar del doble (ejemplo:CADJPY 95.9[5]9) como segundo parámetro de DoubleToString. ¡No creo que este problema de "¡puede precio!=precio" sea demasiado difícil de resolver! ¿Qué opinas de esto?

Gracias

 
WhooDoo22:

Sí, he leído todos los enlaces que has proporcionado y me han resultado útiles, gracias de nuevo por proporcionarlos. Mi gusto sería incorporar DoubleToString y elegir el valor del penúltimo lugar del doble (ejemplo:CADJPY 95.9[5]9) como segundo parámetro de DoubleToString. ¡No creo que este problema de "¡puede precio!=precio" sea demasiado difícil de resolver! ¿Qué dices a esto?

¿Te refieres a algo como esto?

double value = 95.959;

Print("Value: ", DoubleToStr(value, _Digits - 1) );

El problema de "¿puede el precio?" es un problema diferente, pero ligeramente relacionado, que no puede ser resuelto, primero hay que entender cuál es el problema... y luego se trabaja alrededor de él.

 
RaptorUK:

¿Se refiere a algo así?

No se puede resolver realmente, primero hay que entender cuál es el problema... y luego se trabaja en torno a él.

double value=95.959;

Print("value returns ",DoubleToString(value,2));//value's expected print return is 95.95.

¿Qué opinas de este problema de "precio de la lata"?

Gracias.

 

WhooDoo22:

...

Los precios son siempre dobles, 98,370 es un doble. Hay 16 dígitos significativos. Los ceros no son significa tivos.

Si los ceros no son significativos, ¿por qué no se podría devolver el valor 0,00001000000000006551 en el probador en lugar de 1,000000000006551e-005? Preferiría hacer los cálculos en el formato 0. 00001000000000006551 .

Gracias

Eso podría ser, es sólo una opción de formato de valor de salida.

Todos los equivalentes
0.00001000000000006551
0.0001000000000006551e-001
0.001000000000006551e-002
0.01000000000006551e-003
0.1000000000006551e-004
1.000000000006551e-005

Precisamente porque los ceros no son significativos

WhooDoo22:

Sí, he leído todos los enlaces que has proporcionado y me han parecido útiles, gracias de nuevo por proporcionarlos. Mi gusto sería incorporar DoubleToString y elegir el valor del penúltimo lugar del doble (ejemplo:CADJPY 95.9[5]9) como segundo parámetro de DoubleToString. ¡No creo que este problema de "¡puede precio!=precio" sea demasiado difícil de resolver! ¿Qué opinas de esto?

Gracias

Lo siento pero no entiendo esta frase.
 
angevoyageur:

Podría ser, es sólo una opción de formato de valor de salida.

Todas las equivalencias
0.00001000000000006551
0.0001000000000006551e-001
0.001000000000006551e-002
0.01000000000006551e-003
0.1000000000006551e-004
1.000000000006551e-005

Precisamente porque los ceros no son significativos

Lo siento pero no entiendo esta frase.

"Lo siento pero no entiendo esta frase".

double value=95.959;

Print("value returns ",DoubleToString(value,2));//value's expected print return is 95.95.

Gracias

Razón de la queja: