Pregunta EA no respetando función "if" dentro de otro "if" - Página 2

 

Publi

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

 

Publi

Página 2 de 2 PrimerPrimer 12
Resultados 11 al 14 de 14


  1. #11




    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"


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

    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?

    .
    Disculpa, se me debe haber pasado que mencionaras que eran contradictorias.

    No creo que sea un error asociado a tu pc o algo así. Las cosas no funcionan así, sobretodo en el trading donde la data realmente no la creas tu (los precios, los tiempos, todo eso viene del broker y no creo que se equivoquen). Es un poco complicado explicar y espero no ser duro pero estoy seguro que el error ha sido tuyo, como te digo un error de sintaxis (que escribiste mal algo). En tu comentario pones "condicion1" pero no sabemos cómo realmente lo evalúas, si no veo el código, no te puedo dar una explicación. Lo cierto es que tu lógica está bien. La lógica de tu código no tiene ningún error si las condiciones son contradictorias, por ello creo que simplemente escribiste algo mal.

    If y else if no son lo mismo y no se pueden comparar. El "else if" está contenido dentro de un if y son evaluaciones que pueden ser en teoría infinitas pero que tienen una prioridad, cuando se cumpla la condición X, las condiciones siguientes ya no se evaluarán.

    Supongamos que tu estrategia compra, vende o lo que sea dependiendo de los valores de rsi..

    If (rsi>80) {
    sell
    }
    elseif (rsi<30){
    buy
    }
    elseif (rsi>50)
    {
    alert1
    }
    elseif (rsi<50)
    {
    alert2
    }

    Eso quiere decir que si se cumple la primera, ya no evaluará las otras 3, si supongamos que ya sabes que rsi>80, para qué vas a perder tiempo revisando si es menor que 30? Se puede hacer separado en if, pero como te digo, no es lo óptimo.

    Ahora, también existe el "else", que también está contenido dentro de un if, pero en ese caso se ejecutará siempre que el if (o elseif anteriores) no se cumplan.

    If (rsi>80) {
    sell
    }
    elseif (rsi<30){
    buy
    }
    else
    {
    Alert: no hay sobre compra o sobreventa
    }

    En este caso, evalúa si hay cobre compra, sino, evalúa si hay sobreventa sino, te manda una alerta diciendo que no hay nada pero ya independientemente del valor de rsi.

    Espero haber aclarado en algo tus dudas y no haberte complicado más
    Foro de Forex Trading United

  2. Publi
    Publi


  3. #12

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

    Justo, muy bien explicado Striker. Encima iba a comentar yo ahora lo mismo, así que me has ahorrado hasta tiempo. Gracias, jajajaja

    Saludos y un abrazo.
    Foro de Forex Trading United

  4. #13

    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
    Disculpa, se me debe haber pasado que mencionaras que eran contradictorias...
    Según colocaste en una respuesta creo que lo habías entendido bien:

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


    Cita Iniciado por striker Ver mensaje
    ...No creo que sea un error asociado a tu pc o algo así. Las cosas no funcionan así, sobretodo en el trading...estoy seguro que el error ha sido tuyo, como te digo un error de sintaxis (que escribiste mal algo)...
    Bueno, imposible no es. Hasta comencé a pensar, luego de leer sus respuestas, que como estaba haciendo muchas pruebas de códigos, pues podría ser que aunque lo haya revisado, del cansancio y tantas pruebas haya visto otra cosa.



    Concluyo que se haya tratado de un error mio de sintaxis y no del programa.
    Saludos y gracias a todos de nuevo por sus respuestas.
    Foro de Forex Trading United

  5. #14




    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"


    Publi
    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

Página 2 de 2 PrimerPrimer 12
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