Está perdiendo oportunidades comerciales:
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Registro
Entrada
Usted acepta la política del sitio web y las condiciones de uso
Si no tiene cuenta de usuario, regístrese
Eso no hace ninguna diferencia, creo. También podría escribir IF( StringHighStatus == "True" || SwingHighShift > SwingBarcount ) EndCycle = TRUE;
La cuestión es por qué el IF detecta la condición de salida y luego el WHILE reacciona a la variable bool mientras que si pongo la misma condición dentro del WHILE no termina?
Eso no hace ninguna diferencia, creo. También podría escribir IF( StringHighStatus == "True" || SwingHighShift > SwingBarcount ) EndCycle = TRUE;
La cuestión es por qué el IF detecta la condición de salida y luego el WHILE reacciona a la variable bool mientras que si pongo la misma condición dentro del WHILE no termina?
Me parece que esto funciona
como
deVries, tal vez me equivoque pero creo que una secuencia de IF convierte el booleano en TRUE como lo hace un OR lógico.
Si la primera condición coincide entonces EndCycle se convierte en TRUE, si la segunda no lo hace entonces sigue siendo TRUE.
Viceversa si la primera no se cumple pero la segunda sí, entonces se convierte en TRUE.
En este momento el WHILE reconoce la condición de salida.
Así que dos IFs en secuencia se comportan como un OR lógico y lo mismo hace una secuencia IF...ELSE IF.
Y debe ser un OR, no puede ser un AND de lo contrario el WHILE puede atascarse (la condición en la cadena puede ser falsa indefinidamente).
¿Por qué el WHILE maneja una sola variable booleana cuyo valor se establece dentro del ciclo mientras que no puede determinar el resultado de la misma operación lógica OR dentro de su definición de condición?
Este EA ha sido utilizado por mucha gente en el pasado, antes de la build 600 y también antes de la 500, y esta es la última versión. Nadie se ha quejado.
Así que mi pregunta es: ¿hay alguien que tenga problemas con el operador WHILE después de la versión 600?
deVries, tal vez me equivoque pero creo que una secuencia de IF convierte el booleano en TRUE como lo hace un OR lógico.
Si la primera condición coincide entonces EndCycle se convierte en TRUE, si la segunda no lo hace entonces sigue siendo TRUE.
Viceversa si la primera no se cumple pero la segunda sí, entonces se convierte en TRUE.
En este momento el WHILE reconoce la condición de salida.
Así que dos IFs en secuencia se comportan como un OR lógico y lo mismo hace una secuencia IF...ELSE IF.
Y debe ser un OR, no puede ser un AND de lo contrario el WHILE puede atascarse (la condición en la cadena puede ser falsa indefinidamente).
¿Por qué el WHILE maneja una sola variable booleana cuyo valor se establece dentro del ciclo mientras que no puede determinar el resultado de la misma operación lógica OR dentro de su definición de condición?
Este EA ha sido utilizado por mucha gente en el pasado, antes de la build 600 y también antes de la 500, y esta es la última versión. Nadie se ha quejado.
Así que mi pregunta es: ¿hay alguien que tenga problemas con el operador WHILE después de la versión 600?
Creo que te refieres a esto
Tu código, si es exactamente como lo has publicado, no habría hecho lo que esperas con cualquier build, así que debes haber cambiado algo
¿Has probado alguna vez una operación muy básica de lógica while sólo para confirmar que funciona como debería o no, en lugar de preguntar?
Mi post comenzó con un ejemplo de un WHILE que me pareció que devolvía un comportamiento inusual muy similar al del trozo de EA que estamos discutiendo ahora, así que primero probé y luego pregunté.
Mi interpretación de esa depuración tan sencilla resultó ser errónea, así que la discusión se trasladó al propio EA.
Gracias GumRai por tu paciencia.
Tal vez esté equivocado y sea un cabeza dura pero no consigo entender la lógica...
Si el primer IF convierte, como sugieres, la cadena en "true" en digamos SwinghHighShift=10 entonces el contador no aumenta en ese ciclo; después de eso el control vuelve al WHILE: el ciclo debería terminar en este punto porque el WHILE contiene un OR lógico y una de sus condiciones se satisface.
A la inversa, si la variable se mantiene falsa el contador debería alcanzar su valor máximo y de nuevo tienes la condición de salida.
Creo que tu consideración sería cierta con un operador AND.
Siguiendo tu interpretación podría omitir el OR dentro del WHILE; podría simplemente poner la primera condición IF en la cadena: si se convierte en "true" entonces el break terminará el WHILE, de lo contrario el contador seguiría hasta su máximo.
El código se convertirá en:
Pero esto sigue siendo una solución y, lamentablemente, no explica (para mí) por qué el WHILE no se encarga del OR.
Si el primer IF convierte, como sugieres, la cadena en "true" en digamos SwinghHighShift=10 entonces el conteo no se incrementa en ese ciclo; después de eso el control vuelve al WHILE: el ciclo debería terminar en este punto porque el WHILE contiene un OR lógico y una de sus condiciones se satisface.