Pregunta EA no respetando función "if" dentro de otro "if"

 

Publi

EA no respetando función "if" dentro de otro "if"

 

Publi

Página 1 de 2 12 ÚltimoÚltimo
Resultados 1 al 10 de 14


Vista híbrida

  1. #1

    antecessor


    Reputación:
    Poder de reputación: 15

    Venezuela
    Mensajes: 589
    Créditos: 2.342

    EA no respetando función "if" dentro de otro "if"

    Saludos compañeros. Siento no colocar el código, pues estoy practicando programación y haciendo varios códigos, y los he modificado. Sin embargo hoy estuve pensando en algo que me sucedió en estos días, y quisiera saber si sucedió por algo conocido y puedan explicárme como resolverlo.

    Coloqué en el código del EA (no puse llaves por comodidad aquí):

    if (condicion1)
    if (condicion1A) Alert("cond1A");
    if (condicion2)
    if (condicion2A) Alert("cond2A");

    Según tengo entendido, el cuerpo dentro del "if" (condicion1A) que está dentro de otro "if" (condicion1), se ejecutará solo si la condición del primer "if" (condicion1) se cumple. Y si no se cumple, simplemente resiva si el otro "if" (condicion2) si se cumple para revisar el cuerpo de este (condicion2A).

    Lo que me pasó:

    Cuando asocié el EA a la ventana del precio, los mensajes que enviaba eran los de ambos "if" que están dentro del otro, es decir, según este ejemplo, aparecia repetidamente el mensaje de: "cond1A" y de seguidas "cond2A". Pero, siguiendo el código que puse, condicon1 y condicion2 son contradictorias, por lo que no debería decir mensajes de ambos.

    Para resolver lo que hice fue colocarlo todo en un mismo bool, es decir, declare como bool "condicion1 && condicion1A" y "condicion2 && consicion2A". Así:

    if (condicion1 && condicion1A) Alert("cond1A");
    if (condicion2 && condicion2A) Alert("cond2A");

    De esta manera si me funcionó. Sin embargo me queda la duda pues ¿esto quiere decir que, en algún EA futuro, existe la posibilidad se ejecute un "if" dentro de otro, cuando el que está fuera no se está cumpliendo su condición???

    ¿Hay alguna manera de asegurar que esto no suceda?

    Saludos y gracias de antemano.
    Foro de Forex Trading United

  2. #2
    Avatar de YHOYO



    Reputación:
    Poder de reputación: 13

    Colombia
    Mensajes: 346
    Créditos: 1.060

    Re: EA no respetando función "if" dentro de otro "if"

    hola hola

    pues este por ejemplo es un codigo de if dentro de if que me funciona a la perfeccion:

    Código:
       if (Trade_media_lenta ==TRUE)
       {
          
          if (media_rapida > media_lenta && media_lenta > media_super_lenta)
          {
          Ten_alcista = TRUE;
          Ten_bajista = FALSE;
          }
          if (media_rapida < media_lenta && media_lenta< media_super_lenta)
          {
          Ten_alcista = FALSE;
          Ten_bajista = TRUE;
          }
          if (((media_rapida > media_lenta) &&! (media_rapida > media_super_lenta)) || ((media_rapida < media_lenta) &&! (media_rapida < media_super_lenta)))
          {
          Print("NO hay tendencia definida");
          }
       
       }

    no digo que sea lo "mas pulido del mundo!".. pero me funciona para los propositos que necesitaba en su momento

    tambien podrias hacerlo utilizando un poco de POO....

    saludos
    Foro de Forex Trading United


  3. #3

    Re: EA no respetando función "if" dentro de otro "if"

    Por seguridad, lo mejor es poner siempre llaves, así te aseguras de hasta donde quieres que actue, y hasta donde no. Si es solo una cosa que quieres que haga cuando se de esa condición, entonces ahí sí te puedes ahorrar la llave.

    También puedes usar else si cuando no se de algo, entonces quieres que haga otra cosa, así como else if, si cuando ese algo no se de, quieres que haga otra cosa si se da otra condición y si no, no.

    Saludos y un abrazo.
    Foro de Forex Trading United

  4. #4

    antecessor


    Reputación:
    Poder de reputación: 15

    Venezuela
    Mensajes: 589
    Créditos: 2.342

    Re: EA no respetando función "if" dentro de otro "if"

    Gracias por las respuestas compañeros. Aunque me pareciera que están diciendo lo mismo que hice, pero no se apreció bien porque no le puse la función de etiqueta a la parte del código (pensé que saldría con los espacios que le había puesto). Ya aquí lo corrijo y lo coloco de nuevo tal como lo puse en el EA:

    Coloqué esto primero, cuando me dió el problema:

    Código:
    if (condicion1)
        {
         if (condicion1A) Alert("cond1A)
        }
    if (condicion2)
        {
        if (condicion2A) Alert("cond2A");
        }
    Entonces el EA debería revisar primero si se cumple "condicion1". De no ser el caso, revisa si se cumple "condicion2". Pero si, efectivamente si se cumple "condicion1", entonces revisa si se cumple "condicion1A" (que es la que está dentro de las lleves de "condicion1"), y si se cumple esta tambien, lanza el mensaje "cond1A" (que es lo que está puesto en Alert).

    Lo que me pasó es que, cuando asocié el EA a la ventana del precio, me salian los dos mensajes, uno debajo del otro, aunque "condicion1" y "condicion2" eran contradictorias. Me salió así:

    cond1A
    cond2A

    Pero no debería pues condicion 1 y condicion2 son contradictorias...

    Luego probé colocando las 2 condiciones dentro de un mismo "if", y ahí si me funcionó. Es decir, lo puse así:

    Código:
    if (condicion1 && condicion1A) Alert("cond1A");
    if (condicion2 && condicion2A) Alert("cond2A");

    ¿Por qué no me funcionó la forma anterior? Lo que ustedes me dijeron fue practicamente que hiciera eso ¿o hay algo en lo que me dijeron que no capté? ¿hay alguna forma de asegurar que el EA nunca cometa este error?


    Otra cosa que me llamó la atención wa la parte que dice "&&!" en el código que puso YHOYO:

    Cita Iniciado por YHOYO Ver mensaje
    Código:
    if (((media_rapida > media_lenta) &&! (media_rapida > media_super_lenta))
    Lo busqué en la lista de oepradores y expresiones de mql4, pero no lo conseguí. ¿Supongo un atajo para decir if(opcionA==true && condicionB==false)? Es decir:

    Código:
    if(opcionA==true && condicionB==false)
    es lo mismo que decir:

    Código:
    if(opcionA &&! condicionB)


    Saludos, y gracias de antemano de nuevo.
    Foro de Forex Trading United

  5. #5
    Avatar de YHOYO



    Reputación:
    Poder de reputación: 13

    Colombia
    Mensajes: 346
    Créditos: 1.060

    Re: EA no respetando función "if" dentro de otro "if"

    HOLA.. por supuesto no va a funcionar como necesitas.... DEBES utilizar el elseif checa la documentación

    ejemplo:

    Código:
    if(x=='a')
      {
       y=1;
      }
    elseif(x=='b')
      {
       y=2;
       z=3;
      }
    elseif(x=='c')
      {   
       y=4;
      }
    elsePrint("ERROR");
    el codigo que puse anteriormente efectivamente no es necesario el ==True.. pero es que ya me aconstrumbre a ponerlos y si no lo hago despues me hago bolas!

    saludos

    Cita Iniciado por trader201 Ver mensaje
    Gracias por las respuestas compañeros. Aunque me pareciera que están diciendo lo mismo que hice, pero no se apreció bien porque no le puse la función de etiqueta a la parte del código (pensé que saldría con los espacios que le había puesto). Ya aquí lo corrijo y lo coloco de nuevo tal como lo puse en el EA:

    Coloqué esto primero, cuando me dió el problema:

    Código:
    if (condicion1)
        {
         if (condicion1A) Alert("cond1A)
        }
    if (condicion2)
        {
        if (condicion2A) Alert("cond2A");
        }
    Entonces el EA debería revisar primero si se cumple "condicion1". De no ser el caso, revisa si se cumple "condicion2". Pero si, efectivamente si se cumple "condicion1", entonces revisa si se cumple "condicion1A" (que es la que está dentro de las lleves de "condicion1"), y si se cumple esta tambien, lanza el mensaje "cond1A" (que es lo que está puesto en Alert).

    Lo que me pasó es que, cuando asocié el EA a la ventana del precio, me salian los dos mensajes, uno debajo del otro, aunque "condicion1" y "condicion2" eran contradictorias. Me salió así:

    cond1A
    cond2A

    Pero no debería pues condicion 1 y condicion2 son contradictorias...

    Luego probé colocando las 2 condiciones dentro de un mismo "if", y ahí si me funcionó. Es decir, lo puse así:

    Código:
    if (condicion1 && condicion1A) Alert("cond1A");
    if (condicion2 && condicion2A) Alert("cond2A");

    ¿Por qué no me funcionó la forma anterior? Lo que ustedes me dijeron fue practicamente que hiciera eso ¿o hay algo en lo que me dijeron que no capté? ¿hay alguna forma de asegurar que el EA nunca cometa este error?


    Otra cosa que me llamó la atención wa la parte que dice "&&!" en el código que puso YHOYO:



    Lo busqué en la lista de oepradores y expresiones de mql4, pero no lo conseguí. ¿Supongo un atajo para decir if(opcionA==true && condicionB==false)? Es decir:

    Código:
    if(opcionA==true && condicionB==false)
    es lo mismo que decir:

    Código:
    if(opcionA &&! condicionB)


    Saludos, y gracias de antemano de nuevo.
    Foro de Forex Trading United


  6. #6




    Reputación:
    Poder de reputación: 10

    Peru
    Mensajes: 405
    Créditos: 1.829

    Re: EA no respetando función "if" dentro de otro "if"

    Cita Iniciado por trader201 Ver mensaje
    Gracias por las respuestas compañeros. Aunque me pareciera que están diciendo lo mismo que hice, pero no se apreció bien porque no le puse la función de etiqueta a la parte del código (pensé que saldría con los espacios que le había puesto). Ya aquí lo corrijo y lo coloco de nuevo tal como lo puse en el EA:

    Coloqué esto primero, cuando me dió el problema:

    Código:
    if (condicion1)
        {
         if (condicion1A) Alert("cond1A)
        }
    if (condicion2)
        {
        if (condicion2A) Alert("cond2A");
        }
    Entonces el EA debería revisar primero si se cumple "condicion1". De no ser el caso, revisa si se cumple "condicion2". Pero si, efectivamente si se cumple "condicion1", entonces revisa si se cumple "condicion1A" (que es la que está dentro de las lleves de "condicion1"), y si se cumple esta tambien, lanza el mensaje "cond1A" (que es lo que está puesto en Alert).

    Lo que me pasó es que, cuando asocié el EA a la ventana del precio, me salian los dos mensajes, uno debajo del otro, aunque "condicion1" y "condicion2" eran contradictorias. Me salió así:

    cond1A
    cond2A

    Pero no debería pues condicion 1 y condicion2 son contradictorias...

    Luego probé colocando las 2 condiciones dentro de un mismo "if", y ahí si me funcionó. Es decir, lo puse así:

    Código:
    if (condicion1 && condicion1A) Alert("cond1A");
    if (condicion2 && condicion2A) Alert("cond2A");

    ¿Por qué no me funcionó la forma anterior? Lo que ustedes me dijeron fue practicamente que hiciera eso ¿o hay algo en lo que me dijeron que no capté? ¿hay alguna forma de asegurar que el EA nunca cometa este error?

    Jamás he programado en mql4 o como se llame el lenguaje de MT4, pero sé de programación y por eso me atrevo a darte una opinión.

    Creo que tu error ha sido de sintaxis, aunque tienes un error de concepto al plantear tu código. Dices que revisa si cumple condicion1 y si no la cumple, revisa la condicion2. Según tu código el programa va a revisar la condición1, independientemente de si es cierto o no, va a pasar y revisar la condición2. Si yo leo tu código, para mi dice:

    Si condición 1 es verdadera entonces si condicion1a es verdadera Alert.
    Si condición 2 es verdadera entonces si condicion2a es verdadera Alert.

    Y para que sea lo que tu dices debería ser

    Si condición 1 es verdadera entonces si condicion1a es verdadera Alert.
    SI NO
    Si condición 2 es verdadera entonces si condicion2a es verdadera Alert.

    Ese "si no" es el elseif que ya han mencionado los otros compañeros. La única opción de que el programa revise la condición 2 es que la condición 1 sea falsa. Esto para que tengas en cuenta que siempre se han estado evaluando las 2 condiciones, aunque la verdad ese no debería ser tu problema, por un tema de optimización de código lo deberías haber hecho con elseif, pero en cuanto a resultado, si debió funcionar.

    Creo que te has equivocado en alguna parte en el código que evalúa la condición1 y/o la condición2. No sé si has considerado un <, <=, >=, >, ==, etc etc. pero puede que por el apuro hayas escrito = en lugar de ==, y (en los lenguajes en los que he programado y supongo mql4 debe ser igual) no es lo mismo poner = que ==. Aunque seguro eso ya lo sabes se te pudo haber pasado. El hecho es que el EA evalúaba las 2 y las 2 eran verdaderas. Creo que deberías copiar tu código tal cual está en tu EA, para saber cómo evalúas condicion1 y condicion2 para que te podamos ayudar. Lo otro es, intenta usar elseif en tu código original y también borra toda esa parte del código porque créeme que a veces el error está ahí y es super simple, pero tu mente termina leyendo lo que crees que escribiste y no lo que realmente has escrito. No tienes idea de cuantas veces he borrado líneas y líneas de código para reescribirlas (según yo) tal cual las escribí antes pero en la 2da vez si funcionó =S
    Foro de Forex Trading United

  7. #7

    Re: EA no respetando función "if" dentro de otro "if"

    Bueno, creo que está suficientemente aclarado con todas las respuestas de todos los compañeros. Está claro que tal como lo pusiste, se daban ambas condiciones, y por eso te salían las 2 alertas. Si no le pones else, una condicion es totalmente independiente de la otra, y es posible que se den ambas.

    No es que la plataforma se salte el if o no lo respete o haya error. Siempre ejecuta tal y como tu lo hayas puesto, en esto no hay error posible, salvo algún bug conocido de la misma, que no es el caso.

    Saludos y un abrazo.
    Foro de Forex Trading United

  8. #8

    Re: EA no respetando función "if" dentro de otro "if"

    Cita Iniciado por trader201 Ver mensaje
    Gracias por las respuestas compañeros. Aunque me pareciera que están diciendo lo mismo que hice, pero no se apreció bien porque no le puse la función de etiqueta a la parte del código (pensé que saldría con los espacios que le había puesto). Ya aquí lo corrijo y lo coloco de nuevo tal como lo puse en el EA:

    Coloqué esto primero, cuando me dió el problema:

    Código:
    if (condicion1)
        {
         if (condicion1A) Alert("cond1A)
        }
    if (condicion2)
        {
        if (condicion2A) Alert("cond2A");
        }
    Entonces el EA debería revisar primero si se cumple "condicion1". De no ser el caso, revisa si se cumple "condicion2". Pero si, efectivamente si se cumple "condicion1", entonces revisa si se cumple "condicion1A" (que es la que está dentro de las lleves de "condicion1"), y si se cumple esta tambien, lanza el mensaje "cond1A" (que es lo que está puesto en Alert).

    Lo que me pasó es que, cuando asocié el EA a la ventana del precio, me salian los dos mensajes, uno debajo del otro, aunque "condicion1" y "condicion2" eran contradictorias. Me salió así:

    cond1A
    cond2A

    Pero no debería pues condicion 1 y condicion2 son contradictorias...

    Luego probé colocando las 2 condiciones dentro de un mismo "if", y ahí si me funcionó. Es decir, lo puse así:

    Código:
    if (condicion1 && condicion1A) Alert("cond1A");
    if (condicion2 && condicion2A) Alert("cond2A");

    ¿Por qué no me funcionó la forma anterior? Lo que ustedes me dijeron fue practicamente que hiciera eso ¿o hay algo en lo que me dijeron que no capté? ¿hay alguna forma de asegurar que el EA nunca cometa este error?


    Otra cosa que me llamó la atención wa la parte que dice "&&!" en el código que puso YHOYO:



    Lo busqué en la lista de oepradores y expresiones de mql4, pero no lo conseguí. ¿Supongo un atajo para decir if(opcionA==true && condicionB==false)? Es decir:

    Código:
    if(opcionA==true && condicionB==false)
    es lo mismo que decir:

    Código:
    if(opcionA &&! condicionB)


    Saludos, y gracias de antemano de nuevo.
    Pues ... aun a riesgo de reavivar el fuego, y a pesar de las respuestas de todos los compañeros, a mi no me queda claro... Si lo que has escrito es

    Código:
    if (condicion1)
        {
         if (condicion1A) Alert("cond1A)
        }
    if (condicion2)
        {
        if (condicion2A) Alert("cond2A");
        }
    Ese código me parece totalmente igual funcionalmente a

    Código:
    if (condicion1 && condicion1A) Alert("cond1A");
    if (condicion2 && condicion2A) Alert("cond2A");
    Vamos, que hacen exactamente lo mismo. Habría que ver el código exacto que has puesto, pues desde mi punto de vista se deberían comportar exactamente igual, de estar bien escritas sintácticamente.

    Otro tema es que me parece muy mala costumbre no usar las llaves {} en los if y en otros bloques de código cuando puede generar confusión. Que no es el caso de la respuesta en la que escribes estos códigos, pero sí que lo es en tu primer mensaje, en el que dices que no usaste las llaves... El código queda más claro y totalmente fuera de dudas si usas las llaves en esos bloques de código.

    Si pudieras poner el código exacto que te falla podríamos evaluar el por qué de ese comportamiento extraño.
    Foro de Forex Trading United



  9. #9
    Avatar de YHOYO



    Reputación:
    Poder de reputación: 13

    Colombia
    Mensajes: 346
    Créditos: 1.060

    Re: EA no respetando función "if" dentro de otro "if"

    hola hola

    efectivamente los dos codigos tienen el mismo resultado..... el asunto es que para que no tengan dicho "resultado", pues deberia ser asi...no? :
    Código:
    if (condicion1)
        {
         if (condicion1A) Alert("cond1A);
        }
    else if (condicion2)
        {
        if (condicion2A) Alert("cond2A");
        }
    saludos
    Foro de Forex Trading United


  10. #10

    antecessor


    Reputación:
    Poder de reputación: 15

    Venezuela
    Mensajes: 589
    Créditos: 2.342

    Re: EA no respetando función "if" dentro de otro "if"

    Cita Iniciado por striker Ver mensaje
    ...Yo asumí antes que las condiciones eran excluyentes. Supongamos.. condicion1 es que el precio sea < ema100 y la condición 2 es que el precio sea >= ema100. En ese caso el resultado debería ser el mismo con o sin elseif porque es imposible que el precio esté arriba y abajo de la ema100 al mismo tiempo...
    Exactamente striker. Tal como mencioné en la pregunta inicial, ambas condiciones son contradictorias entre sí. Por eso mi gran confusión y el motivo por el que hago la pregunta.

    Cita Iniciado por yokinfx Ver mensaje
    ...Si lo que has escrito es

    Código:
    if (condicion1)
        {
         if (condicion1A) Alert("cond1A)
        }
    if (condicion2)
        {
        if (condicion2A) Alert("cond2A");
        }
    Ese código me parece totalmente igual funcionalmente a

    Código:
    if (condicion1 && condicion1A) Alert("cond1A");
    if (condicion2 && condicion2A) Alert("cond2A");
    Vamos, que hacen exactamente lo mismo...
    Así fue como lo aprendí, pero como no tengo mucha experiencia en programación, pregunté por si me estaba pasando algo que otro conociera y me supiera decir algo para evitar suceda de nuevo.

    Por sus respuestas, pues ahora estoy pensando se tratase de algun error de algo asociado a mi PC en el momento o algo así que no tenga como origen el mql4, pues me extraña que no haya recibido ninguna respuesta de un programador diciéndo que le había pasado y se asegura no vuelve a pasar pasar haciendo tal o cual (eso fue lo que pensé que alguien iba a responderme, y otros diciendo lo mismo). ¿Aunque supongo que entonces el "else if" es un poco mas exigente? es decir, ¿para mql4 no es lo mismo "if" que "else if" internamente?

    Cita Iniciado por yokinfx Ver mensaje
    ...Si pudieras poner el código exacto que te falla podríamos evaluar el por qué de ese comportamiento extraño...
    Cita Iniciado por striker Ver mensaje
    ... Por eso es importante para que Trader201 entienda qué sucedió, nos explique o copie textualmente su código.
    El código exacto que puse lo he modificado, porque estaba haciendo pruebas y cambiando códigos, tal como mencioné en la pregunta:

    Cita Iniciado por trader201 Ver mensaje
    Saludos compañeros. Siento no colocar el código, pues estoy practicando programación y haciendo varios códigos, y los he modificado. Sin embargo hoy estuve pensando en algo que me sucedió en estos días, y quisiera saber si sucedió por algo conocido y puedan explicárme como resolverlo...
    Si recuerdo que me puse a revisar el código cuando me pasó, porque me pareció muy extraño. No vi ningún error. Me puse a pensar y se me ocurrió poner las dos condiciones en un mismo "if" a ver que pasaba, y así sí me funcionó (tal como escribí antes lo que hice cuando me funcionó). Como funcionó, simplemente seguí haciendo pruebas. Con los días fue que me puse a pensar en lo que me había pasado, y puse la pregunta.

    Lo que puedo hacer es colocar los códigos en la primera manera en que lo estaba haciendo, y si me pasa nuevamente, colocar el código con el pantallazo de los dos mensajes generándose (ya que estoy haciendo pruebas utilizando función Alert).

    Saludos, y gracias por las respuestas.
    Foro de Forex Trading United

Página 1 de 2 12 ÚltimoÚltimo
This website uses cookies
Utilizamos cookies propias y de terceros para elaborar información estadística y mostrarle publicidad personalizada a través del análisis de su navegación. Si continúa navegando acepta su uso. Más información y política de cookies.
     

 

Publi


Aviso Legal
Ley Orgánica 15/1999, de 13 de diciembre, de Protección de Datos de Carácter Personal