Ayuda problema abriendo operaciones en diferentes pares (MT4) - Página 2

 

Publi

problema abriendo operaciones en diferentes pares (MT4)

 

Publi

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


  1. #11

    Re: problema abriendo operaciones en diferentes pares (MT4)


    Publi
    A ver compis, que es lo que pretendeis conseguir con lo del ChartID() enfocado a discernir entre distintas órdenes???.

    MT4 no guarda ningún dato entre los diferentes propiedades de las órdenes que haga referencia a desde qué ID de char fue abierta dicha orden. Los datos a los que se tiene acceso, una vez buscadas y seleccionadas las órdenes correspondientes que nos interesen son:




    Lo que estais intentando se podría hacer, ya que en MT4 se puede hacer casi todo, pero no es absolutamente nada práctico ni útil por varias razones:

    1 - El ChartID() se utiliza para operaciones con gráficos y otras tareas varias que nada tienen que ver con selección de órdenes.

    2 - Habría que hacer un proceso más complejo para guardar el ID del chart desde el cual se ha abierto cada orden.

    3 - Y, sobre todo, los datos a los que podemos acceder fácilmente buscando las órdenes con normalidad como lo hace todo el mundo, (los que he enumerado más arriba) son más que suficientes para poder buscar y encontrar la orden u órdenes que necesitemos en todos los casos, sin tener que hacer este tipo de componendas.

    4 - Para lo que quereis, si es buscar si hay órdenes abiertas por un EA que esté anclado a un chart concreto es tan sencillo como poner el parámetro del Magic Number como parámetro externo (con el modificador input) y cada vez que anclemos el EA a un gráfico diferente, cambiarle ese valor, y ponerle un Magic Number diferente. Después en el código se buscan las órdenes con normalidad como lo hacemos todos (por aquí y por otro post ya se han puesto códigos para buscar órdenes por su Magic Number) y si no encuentra ninguna que lleve el Magic Number justo que hemos puesto en la instancia del EA que hemos adjuntado justo a ese gráfico, entonces ya se abre operación o se hace lo que se tenga por objetivo de hacer. Esto mismo se podría hacer con el OrderComment en lugar de con el Magic Number, pero es más rápido, práctico y eficiente hacerlo por el Magic Number.


    Me parece que ya lo comentó Tivag y algún otro compañero, y tal cual, os aseguro que si anclais el EA a 1000 gráficos diferentes del mismo par y en cada uno de esos 1000 gráficos le poneis un Magic Number diferente (para comodidad mediante parámetro externo), cuando busqueis una orden de entre todo el pool exigiéndole que tenga que tener ese Magic Number , no os encontrará otra que haya sido abierta desde otro chart, sino solo esa, si la hay. Y si no la encuentra, pues a aplicar lo que se quisiera aplicar.

    Saludos y un abrazo.
    Foro de Forex Trading United

  2. Publi
    Publi


  3. #12




    Reputación:
    Poder de reputación: 10

    Mensajes: 59
    Créditos: 0

    Re: problema abriendo operaciones en diferentes pares (MT4)

    Gracias tivag. Digamos que quiero hacer esto pero no con simbolos sino con la ventana, de manera que si tengo el EA asociado a 3 ventanas, aunque sean del mismo par, las tome por separadas. Es decir, si tengo este código:

    Código:
    if (OrdersTotal()==0)
       {
       int ticket1=OrderSend(NULL, OP_BUY, 0.10, Ask, 10, Bid-0.0020, Bid+0.0020, NULL, 0, 120, clrNONE);    
       }
    Y digamos que lo asocio a las 3 ventanas, cada una del Par GBP/USD. Si abre una posición en la
    primera ventana, el código considera en la segunda y la tercera como que no hay ninguna orden
    abierta, por lo que abrirá una en cada una.

    Estaba leyendo un poco y la función que me pareciera que sirve para esto es ChartID(), pues
    usando la función Alert() me di cuenta de que, aunque dice Chart (y no window) cada ventana
    tiene un número de chart. ¿Cómo podría decir algo como "en ventana actual", y luego
    colocar lo que quiera de manera que se que todo lo que coloque solo lo considerará para la
    ventana a la que está asociado el EA, independientemente de que tengan diferente o mismo par?

    Gracias de nuevo.
    Por supuesto mereces reputación. Ojalá tuviera mas puntos para que tuviera mas peso.
    Gracias de nuevo.
    Foro de Forex Trading United

  4. #13
    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
    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)
    Pues yo esta mañana hice la prueba poniendo directamente el nº de la id despues del == y me funciono, eso si , le tuve que poner los 0 que me marcaban para que me lo pillara, creo recordar que era el numero.00000 y cinco ceros consecutivos detras, pues o bien lo pones de forma manual o bien me imagino que funcionara en que la id la guardes en una variable y esa variable la pongas despues del ==. De todas formas para lo que tu querias lo de ordertotal == 0 te funcionaria.

    saludos
    Foro de Forex Trading United

  5. #14
    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
    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é.

    Antes de ver el código me gustaría preguntar, ¿este código funciona para abirir posiciones en pares diferentes y no en ventanas diferentes? es así no? Si es así, ¿hay forma de que sirva en caso de que las ventanas a las que se asocia el EA sean diferentes, así sean los mismos pares? es decir, que si yo tengo 3 ventanas abiertas del EUR/USD cada una , y asocio el EA a cada una, las tome por separado (si en una hay una posicion abierta pero en la otra OrdersTotal()==0, abra en esta en que no hay ninguna). ¿Sabes como puedo hacer esto?

    Aquí como lo puse que no está abriendo las operaciones:

    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);    
    
             }
          }

    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?

    Este codigo lo que te dice es que si no existe nada en ese par haga lo que quieras, es decir, ni exista ordenes abiertas ni ordenes pendientes en ese par, por lo que si tienes 3 ventanas del eur_usd y en una de ellas hay abierta algo o alguna pendiente no se te ejecutara en el resto de ventanas ( siempre y cuando tengas puesto ese codigo en el resto de ventanas jejej).

    No se si te he entendido bien la ultima parte, quieres que si en una ventana del eur_usd haya algo abierto pero en otra ventana no haya na abierto entonces que haga lo que quieras no? si es asi podrias jugar con los numeros magicos de las ordenes, poniendo en cada ventana un numero magico distinto, chequearlos si existen o no y hacer lo que sea....

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

    "{
    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;

    }
    }"


    y jugar tambien con que si no existe la orden de numero magico 1 que haga lo que tu quieras:


    "{
    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();

    }
    }

    "

    saludos espero que te sirva
    Foro de Forex Trading United

  6. #15
    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
    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?
    De nada , para eso estamos, efectivamente es asi , si no existe nada en ese par ( ni operaciones abiertas ni pendientes) que haga lo que tu quieras, espero que te sirva

    saludos
    Foro de Forex Trading United

  7. #16
    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
    Gracias tivag. Digamos que quiero hacer esto pero no con simbolos sino con la ventana, de manera que si tengo el EA asociado a 3 ventanas, aunque sean del mismo par, las tome por separadas. Es decir, si tengo este código:

    Código:
    if (OrdersTotal()==0)
       {
       int ticket1=OrderSend(NULL, OP_BUY, 0.10, Ask, 10, Bid-0.0020, Bid+0.0020, NULL, 0, 120, clrNONE);    
       }
    Y digamos que lo asocio a las 3 ventanas, cada una del Par GBP/USD. Si abre una posición en la
    primera ventana, el código considera en la segunda y la tercera como que no hay ninguna orden
    abierta, por lo que abrirá una en cada una.

    Estaba leyendo un poco y la función que me pareciera que sirve para esto es ChartID(), pues
    usando la función Alert() me di cuenta de que, aunque dice Chart (y no window) cada ventana
    tiene un número de chart. ¿Cómo podría decir algo como "en ventana actual", y luego
    colocar lo que quiera de manera que se que todo lo que coloque solo lo considerará para la
    ventana a la que está asociado el EA, independientemente de que tengan diferente o mismo par?

    Gracias de nuevo.
    Por supuesto mereces reputación. Ojalá tuviera mas puntos para que tuviera mas peso.
    Gracias de nuevo.
    Hola tal y como lo has puesto , si abres una operacion en una de ellas pongamos por ejemplo en la primera, entonces en las otras dos no abrira nada, entonces con esto ya haces lo que quieres. Ahora bien si quieres ir a la ventana pues te podria servir para lo que quieres el CharID() como muy bien dices. Yo veo mejor para lo que comentas que uses el orderstotal, te sera mas rapido y comodo, sino pues usando distintos numeros magicos seria otra opcion todo depende que haga tu robot uno te vendra mejor que otro.

    saludos

    Código:
    if (ChartID()== el numero que sea la id)
       {
       lo que quieras;    
       }
    Foro de Forex Trading United

  8. #17
    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)

    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 ();

    }
    }
    Foro de Forex Trading United

  9. #18




    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
    De nada , para eso estamos, efectivamente es asi , si no existe nada en ese par ( ni operaciones abiertas ni pendientes) que haga lo que tu quieras, espero que te sirva

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

    Antes de ver el código me gustaría preguntar, ¿este código funciona para abirir posiciones en pares diferentes y no en ventanas diferentes? es así no? Si es así, ¿hay forma de que sirva en caso de que las ventanas a las que se asocia el EA sean diferentes, así sean los mismos pares? es decir, que si yo tengo 3 ventanas abiertas del EUR/USD cada una , y asocio el EA a cada una, las tome por separado (si en una hay una posicion abierta pero en la otra OrdersTotal()==0, abra en esta en que no hay ninguna). ¿Sabes como puedo hacer esto?

    Aquí como lo puse que no está abriendo las operaciones:

    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);    
    
             }
          }
    Foro de Forex Trading United

  10. #19




    Reputación:
    Poder de reputación: 12

    Mensajes: 17
    Créditos: 426

    Re: problema abriendo operaciones en diferentes pares (MT4)


    Publi
    Cita Iniciado por Wolfman Ver mensaje
    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.
    Imagino que asignandoles un magicnumber diferente para cada par.
    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