Publi

Publi

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


  1. #1

    antecessor


    Reputación:
    Poder de reputación: 8

    Venezuela
    Mensajes: 597
    Créditos: 2,154

    ¿Cómo utilizar OrderSelect con MODE_HISTORY?


    Publi
    Saludos.

    A ver si alguien puede explicarme esto, que me dió bastante curiosidad:

    Según entendí, uno puede selecionar (en MQL4) una orden que ya fue cerrada o cancelada, utilizando la función OrderSelect, si coloco en sus parámetros el ticket de la orden, por supuesto el SELECT_BY_TICKET (para indicarle que seleccionará por ticket) y MODE_HISTORY (que aquí le estoy diciendo que la orden se trata de una en el histórico, es decir, que no se trara de una abierta ni pendiente, sino una que fue ya cerrada o cancelada).

    La duda que tengo es: si tengo un EA que abre posiciones, y le coloco un ticket, cada vez que se ejecute esta orden, siempre tendrá el mismo ticket (estoy pensando en el ticket como el magic number, no se si a esto se deba mi duda). Entiendo que, gracias a MODE_HISTORY mql4 sabrá que se trata de una operación ya cerrada o una pendiente que fue cancelada. Pero ¿cómo hago si quiero referirme por ejemplo, no a la última operación cerrada sino a la penúltima?


    Gracias de antemano
    Foro de Forex Trading United

     

  2.                         
    Publi
  3. #2
    Avatar de yokinfx
    Erectus


    Reputación:
    Poder de reputación: 7

    Mensajes: 246
    Créditos: 1,326

    Re: ¿Cómo utilizar OrderSelect con MODE_HISTORY?

    Cita Iniciado por trader201 Ver mensaje
    Saludos.

    A ver si alguien puede explicarme esto, que me dió bastante curiosidad:

    Según entendí, uno puede selecionar (en MQL4) una orden que ya fue cerrada o cancelada, utilizando la función OrderSelect, si coloco en sus parámetros el ticket de la orden, por supuesto el SELECT_BY_TICKET (para indicarle que seleccionará por ticket) y MODE_HISTORY (que aquí le estoy diciendo que la orden se trata de una en el histórico, es decir, que no se trara de una abierta ni pendiente, sino una que fue ya cerrada o cancelada).

    La duda que tengo es: si tengo un EA que abre posiciones, y le coloco un ticket, cada vez que se ejecute esta orden, siempre tendrá el mismo ticket (estoy pensando en el ticket como el magic number, no se si a esto se deba mi duda). Entiendo que, gracias a MODE_HISTORY mql4 sabrá que se trata de una operación ya cerrada o una pendiente que fue cancelada. Pero ¿cómo hago si quiero referirme por ejemplo, no a la última operación cerrada sino a la penúltima?


    Gracias de antemano
    Antes que nada, adelanto que hay muchas posibles maneras de hacer cualquier tarea. Y lo mismo pasa con la pregunta que haces.

    El ticket es un identificador unico de una orden. Da igual que ésta se encuentre abierta o cerrada, cada orden tiene su "matricula" personal, independientemente de que este abierta o cerrada.
    Lo que sucede, como tu bien dices, es que MT4 tiene un sistema para distinguir si una orden esta abierta o ya se cerro, que es con la opcion de MODE_TRADES o MODE_HISTORY, como tu bien indicas.

    Los tickets van aumentando progresivamente, siendo los numeros mas grandes correspondientes a ordenes abiertas mas tarde. Pero mi consejo es que no te fies de este hecho: O sea, si quieres encontrar la penultima orden cerrada, no te guies por el ticket de MODE_HISTORY con el 2º valor mas grande. Mi consejo es que lo hagas, mas bien, por la fecha: la penultima orden es aquella orden que tenga una fecha de cierre menor que la ultima orden, pero mayor que la antepenultima. Asi de sencillo (y asi de dificil)
    Foro de Forex Trading United



  4. #3
    Avatar de Vinisius
    Erectus


    Reputación:
    Poder de reputación: 5

    Espana
    Mensajes: 309
    Créditos: 50

    Re: ¿Cómo utilizar OrderSelect con MODE_HISTORY?

    -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------

    Hola yokinfx.

    ¿ Podrías poner un ejemplo de código ?.


    Gracias.


    Saludos.
    Foro de Forex Trading United

     

  5. #4
    Avatar de yokinfx
    Erectus


    Reputación:
    Poder de reputación: 7

    Mensajes: 246
    Créditos: 1,326

    Re: ¿Cómo utilizar OrderSelect con MODE_HISTORY?

    Cita Iniciado por Vinisius Ver mensaje
    -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------

    Hola yokinfx.

    ¿ Podrías poner un ejemplo de código ?.


    Gracias.


    Saludos.
    Código:
    //Orden a capturar: 2 (la penultima)
    int orden_cerrada = 2;
    datetime cierres[2];    //cierres[0] = ultimo cierre. cierres[1] = penultimo cierre
    ArrayInitialize(cierres,0);
    for (int i=OrdersHistoryTotal()-1; i>=0; i--) {
    if (!OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)) break;
    if (OrderCloseTime(.. ... ... ) > cierres[1]) cierres[1] = OrderCloseTime(.. .. ..);
    if (cierres[1] > cierres[0]) { datetime aux = cierres[0]; cierres[0] = cierres[1]; if (aux > 0) cierres[1] = aux; }
    }
    Desde luego, este codigo seguramente es demasiado complicado para algo tan sencillo como es capturar la penultima orden, pero bueno, es una posibilidad...

    El codigo esta escrito sin haberlo probado, de hecho ni siquiera compilara tal y como esta, pero espero que haya sabido clarificar la idea
    Foro de Forex Trading United



  6. #5

    antecessor


    Reputación:
    Poder de reputación: 8

    Venezuela
    Mensajes: 597
    Créditos: 2,154

    Re: ¿Cómo utilizar OrderSelect con MODE_HISTORY?

    Cita Iniciado por yokinfx Ver mensaje
    Código:
    //Orden a capturar: 2 (la penultima)
    int orden_cerrada = 2;
    datetime cierres[2];    //cierres[0] = ultimo cierre. cierres[1] = penultimo cierre
    ArrayInitialize(cierres,0);
    for (int i=OrdersHistoryTotal()-1; i>=0; i--) {
    if (!OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)) break;
    if (OrderCloseTime(.. ... ... ) > cierres[1]) cierres[1] = OrderCloseTime(.. .. ..);
    if (cierres[1] > cierres[0]) { datetime aux = cierres[0]; cierres[0] = cierres[1]; if (aux > 0) cierres[1] = aux; }
    }
    Desde luego, este codigo seguramente es demasiado complicado para algo tan sencillo como es capturar la penultima orden, pero bueno, es una posibilidad...

    El codigo esta escrito sin haberlo probado, de hecho ni siquiera compilara tal y como esta, pero espero que haya sabido clarificar la idea
    Gracias yokinfx. Si no es mucho, ¿Podrías colocar una de seleccionar por ticket, el cómo se coloca para seleccionar la penúltima operación cerrada?
    Foro de Forex Trading United

     

  7. #6
    Avatar de yokinfx
    Erectus


    Reputación:
    Poder de reputación: 7

    Mensajes: 246
    Créditos: 1,326

    Re: ¿Cómo utilizar OrderSelect con MODE_HISTORY?

    Cita Iniciado por trader201 Ver mensaje
    Gracias yokinfx. Si no es mucho, ¿Podrías colocar una de seleccionar por ticket, el cómo se coloca para seleccionar la penúltima operación cerrada?
    Para hacer eso necesitas tener los tickets en algun lado. En un array, por ejemplo. Si no los has guardado en ningun lado, en tu programa solo sabes 'a priori' el numero de ordenes que tienes, tanto abiertas como cerradas. De ahi lo del OrdersTotal() y OrdersHistoryTotal(). Esas funciones solo devuelven número de órdenes, pero no tickets.

    Ahora, supongamos que tienes los tickets guardados en un array. Algo como esto:
    Código:
    //Tickets guardados en array tickets[]
    for (int i=0; i<ArraySize(tickets)-1; i++) {
    if (OrderSelect(i,SELECT_BY_TICKET,MODE_HISTORY)) { //Todo el meollo que quieras hacer
    
    }
    }
    Foro de Forex Trading United



  8. #7

    antecessor


    Reputación:
    Poder de reputación: 8

    Venezuela
    Mensajes: 597
    Créditos: 2,154

    Re: ¿Cómo utilizar OrderSelect con MODE_HISTORY?

    Cita Iniciado por yokinfx Ver mensaje
    Código:
    //Orden a capturar: 2 (la penultima)
    int orden_cerrada = 2;
    datetime cierres[2];    //cierres[0] = ultimo cierre. cierres[1] = penultimo cierre
    ArrayInitialize(cierres,0);
    for (int i=OrdersHistoryTotal()-1; i>=0; i--) {
    if (!OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)) break;
    if (OrderCloseTime(.. ... ... ) > cierres[1]) cierres[1] = OrderCloseTime(.. .. ..);
    if (cierres[1] > cierres[0]) { datetime aux = cierres[0]; cierres[0] = cierres[1]; if (aux > 0) cierres[1] = aux; }
    }
    Desde luego, este codigo seguramente es demasiado complicado para algo tan sencillo como es capturar la penultima orden, pero bueno, es una posibilidad...

    El codigo esta escrito sin haberlo probado, de hecho ni siquiera compilara tal y como esta, pero espero que haya sabido clarificar la idea
    Cita Iniciado por yokinfx Ver mensaje
    Para hacer eso necesitas tener los tickets en algun lado. En un array, por ejemplo. Si no los has guardado en ningun lado, en tu programa solo sabes 'a priori' el numero de ordenes que tienes, tanto abiertas como cerradas. De ahi lo del OrdersTotal() y OrdersHistoryTotal(). Esas funciones solo devuelven número de órdenes, pero no tickets.

    Ahora, supongamos que tienes los tickets guardados en un array. Algo como esto:
    Código:
    //Tickets guardados en array tickets[]
    for (int i=0; i<ArraySize(tickets)-1; i++) {
    if (OrderSelect(i,SELECT_BY_TICKET,MODE_HISTORY)) { //Todo el meollo que quieras hacer
    
    }
    }
    Gracias yokinfx. Ya me pondré a revisar todo esto para aprender a trabajar con estas funciones.
    Foro de Forex Trading United

     

  9. #8

    antecessor


    Reputación:
    Poder de reputación: 8

    Venezuela
    Mensajes: 597
    Créditos: 2,154

    Re: ¿Cómo utilizar OrderSelect con MODE_HISTORY?

    Cita Iniciado por yokinfx Ver mensaje
    Código:
    //Orden a capturar: 2 (la penultima)
    int orden_cerrada = 2;
    datetime cierres[2];    //cierres[0] = ultimo cierre. cierres[1] = penultimo cierre
    ArrayInitialize(cierres,0);
    for (int i=OrdersHistoryTotal()-1; i>=0; i--) {
    if (!OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)) break;
    if (OrderCloseTime(.. ... ... ) > cierres[1]) cierres[1] = OrderCloseTime(.. .. ..);
    if (cierres[1] > cierres[0]) { datetime aux = cierres[0]; cierres[0] = cierres[1]; if (aux > 0) cierres[1] = aux; }
    }
    Desde luego, este codigo seguramente es demasiado complicado para algo tan sencillo como es capturar la penultima orden, pero bueno, es una posibilidad...

    El codigo esta escrito sin haberlo probado, de hecho ni siquiera compilara tal y como esta, pero espero que haya sabido clarificar la idea

    ¿por qué "int orden_cerrada = 2;" al comienzo, si veo que nunca se utilizó? ¿o si se utilizó pero no conozco esa forma?

    Gracias de nuevo.
    Foro de Forex Trading United

     

  10. #9
    Avatar de yokinfx
    Erectus


    Reputación:
    Poder de reputación: 7

    Mensajes: 246
    Créditos: 1,326

    Re: ¿Cómo utilizar OrderSelect con MODE_HISTORY?

    Ooops. Si, se me coló. Empecé a escribirlo de una forma, pero luego lo hice de otra y se me olvido borrar esa linea. No hace nada, lo puedes borrar.
    Foro de Forex Trading United



  11. #10

    antecessor


    Reputación:
    Poder de reputación: 8

    Venezuela
    Mensajes: 597
    Créditos: 2,154

    Re: ¿Cómo utilizar OrderSelect con MODE_HISTORY?


    Publi
    yokinfx.

    Te cuento que estoy aprendiendo mql4, y he estado interesado en aprender a seleccionar datos de Internet, seleccionar datos de históricos de la cuenta y seleccionar datos de otra ventana de precio diferente a donde esté corriendo en EA. Para aprender estas cosas ya había preguntado antes en el foro de MQL4, donde a veces responden como si uno supiera del tema, es decir, pareciera que responden mas para sentirse importantes porque conocen un término del área o simplemente no poniéndose en el lugar del otro. Eso me lleva a seguir y seguir preguntando, a veces sin tener respuesta, a veces sin siquiera como una pista.

    Por eso creo que debo darte reputación (y te debo otra).

    Saludos
    Foro de Forex Trading United
    Última edición por trader201; 16-07-2014 a las 23:21 Razón: ya lo anterior no viene al caso

     

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