Pregunta ¿Cómo utilizar OrderSelect con MODE_HISTORY?

 

Publi

¿Cómo utilizar OrderSelect con MODE_HISTORY?

 

Publi

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


  1. #1

    Re: ¿Cómo utilizar OrderSelect con MODE_HISTORY?


    Publi
    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



  2. Publi
    Publi


  3. #2
    Avatar de Vinisius
    Erectus


    Reputación:
    Poder de reputación: 12

    Espana
    Mensajes: 312
    Créditos: 126

    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

  4. #3

    antecessor


    Reputación:
    Poder de reputación: 15

    Venezuela
    Mensajes: 589
    Créditos: 2.342

    ¿Cómo utilizar OrderSelect con MODE_HISTORY?

    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

  5. #4

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

    Venezuela
    Mensajes: 589
    Créditos: 2.342

    Re: ¿Cómo utilizar OrderSelect con MODE_HISTORY?

    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; 23:21 a las Razón: ya lo anterior no viene al caso


  7. #6

    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

    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



  9. #8

    antecessor


    Reputación:
    Poder de reputación: 15

    Venezuela
    Mensajes: 589
    Créditos: 2.342

    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

  10. #9

    antecessor


    Reputación:
    Poder de reputación: 15

    Venezuela
    Mensajes: 589
    Créditos: 2.342

    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

  11. #10

    antecessor


    Reputación:
    Poder de reputación: 15

    Venezuela
    Mensajes: 589
    Créditos: 2.342

    Re: ¿Cómo utilizar OrderSelect con MODE_HISTORY?


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

    Pero remarco también la frase "...a veces responden como si uno supiera del tema...", porque no siempre es así.
    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