CUIDADO CON ESTO

Foro genérico sobre programas relacionados con el trading: gráficos, ejecución de órdenes, automatización, etc.
Responder
morgan
Mensajes: 3
Registrado: 19 Nov 2007 17:59

CUIDADO CON ESTO

Mensaje por morgan »

Parece surrealista, pero lo que acabo de descubrir lo puede comprobar quien quiera en dos minutos.

(114.78 - 114.56) = 0.22 ¿Qué creeis, que es cierto o que es falso?

Pues si esta condición se pone en Visual Chart da falso.

AVISO A NAVEGANTES: Visual Chart resta mal. Por si le faltaba algo.
¿Conocía alguien este error?
Tengo la versión 3. A ver si alguno me puede decir si también pasa con la versión 4.
Y lo jodido es que al restar mal y dar falso, el flujo de programa se va por donde no debe.

Más ejemplos que también funcionan mal:
(114.51 - 114.50) = 0.01
(0.15 - 0.01) = 0.14
(0.18 - 0.01) = 0.17

Yo siempre he pensado que Visual Chart es lo más cómodo, lo cual compensaba sus errores, pero este fallo ya es la leche y creo que no voy a poder convivir con él.

Es mi primer mensaje en el foro aunque llevo ya un tiempo leyendo por aquí. Saludos.
H.Seldon
Mensajes: 546
Registrado: 26 Abr 2005 14:38

Mensaje por H.Seldon »

hmm, no es por enredar pero dudo mucho que un programa "reste mal". Sobre todo porque la operación -resta- no la han definido en el equipo de programadores de VChart.
Seguramente es un lapsus tuyo, de tu código. Para empezar, ¿no habrás confundido el símbolo igual (=) de asignación como el símbolo igual (==) de comparación ?

es decir, no es lo mismo :
if (a = b) { // en este caso estás asignando, y el resultado lógico podría se "false"
podría ser que escribieras :
if ((114.51 - 114.50) = 0.01 ) --> esto es una asignación como resultado "false", puesto q no se puede asignar el valor 0.01 a la operación (114.51 - 114.50)

Lo correcto sería:
if (a==b) { // aquí estás comparando, y aquí si puedes hacer if ((114.51 - 114.50) == 0.01 )

en fin, si no es eso, tendrás que dar más datos para ver dónde está el error

saludos
morgan
Mensajes: 3
Registrado: 19 Nov 2007 17:59

Mensaje por morgan »

No es eso. Visual Chart utiliza el operador = tanto para asignar como para comparar.

Es muy sencillo reproducir el error y no se tarda nada: crear un sistema en el que haceis la pregunta (114.78 - 114.56) = 0.22 y si da cierto comprais y si da falso vendeis, y aplicais el sistema a cualquier gráfico. Ya vereis como da falso. Es muy fuerte.

A ver si alguien que tenga la versión 4 lo prueba y me dice si también ocurre con esa versión. Gracias.
Avatar de Usuario
Homer
Mensajes: 69
Registrado: 27 Sep 2007 11:20
Ubicación: Springfield

Mensaje por Homer »

Hola,

Pues en la versión 4 pasa exactamente lo mismo. Y es que el problema viene del propio Visual Basic, no del Visual Chart.

En general ocurre con todas las aplicaciones de Microsoft. Al usar la doble precisión por defecto para los valores decimales, se llega a liar con tanto decimal y pasan barbaridades como esa.

Para ello lo mejor es usar el tipo de datos Currency para las variables si no vamos a necesitar más de cuatro decimales. De esa forma no se produce el error.

En el caso de constantes, podemos forzar que se traten como de tipo Currency añadiendo al final del número el símbolo arroba: (114.78@ - 114.56@) = 0.22@

Ha sido una buena observación morgan. Esto nos demuestra una vez más que hay que tener mil ojos ;-).

Saludos.
H.Seldon
Mensajes: 546
Registrado: 26 Abr 2005 14:38

Mensaje por H.Seldon »

:shock: :shock: :shock:
la verdad es que alucino.
y... no estareis usando los valores como enteros cuando deberíais declararlos como float o double o decimal ... (no sé cómo se llaman en VBasic) ?
saludos

Avatar de Usuario
Homer
Mensajes: 69
Registrado: 27 Sep 2007 11:20
Ubicación: Springfield

Mensaje por Homer »

H.Seldon escribió::shock: :shock: :shock:
la verdad es que alucino.
y... no estareis usando los valores como enteros cuando deberíais declararlos como float o double o decimal ... (no sé cómo se llaman en VBasic) ?
saludos
Que no, que es un problema que viene de hace muchos años ya. Para ello, Microsoft se curró el tipo de datos Currency. Antes era un lío para calcular un simple IVA.

Imagen

Si pruebas el ejemplo que puso morgan verás que con variables o con constantes, el problema es el mismo.

Saludos.
Adjuntos
currency.JPG
H.Seldon
Mensajes: 546
Registrado: 26 Abr 2005 14:38

Mensaje por H.Seldon »

Pues la verdad es que me habéis dejado a cuadros. No conocía semejante chapuza, ni se me pasaba por la cabeza que pudiera existir.
Espero que al menos se pueda hacer casting al tipo de dato Currency, y solucionar el problema a efectos prácticos.
saludos.
H.Seldon
Mensajes: 546
Registrado: 26 Abr 2005 14:38

Mensaje por H.Seldon »

edito:
ah, ya veo que sí se puede, con el arroba esa.
en fin, ver para creer ... ¡ estamos en 2007 y VBasic no puede restar decimales !
H.Seldon
Mensajes: 546
Registrado: 26 Abr 2005 14:38

Mensaje por H.Seldon »

De todas formas morgan o Homer, mi problema es que no controlo la programación en VBasic / VChart.
¿seríais tan amables de colgar un ejemplo muy simple?
Digamos, un indicador que pinte una línea (una horizontal y ya está)
Si (114.78 - 114.56) = 0.22 que la pinte en 1
Si no, que la pinte en 0

si lleva más de un minuto, no os molestéis. gracias.
Avatar de Usuario
Homer
Mensajes: 69
Registrado: 27 Sep 2007 11:20
Ubicación: Springfield

Mensaje por Homer »

Prueba el sistema siguiente en cualquier gráfico y lo verás.

Saludos.
Adjuntos
VBkaka.vba
(95.5 KiB) Descargado 102 veces
H.Seldon
Mensajes: 546
Registrado: 26 Abr 2005 14:38

Mensaje por H.Seldon »

bueno pues no he sacado nada en claro y no le dedico más tiempo. Si alguna vez me decido a aprender VBasic (que no creo) pues ya retomaré el tema.

saludos.
morgan
Mensajes: 3
Registrado: 19 Nov 2007 17:59

Mensaje por morgan »

He comprobado que también suma mal, multiplica mal y divide mal, aunque ya no me extraña teniendo en cuenta la explicación que nos ha dado Homer.

Habrá que revisar todo lo programado porque está funcionando mal de manera silenciosa.
Forex
Mensajes: 28
Registrado: 09 Oct 2007 23:56
Ubicación: ESPAÑA

Mensaje por Forex »

Oyes no te pondrias a operar en Nochevieja, jajaja ?
Besos digo saludos.
Si te ha gustado este hilo del Foro, ¡compártelo en redes!


Responder

Volver a “Software”