Publi

Publi

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


  1. #1

    antecessor


    Reputación:
    Poder de reputación: 8

    Venezuela
    Mensajes: 597
    Créditos: 2.154

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


    Publi
    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.                         
    Publi
  3. #2
    Avatar de YHOYO
    antecessor


    Reputación:
    Poder de reputación: 5

    Colombia
    Mensajes: 324
    Créditos: 428

    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


  4. #3
    Avatar de robertomar
    Heidelbergensis


    Reputación:
    Poder de reputación: 9

    Espana
    Mensajes: 905
    Créditos: 15.929

    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

     

  5. #4

    antecessor


    Reputación:
    Poder de reputación: 8

    Venezuela
    Mensajes: 597
    Créditos: 2.154

    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

     

  6. #5
    Avatar de YHOYO
    antecessor


    Reputación:
    Poder de reputación: 5

    Colombia
    Mensajes: 324
    Créditos: 428

    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


  7. #6

    antecessor


    Reputación:
    Poder de reputación: 3

    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

     

  8. #7
    Avatar de robertomar
    Heidelbergensis


    Reputación:
    Poder de reputación: 9

    Espana
    Mensajes: 905
    Créditos: 15.929

    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

     

  9. #8
    Avatar de yokinfx
    Erectus


    Reputación:
    Poder de reputación: 7

    Mensajes: 246
    Créditos: 1.326

    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



  10. #9
    Avatar de YHOYO
    antecessor


    Reputación:
    Poder de reputación: 5

    Colombia
    Mensajes: 324
    Créditos: 428

    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


  11. #10

    antecessor


    Reputación:
    Poder de reputación: 3

    Peru
    Mensajes: 405
    Créditos: 1.829

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


    Publi
    Cita Iniciado por YHOYO Ver mensaje
    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

    Si y no, depende de cuales son sus condiciones. 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.

    Ahora, si las condiciones no son excluyentes los resultados no son los mismos..
    condicion1: precio < ema100
    condicion2: precio < ema25

    Con elseif, si la primera se cumple ya no revisa la segunda, pero eso no quiere decir que la segunda no sea cierta, simplemente ya no la va a revisar

    Sin elseif, si la primera se cumple, igual va a revisar la segunda y es posible que el precio esté por debajo de ambas ema's y ambas condiciones podrían ser verdaderas

    Por eso es importante para que Trader201 entienda qué sucedió, nos explique o copie textualmente su código.
    Foro de Forex Trading United

     

Página 1 de 2 12 ÚltimoÚltimo
Publi
Publi


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