Ayuda problema abriendo operaciones en diferentes pares (MT4)

 

Publi

problema abriendo operaciones en diferentes pares (MT4)

 

Publi

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


  1. #1




    Reputación:
    Poder de reputación: 10

    Mensajes: 59
    Créditos: 0

    problema abriendo operaciones en diferentes pares (MT4)


    Publi
    ¿Alguien sabe cómo hacer para colocar en el código del EA de MT4, para que abra operaciones si no hay ninguna operación abierta "en ese par", independientemente de que haya una abierta en otro par?
    Foro de Forex Trading United

  2. Publi
    Publi


  3. #2




    Reputación:
    Poder de reputación: 10

    Mensajes: 59
    Créditos: 0

    Re: problema abriendo operaciones en diferentes pares (MT4)

    He colocado el siguiente código para ahcer una prueba:

    Código:
       if(ChartID()==130759124995518815)
          {                     
          Alert("Chart1=", OrdersTotal());
          }
    He colocado manual el nro ID, y dentro de esta le he colocado que dijera el numero de ordenes abiertas. Sin embargo, cuando abrí una orden desde otra ventana, y aunque no había sido abierta desde la ventana del ID nro 1307......., lanzó mensaje de que el total de ordenes era de 1 (cuando no se había abierto ninguna desde la ventana donde estaba ese EA asociado). Esto significa que si asocio el EA a varias ventanas y coloco el ChartID() como condicional, igual sumara el numero totales de ordenes que haya en cualquier ventana y no solo donde el EA este asociado, por lo que pienso que hace falta algo mas.

    Mencionaste antes que lo habías probado y te había funcionado. Sería muy útil para mi saber si lo que te funcionó fue colocar un EA donde al utilizar ChartID, consideró lo que dijeras en el codigo solo en la ventana en que estaba asociado el EA, y no lo que hacias en otras ventanas. Porque si ha sido esto lo que hiciste entonces puedo pensar que se trata, no del código, sino de algún problema del MT4 que tengo descargado y enfocarme en esto entonces.

    Saludos y gracias por todo lo anterior.
    Gracias de nuevo.
    Foro de Forex Trading United

  4. #3




    Reputación:
    Poder de reputación: 10

    Mensajes: 59
    Créditos: 0

    Re: problema abriendo operaciones en diferentes pares (MT4)

    Cita Iniciado por tivag Ver mensaje

    Código:
    if (ChartID()== el numero que sea la id)
       {
       lo que quieras;    
       }
    Así fue como lo puse, pero me parece que tengo problemas colocando en nro de ID. Como ChartID() ya lo que dice es el ID, lo que he puesto es esto:

    Código:
    if (ChartID()== ChartID())
    Pero no me ha funcionado. Luego, como valor 0 en ChartID significa Chart actual, probé con:

    Código:
    if (ChartID()== 0)
    Pero tampoco me funcionó al probarlo.

    Entonces, que debo colocar después del == para decir

    if(ChartID()== chartactual)
    Foro de Forex Trading United

  5. #4
    Avatar de tivag
    antecessor


    Reputación:
    Poder de reputación: 17

    Espana
    Mensajes: 659
    Créditos: 5.114

    Re: problema abriendo operaciones en diferentes pares (MT4)

    Cita Iniciado por trader0 Ver mensaje
    A mi me funcionó cuando lo hice así como tu lo ha hecho. El problema me está ocurriendo cuando lo pongo a trabajar con varias ventanas, que es como correrá en la realidad. Ya tengo una fuerte sospecha de lo que está pasando.

    El código que puse fue este:

    Código:
       if(ChartID()==130759124995518815)
          {                     
          if(OrdersTotal()==0)
             {
             int ticket1=OrderSend(NULL, OP_BUY, Lote, Ask, 10, Bid-SL, Bid+TP, NULL, 12345, TimeStop, clrNONE);
             Alert("ErrorOpen=", GetLastError());
             }
          }

    Lo que hice ahora fue hacer 3 códigos como este pero cada uno con el nro ID de cada gráfica, y asocié cada código a una ventana según corresponda su número de ID. Me pasó que abrió operación solamente en una grafica, así no hubiera ninguna abierta desde otra ventana, por lo que creo que lo que está haciendo el código es eso:

    Primero revisa si se cumple la primera condicion:
    if(ChartID()==130759124995518815)

    Si esta se cumple, entonces revisa la segunda:
    if(OrdersTotal()==0)

    cuenta cuantas operaciones hay abiertas en "total" a ver si se cumple condición de que no haya ninguna abierta, pero contabiliza "todas" las órdenes que hayan abiertas, así se hayan abierto en otra ventana. Es decir: revisa primera condición, y si esta se cumple, revisa si orderstotal es igual a "0", independientemente desde que ventana se haya abierto.

    Por las pruebas que he hecho creo que eso es lo que está haciendo. Y entonces, ¿cómo hago para que cuente solamente las órdenes abiertas en esa ventana?
    hola pues la forma mas segura que se me ocurre es que cada vez que abras una operacion la metas en una variable, sumandole +1 en cada operacion nueva que abra y cada vez que cierres la operacion reste uno, asi tendras un contador de operaciones individual para cada codigo , lo que no se es si podras entrar en la info de esa variable desde otra ventana cuestion de que lo pruebes. De esta forma no te haria falta ni el char id, pero claro la cuestion es si se podra acceder a la otra variable desde la otra ventana, eso ya no lo se.


    saludos y suerte
    Foro de Forex Trading United

  6. #5




    Reputación:
    Poder de reputación: 10

    Mensajes: 59
    Créditos: 0

    Re: problema abriendo operaciones en diferentes pares (MT4)

    Cita Iniciado por tivag Ver mensaje
    hola asi te podria servir :

    {
    bool exists = false;
    for (int i=OrdersTotal()-1; i >= 0; i--)
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
    {
    if (OrderSymbol() == Symbol())
    {
    exists = true;
    }
    }
    else
    {
    Print("OrderSelect() error - ", ErrorDescription(GetLastError()));
    }

    if (exists == false)
    {
    Siguiente bloque ();

    }
    }

    Hola tivag. Gracias por responder. Solo para confirmar: en este código lo que se está diciendo es que, si no hay ninguna operación en el symbolo en que está puesto el EA, entonces... (y lo que se ponga que haga). Correcto?

    Es decir, si coloco este indicador en una ventana del EURUSD, y también en el USDCADy en el GBPUSD, el EA colocado en eurusd si no hay ninguna operacion abierta en este par, hara lo que se le diga, independientemente de si hay o no abiertas en los otros (USDCAD y GBPUSD). Esto es correcto?
    Foro de Forex Trading United

  7. #6




    Reputación:
    Poder de reputación: 10

    Mensajes: 59
    Créditos: 0

    Re: problema abriendo operaciones en diferentes pares (MT4)

    Cita Iniciado por tivag Ver mensaje
    hola pues el codigo que puse fue este:

    Código:
    if (ChartID()==130655549890892400.00000)
    if (OrdersTotal()==0)
       {
       int ticket1=OrderSend(NULL, OP_BUY, 0.10, Ask, 10, Bid-0.0020, Bid+0.0020, NULL, 0, 120, clrNONE);    
       }
    fue para probarlo y me abre operacion tan solo en esa ventana, eso fue la prueba que hice.


    saludos

    A mi me funcionó cuando lo hice así como tu lo ha hecho. El problema me está ocurriendo cuando lo pongo a trabajar con varias ventanas, que es como correrá en la realidad. Ya tengo una fuerte sospecha de lo que está pasando.

    El código que puse fue este:

    Código:
       if(ChartID()==130759124995518815)
          {                     
          if(OrdersTotal()==0)
             {
             int ticket1=OrderSend(NULL, OP_BUY, Lote, Ask, 10, Bid-SL, Bid+TP, NULL, 12345, TimeStop, clrNONE);
             Alert("ErrorOpen=", GetLastError());
             }
          }

    Lo que hice ahora fue hacer 3 códigos como este pero cada uno con el nro ID de cada gráfica, y asocié cada código a una ventana según corresponda su número de ID. Me pasó que abrió operación solamente en una grafica, así no hubiera ninguna abierta desde otra ventana, por lo que creo que lo que está haciendo el código es eso:

    Primero revisa si se cumple la primera condicion:
    if(ChartID()==130759124995518815)

    Si esta se cumple, entonces revisa la segunda:
    if(OrdersTotal()==0)

    cuenta cuantas operaciones hay abiertas en "total" a ver si se cumple condición de que no haya ninguna abierta, pero contabiliza "todas" las órdenes que hayan abiertas, así se hayan abierto en otra ventana. Es decir: revisa primera condición, y si esta se cumple, revisa si orderstotal es igual a "0", independientemente desde que ventana se haya abierto.

    Por las pruebas que he hecho creo que eso es lo que está haciendo. Y entonces, ¿cómo hago para que cuente solamente las órdenes abiertas en esa ventana?
    Foro de Forex Trading United

  8. #7
    Avatar de tivag
    antecessor


    Reputación:
    Poder de reputación: 17

    Espana
    Mensajes: 659
    Créditos: 5.114

    Re: problema abriendo operaciones en diferentes pares (MT4)

    Cita Iniciado por trader0 Ver mensaje
    He colocado el siguiente código para ahcer una prueba:

    Código:
       if(ChartID()==130759124995518815)
          {                     
          Alert("Chart1=", OrdersTotal());
          }
    He colocado manual el nro ID, y dentro de esta le he colocado que dijera el numero de ordenes abiertas. Sin embargo, cuando abrí una orden desde otra ventana, y aunque no había sido abierta desde la ventana del ID nro 1307......., lanzó mensaje de que el total de ordenes era de 1 (cuando no se había abierto ninguna desde la ventana donde estaba ese EA asociado). Esto significa que si asocio el EA a varias ventanas y coloco el ChartID() como condicional, igual sumara el numero totales de ordenes que haya en cualquier ventana y no solo donde el EA este asociado, por lo que pienso que hace falta algo mas.

    Mencionaste antes que lo habías probado y te había funcionado. Sería muy útil para mi saber si lo que te funcionó fue colocar un EA donde al utilizar ChartID, consideró lo que dijeras en el codigo solo en la ventana en que estaba asociado el EA, y no lo que hacias en otras ventanas. Porque si ha sido esto lo que hiciste entonces puedo pensar que se trata, no del código, sino de algún problema del MT4 que tengo descargado y enfocarme en esto entonces.

    Saludos y gracias por todo lo anterior.
    Gracias de nuevo.
    hola pues el codigo que puse fue este:

    Código:
    if (ChartID()==130655549890892400.00000)
    if (OrdersTotal()==0)
       {
       int ticket1=OrderSend(NULL, OP_BUY, 0.10, Ask, 10, Bid-0.0020, Bid+0.0020, NULL, 0, 120, clrNONE);    
       }
    fue para probarlo y me abre operacion tan solo en esa ventana, eso fue la prueba que hice.


    saludos
    Foro de Forex Trading United

  9. #8
    Avatar de tivag
    antecessor


    Reputación:
    Poder de reputación: 17

    Espana
    Mensajes: 659
    Créditos: 5.114

    Re: problema abriendo operaciones en diferentes pares (MT4)

    Cita Iniciado por trader0 Ver mensaje
    No tivag, no dice ningún error. Simplemente no abre operaciones. El código que publicaste por acá, no ta que fue sin utilizar el botón de etiquetar código. Estoy pensando que haya colocado las llaves de una manera diferente a como tu las estas colocando. ¿Es así como tu las estás colocando? ¿Podrías copiar y pegar y isando la función del foro "envolver con etiqueta CODE el código" para verlo tal cual lo estás colocando tu en tu MT4?

    Mira, esto es lo que yo estoy colocando, tal cual:

    Código:
       bool exists = false;
       for (int i=OrdersTotal()-1; i >= 0; i--)      
          {
          if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
             {
             if (OrderSymbol() == Symbol())
                {
                exists = true;
                }
             else
                {
                Alert("OrderSelect() error - ", GetLastError());
                }
             }
          
          if (exists == false)
             {
             int ticket1=OrderSend(NULL, OP_BUY, 0.10, Ask, 10, Bid-0.0020, Bid+0.0020, NULL, 0, 120, clrNONE);    
    
             }
          }


    Los códigos que colocaste, esta parte que dice:

    Código:
    bool exists = false;
        for (int i=OrdersTotal()-1; i >= 0; i--)
        if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
        {
            if (OrderType() == OP_BUY && OrderSymbol() == Symbol() && OrderMagicNumber() == 1)
    ¿Aquí seleccionará todas las operaciones que estubieran abiertas, sean cuantas sean, y revisará si el número mágico de la orden coresponde con el que pregunto (que en este caso 1)?


    Muchas gracias tivag por toda tu ayuda. Muy agradecido. Espero que pueda funcionarme ahora. Sigo buscando a ver por qué no me funciono aunque a ti te funcionó... ?? Ahí dejé el código tal cual lo estoy colocando por si encuentras algo difrente a como tu lo estás colocando pues si te funcionó a ti debería estarme funcionando a mi también... ??

    Gracias de nuevo.
    hola sin problemas te lo vuelvo a copiar con el code

    en el caso de por ejemplo si existe la orden de numero magico 1 que haga lo que quieras :

    Código:
    {
        bool exists = false;
        for (int i=OrdersTotal()-1; i >= 0; i--)
        if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
        {
            if (OrderType() == OP_BUY && OrderSymbol() == Symbol() && OrderMagicNumber() == 1)
            {
                exists = true;
            }
        }
        else
        {
            Print("OrderSelect() error - ", ErrorDescription(GetLastError()));
        }
        
        if (exists)
        {
            lo que quieras;
            
        }
    }
    en el caso de

    que si no existe la orden de numero magico 1 que haga lo que tu quieras:

    Código:
    {
        bool exists = false;
        for (int i=OrdersTotal()-1; i >= 0; i--)
        if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
        {
            if (OrderType() == OP_BUY && OrderSymbol() == Symbol() && OrderMagicNumber() == 1)
            {
                exists = true;
            }
        }
        else
        {
            Print("OrderSelect() error - ", ErrorDescription(GetLastError()));
        }
        
        if (exists == false)
        {
            lo que quieras();
            
        }
    }

    Y en el primer caso que te puse:

    Código:
    {
        bool exists = false;
        for (int i=OrdersTotal()-1; i >= 0; i--)
        if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
        {
            if (OrderSymbol() == Symbol())
            {
                exists = true;
            }
        }
        else
        {
            Print("OrderSelect() error - ", ErrorDescription(GetLastError()));
        }
        
        if (exists == false)
        {
            Siguiente bloque ();
            
        }
    }
    Efectivamente hay en lo que has puesto te pillara las ordenes buy de ese simbolo con numero magico 1, en este caso.

    Lo que puedes hacer para descartar cosas es por ejemplo si dudas que sea el codigo este pues haces un ea simple solo con ese codigo por ejemplo si no existe la buy nº magico 1 que compre y lo ejecutas y si no te funciona ya sabes que algo del codigo estas fallando, que se ejecuta entonces ya te toca ir mirando en el resto del ea que parte es la que falla , puede que sea un calculo , una condicion ...etc yo a veces cuando no doy donde puesde estar el error , les pongo que me pinte un arrow para saber en que parte si llega y en que parte no llega y asi voy descartando que parte del codigo puede ser, algo basto si pero efectivo cuando estas mareado jajaja.

    saludos y a ver si esta vez te sale bien
    Foro de Forex Trading United

  10. #9
    Avatar de Wolfman



    Reputación:
    Poder de reputación: 22

    Mensajes: 2.039
    Créditos: 8.196

    Re: problema abriendo operaciones en diferentes pares (MT4)

    Cita Iniciado por trader0 Ver mensaje
    ¿Alguien sabe cómo hacer para colocar en el código del EA de MT4, para que abra operaciones si no hay ninguna operación abierta "en ese par", independientemente de que haya una abierta en otro par?

    No se si te has explicado bien.

    Quieres que el expert vertifique primero si no hay operacion abierta en ese par primero?

    O solo quieres que envie la orden?

    Si es lo segundo solo debes de agregar despues de las condiciones establecidas para la apertura de operacion el comando Ordersend()


    Saludos.
    Foro de Forex Trading United



    "La mente es como un paracaídas, sólo funciona si se abre. Albert Einstein

  11. #10




    Reputación:
    Poder de reputación: 10

    Mensajes: 59
    Créditos: 0

    Re: problema abriendo operaciones en diferentes pares (MT4)


    Publi
    Cita Iniciado por trader0 Ver mensaje
    Muchas gracias tivag. Y si no es molestia, es que estuve probando el código y no está abriendo las operaciones. No se si sea que lo escribí mal. Mas abajo lo que coloqué...
    Cita Iniciado por tivag Ver mensaje
    hola he probado el codigo, tal cual lo has escrito , es decir, lo que he echo es un robot que sino existe nada en ese par me abra operacion, y a mi si me abre operaciones, asi que el error deberia estar en otro lado. No te marca ningun error en el diario?...
    No tivag, no dice ningún error. Simplemente no abre operaciones. El código que publicaste por acá, no ta que fue sin utilizar el botón de etiquetar código. Estoy pensando que haya colocado las llaves de una manera diferente a como tu las estas colocando. ¿Es así como tu las estás colocando? ¿Podrías copiar y pegar y isando la función del foro "envolver con etiqueta CODE el código" para verlo tal cual lo estás colocando tu en tu MT4?

    Mira, esto es lo que yo estoy colocando, tal cual:

    Código:
       bool exists = false;
       for (int i=OrdersTotal()-1; i >= 0; i--)      
          {
          if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
             {
             if (OrderSymbol() == Symbol())
                {
                exists = true;
                }
             else
                {
                Alert("OrderSelect() error - ", GetLastError());
                }
             }
          
          if (exists == false)
             {
             int ticket1=OrderSend(NULL, OP_BUY, 0.10, Ask, 10, Bid-0.0020, Bid+0.0020, NULL, 0, 120, clrNONE);    
    
             }
          }


    Los códigos que colocaste, esta parte que dice:

    Código:
    bool exists = false;
        for (int i=OrdersTotal()-1; i >= 0; i--)
        if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
        {
            if (OrderType() == OP_BUY && OrderSymbol() == Symbol() && OrderMagicNumber() == 1)
    ¿Aquí seleccionará todas las operaciones que estubieran abiertas, sean cuantas sean, y revisará si el número mágico de la orden coresponde con el que pregunto (que en este caso 1)?


    Muchas gracias tivag por toda tu ayuda. Muy agradecido. Espero que pueda funcionarme ahora. Sigo buscando a ver por qué no me funciono aunque a ti te funcionó... ?? Ahí dejé el código tal cual lo estoy colocando por si encuentras algo difrente a como tu lo estás colocando pues si te funcionó a ti debería estarme funcionando a mi también... ??

    Gracias de nuevo.
    Foro de Forex Trading United
    Última edición por trader0; 18:12 a las


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