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
Publi |
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
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Hola yokinfx.
¿ Podrías poner un ejemplo de código ?.
Gracias.
Saludos.Foro de Forex Trading United
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 antemanoForo de Forex Trading United
Desde luego, este codigo seguramente es demasiado complicado para algo tan sencillo como es capturar la penultima orden, pero bueno, es una posibilidad...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; } }
El codigo esta escrito sin haberlo probado, de hecho ni siquiera compilara tal y como esta, pero espero que haya sabido clarificar la ideaForo de Forex Trading United
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).
SaludosForo de Forex Trading United
Última edición por trader201; 23:21 a las Razón: ya lo anterior no viene al caso
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
Antes que nada, adelanto que hay muchas posibles maneras de hacer cualquier tarea. Y lo mismo pasa con la pregunta que haces.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
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
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?Desde luego, este codigo seguramente es demasiado complicado para algo tan sencillo como es capturar la penultima orden, pero bueno, es una posibilidad...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; } }
El codigo esta escrito sin haberlo probado, de hecho ni siquiera compilara tal y como esta, pero espero que haya sabido clarificar la ideaForo de Forex Trading United
Desde luego, este codigo seguramente es demasiado complicado para algo tan sencillo como es capturar la penultima orden, pero bueno, es una posibilidad...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; } }
El codigo esta escrito sin haberlo probado, de hecho ni siquiera compilara tal y como esta, pero espero que haya sabido clarificar la ideaGracias yokinfx. Ya me pondré a revisar todo esto para aprender a trabajar con estas funciones.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
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
Aviso Legal Ley Orgánica 15/1999, de 13 de diciembre, de Protección de Datos de Carácter Personal |