[ARCHIVO]Cualquier pregunta de novato, para no saturar el foro. Profesionales, no lo dejéis pasar. No puedo ir a ningún sitio sin ti - 5. - página 303

 
Una pregunta más. el indicador xrust (https://www.mql5.com/ru/code/8318) ahora necesito enviar el precio de máximo y mínimo al Asesor Experto (con salida al gráfico). he hecho algunas pruebas, pero no puedo obtener los valores que necesito((: uno se envía, otro es igual a 0. ¿cómo mostrar los valores reales?
Archivos adjuntos:
 
hoz:

Estoy aprendiendo a trabajar con las bibliotecas. Estoy escribiendo un Asesor Experto, hay una función como esta:

Lo puse en la inclusión, todo funciona como debería. Pero si se conecta a la biblioteca, hay un error al compilar el Asesor Experto:

¿Por qué esta función no es visible en la biblioteca?

La biblioteca tiene este contenido y compila perfectamente:

Muchos errores. ¿Podemos ver un ejemplo y hacerlo por analogía?
 

Hay una cotización, supongamos que Ask = 1,20667

A esta cita hay que quitarle el tercer dígito después del punto decimal. Es decir, tomar el valor 1,206, el resto debe ser descartado.

Por favor, dime cómo hacerlo correctamente, porque"Normalizar" redondea hacia arriba y el resultado es 1,20700.

He intentado una solución:

DoubleToStr(Ask,3)

Sí, da todo correctamente -> 1.206 . Pero al volver a Doble redondea de nuevo, pero a 2 decimales.

StrToDouble(DoubleToStr(Ask,3)) = 1,2100    // 1,2100 - это получившийся результат (т.е. округляет)

No necesito el redondeo. Sólo tengo que tomar el segundo, tercer o cuarto dígito (a mi elección) después del punto decimal y descartar el resto.

¿Cómo lo hago correctamente?

 
Chiripaha:

Hay una cotización, supongamos que Ask = 1,20667

A esta cita hay que quitarle el tercer dígito después del punto decimal. Es decir, tomar el valor 1,206, el resto debe ser descartado.

Por favor, dime cómo hacerlo correctamente, porque"Normalizar" redondea hacia arriba y el resultado es 1,20700.

He intentado una solución:

Sí, da todo correctamente -> 1.206 . Pero al volver a Doble redondea de nuevo, pero a 2 decimales.

No necesito el redondeo. Sólo tengo que tomar el segundo, tercer o cuarto dígito (a mi elección) después del punto decimal y descartar el resto.

¿Cómo lo hago correctamente?

Estás en el camino correcto: convertir doble a cadena por Dígitos, y luego cortar del resultado(StringSubstr()) el número de dígitos requerido.
 
Chiripaha:

Hay una cotización, supongamos que Ask = 1,20667

A esta cita hay que quitarle el tercer dígito después del punto decimal. Es decir, tomar el valor 1,206, el resto debe ser descartado.

Por favor, dime cómo hacerlo correctamente, porque"Normalizar" redondea hacia arriba y el resultado es 1,20700.

He intentado una solución:

Sí, da todo correctamente -> 1.206 . Pero al volver a Doble redondea de nuevo, pero a 2 decimales.

No necesito el redondeo. Sólo tengo que tomar el segundo, tercer o cuarto dígito (a mi elección) después del punto decimal y descartar el resto.

¿Cómo lo hago correctamente?

https://docs.mql4.com/ru/strings/StringSubstr
 

Pido disculpas, supuse que podría ser un malentendido. He intentado aclararlo, pero el efecto sigue ahí. - Es mi culpa, lo siento.

Necesito no sólo un dígito (3º, 4º, etc. después de la coma), sino todo el dígito hasta la 2ª, 3ª o 4ª coma inclusive. PERO! sin redondeo.

Y el problema es que cuando devuelvo el dígito a tipo Doble, se redondea de nuevo.

Y es que, aunque ese dígito de forma estúpida traduce una letra a la vez primero en tipo String, y luego lo traduce a Double,

se redondeará de nuevo. - Esta es la ironía de la situación. ¿Por qué StrToDouble() redondea un número? - Esto es lo que no entiendo. La tarea de la función es convertirla de

de un formato a otro y no "moldear" o añadir nada de ti mismo allí. Pero también "mejora" algo.

 
Chiripaha:

Pido disculpas, supuse que podría ser un malentendido. He intentado aclararlo, pero el efecto sigue ahí. - Es mi culpa, lo siento.

Necesito no sólo un dígito (3º, 4º, etc. después de la coma), sino el dígito completo hasta la 2ª, 3ª o 4ª coma inclusive. PERO! sin redondeo.

Y el problema es que cuando vuelvo a poner el dígito en tipo Doble, vuelve a redondear.

Y es que, aunque ese dígito de forma estúpida traduce una letra a la vez primero en tipo String, y luego lo traduce a Double,

se redondeará de nuevo. - Esta es la ironía de la situación. ¿Por qué StrToDouble() redondea un número? - Esto es lo que no entiendo. La tarea de la función es convertirla de

de un formato a otro y no "moldear" o añadir nada de ti mismo allí. Pero también "mejora" algo.

¿Sabes la diferencia entre un número y una cifra?
 
Chiripaha:

Pido disculpas, supuse que podría ser un malentendido. He intentado aclararlo, pero el efecto sigue ahí. - Es mi culpa, lo siento.

Necesito no sólo un dígito (3º, 4º, etc. después de la coma), sino el dígito completo hasta la 2ª, 3ª o 4ª coma inclusive. PERO! sin redondeo.

Y el problema es que cuando vuelvo a poner el dígito en tipo Doble, vuelve a redondear.

Y es que, aunque ese dígito de forma estúpida traduce una letra a la vez primero en tipo String, y luego lo traduce a Double,

se redondeará de nuevo. - Esta es la ironía de la situación. ¿Por qué StrToDouble() redondea un número? - Esto es lo que no entiendo. La tarea de la función es convertirla de

de un formato a otro y no "moldear" o añadir nada de ti mismo allí. Pero también "mejora" algo.

Hay que desarrollar la capacidad de "oír". :))
 

