Publi |
Publi |
Menuda respuesta... no merece menos que reputacion!!
Foro de Forex Trading United
Reputacion y gracias
Foro de Forex Trading United
Buenas, pongo esto aquí porque lo veo más adecuado en la sección de EAS que en la de METATRADER. Un compañero (trader201) planteó la duda y creo que puedo para arrojar algo de luz sobre el tema
(posiblemente si veo este post dentro de unos meses reniegue, pero bueno...)
Introducción.
Las ordenes/operaciones en METATRADER se van numerando por sesión, empezando por la uno, a esto se le llama número de ticket.
Si tenemos 2 EAS funcionando estos crearán ordenes usando el siguiente número de ticket disponible por lo cual, la única forma que tiene un EA de "saber" qué operaciones son "suyas" es a través del Magic Number. DesertEagle lo explica mejor en este post.
Seleccionar/Buscar Ordenes
Para seleccionar una operación deberemos buscarla y en este punto conviene destacar que existen 2 tipos de operaciones y no me refiero a las que nos dan beneficios o pérdidas
MODE_TRADES - Es la lista de las ordenes abiertas.
MODE_HISTORY - Contiene las ordenes ya cerradas.
La función para seleccionar ordenes es OrderSelect(int index, int select, int pool=MODE_TRADES)
Si conocemos el número de ticket de la orden basta con ejecutar:
Encontrado = OrderSelect(69, SELECT_BY_TICKET,MODE_TRADES);
En este caso le estoy diciendo que me seleccione la orden 69, le digo que el 69 es un numero de ticket... y además le estoy diciendo que busque en las ordenes abiertas. Si la búsqueda tiene éxito Encontrado contrendrá true y habremos "seleccionado" la operación.
Una vez seleccionada la orden, podemos obtener información sobre ella, por ejemplo con alguna de estas instrucciones:
OrderClosePrice
OrderCloseTime
OrderComment
OrderCommission
OrderExpiration
OrderLots
OrderMagicNumber
OrderOpenPrice
OrderOpenTime
OrderProfit
OrderStopLoss
OrdersTotal
OrderSwap
OrderSymbol
OrderTakeProfit
OrderTicket
OrderType
Si no conocemos el número de ticket, no nos queda más remedio que "rebuscar" entre todas las operaciones realizadas hasta encontrar la que buscamos y esto se haría con un bucle. Y como no sabemos el número de ticket, en cada ciclo del bucle debemos examinar cada operación para determinar si es la que buscamos... pondré un ejemplo.
Supongamos que busco mi ultima operación cerrada. la búsqueda debería ser algo así:
Espero que no haya quedado muy complicado...// no inicializamos esta variable de forma intencionada
datetime ultima_fecha_cierre;
// determino el numero de ordenes que hay en el historial
int ordenes = OrdersHistoryTotal()
int mi_ultima_orden = 0;
for(int contador=0;contador<ordenes;contador++)
{
// con esto busco y al mismo tiempo verifico que haya seleccionado correctamente
if(OrderSelect(contador,SELECT_BY_POS,MODE_HISTORY)==false) continue;
if (ultima_fecha_cierre < OrderCloseTime())
{
// con esto obtengo el numero y la fecha_hora de la orden cerrada más recientemente
mi_ultima_orden = OrderTicket();
ultima_fecha_cierre = OrderCloseTime();
}
}
// finalmente la seleccionamos
Encontrado = OrderSelect(mi_ultima_orden, SELECT_BY_TICKET,MODE_HISTORY)
salu2Foro de Forex Trading United
Última edición por wildfandango; 15:52 a las
Aviso Legal Ley Orgánica 15/1999, de 13 de diciembre, de Protección de Datos de Carácter Personal |