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


  1. #1
    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"


    Publi
    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


  2. Publi
    Publi


  3. #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


  4. #3

    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

  5. #4

    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



  6. #5

    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

  7. #6
    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


  8. #7




    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 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

  9. #8

    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

  10. #9

    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

  11. #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"


    Publi
    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

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