: )))))))) Sí, así es. ¡Todos los reproches son aceptados! - Una vez más, pido disculpas por ello. - Son todas las consecuencias de un fuerte desarrollo (por ejercicios especiales)

creativo, imaginativo, poético, etc. - de todos modos, hay dos hemisferios en el ser humano: el creativo y el racional. Mi culpa es que lo vi y no lo corregí.

Así que todas tus afirmaciones van al grano y yo soy culpable.

Pero sólo queda la pregunta sin resolver...

¿Cómo resolverlo al final?

Si crees que no me he enterado de algo, por favor, acláralo. Entiendo la técnica de retroalimentación (para poder "escuchar"), pero no he visto una solución todavía.

¿Cómo obtener el número correcto sin redondear en el doble, hasta el tercer decimal, por ejemplo en el valor de Ask = 1,20667?- Una solución como "StrToDouble(DoubleToStr(Ask,3)) = 1,2100 // 1,2100 es el resultado (es decir, el redondeo)" no funcionó.

Gracias de antemano por su tolerancia y comprensión.

 
Zhunko:
¿Sabes la diferencia entre un número y una cifra?


: )) Sí, claro que entiendo la diferencia. Pero en un post de disculpa y aclaración cometí ese error garrafal de todos modos (Cómo obtener el número correcto sin redondear...), tuve que corregir (y no me di cuenta inmediatamente). No es un malentendido, es la otra cara del desarrollo de la imagen. Por desgracia, este es su coste. Cuando dicen "muertos vivientes" o algo similar, tampoco tiene sentido. Pero sin ella, es imposible percibir la esencia de las cosas en sentido figurado. Quiero decir que es normal. No juzgues. : ) Tampoco es bueno tomarse las cosas al pie de la letra. - Intentaré, incluso con su ayuda, corregir mi comunicación. Juntos haremos que la vida sea mejor y más perfecta. Gracias por sus comentarios.
Razón de la queja: