- Evento principal de Asesores Expertos: OnTick
- Principios y conceptos básicos: orden, transacción y posición
- Tipos de operaciones de trading
- Tipos de órdenes
- Modos de ejecución de órdenes por precio y volumen
- Fechas de vencimiento de órdenes pendientes
- Cálculo del margen para una orden futura: OrderCalcMargin
- Estimación del beneficio de una operación de trading: OrderCalcProfit
- Estructura MqlTradeRequest
- Estructura MqlTradeCheckResult
- Solicitar validación: OrderCheck
- Solicitar resultado del envío: estructura MqlTradeResult
- Enviar una solicitud de trading: OrderSend y OrderSendAsync
- Operaciones de compraventa
- Modificar los niveles de Stop Loss y/o Take Profit de una posición
- Trailing stop
- Cierre de una posición: total y parcial
- Cierre de posiciones opuestas: total y parcial
- Colocar una orden pendiente
- Modificar una orden pendiente
- Borrar una orden pendiente
- Obtener una lista de órdenes activas
- Propiedades de una orden (activas e históricas)
- Funciones para leer las propiedades de órdenes activas
- Seleccionar órdenes por propiedades
- Obtener la lista de posiciones
- Propiedades de posiciones
- Funciones de lectura de propiedades de posición
- Propiedades de transacción
- Seleccionar órdenes y transacciones del historial
- Funciones para leer propiedades de órdenes del historial
- Funciones para leer propiedades de transacciones del historial
- Tipos de transacciones de trading
- Evento OnTradeTransaction
- Peticiones síncronas y asíncronas
- Evento OnTrade
- Seguimiento de los cambios en el entorno de trading
- Crear Asesores Expertos multisímbolo
- Limitaciones y ventajas de los Asesores Expertos
- Crear Asesores Expertos en el Asistente MQL
Propiedades de una orden (activas y del historial)
En las secciones relacionadas con las operaciones de trading, en concreto para hacer compra/venta, cerrar una posición y colocar una orden pendiente, hemos visto que las solicitudes se envían al servidor en función de la cumplimentación de campos específicos de la estructura MqlTradeRequest, la mayoría de los cuales definen directamente las propiedades de las órdenes resultantes. La API de MQL5 permite conocer estas y algunas otras propiedades establecidas por el propio sistema de trading, como ticket, hora de registro y estado.
Es importante señalar que la lista de propiedades de la orden es común tanto para las órdenes activas como para las históricas, aunque, por supuesto, los valores de muchas propiedades serán diferentes para ellas.
Las propiedades de orden se agrupan en MQL5 según el principio que ya nos es familiar basado en el tipo de valores: entero (compatible con long/ulong), real (double) y cadenas. Cada grupo de propiedades tiene su propia enumeración.
Las propiedades de los enteros se resumen en ENUM_ORDER_PROPERTY_INTEGER y se presentan en la tabla siguiente:
Identificador |
Descripción |
Tipo |
|---|---|---|
ORDER_TYPE |
Tipo de orden |
|
ORDER_TYPE_FILLING |
Tipo de ejecución por volumen |
|
ORDER_TYPE_TIME |
Duración de la orden (pendiente) |
|
ORDER_TIME_EXPIRATION |
Hora de vencimiento de la orden (pendiente) |
datetime |
ORDER_MAGIC |
Identificador arbitrario establecido por el Asesor Experto que colocó la orden. |
ulong |
ORDER_TICKET |
Ticket de la orden; número único asignado por el servidor a cada orden. |
ulong |
ORDER_STATE |
Estado de la orden |
ENUM_ORDER_STATE (véase más abajo) |
ORDER_REASON |
Motivo u origen de la orden |
ENUM_ORDER_REASON (véase más abajo) |
ORDER_TIME_SETUP |
Tiempo de colocación de la orden |
datetime |
ORDER_TIME_DONE |
Hora de ejecución o retirada de la orden |
datetime |
ORDER_TIME_SETUP_MSC |
Tiempo de colocación de la orden para su ejecución en milisegundos |
ulong |
ORDER_TIME_DONE_MSC |
Tiempo de ejecución/retirada de la orden en milisegundos |
ulong |
ORDER_POSITION_ID |
ID de la posición que la orden generó o modificó al ejecutarse |
ulong |
ORDER_POSITION_BY_ID |
Identificador de posición opuesta para órdenes de tipo ORDER_TYPE_CLOSE_BY |
ulong |
Cada orden ejecutada genera una transacción que abre una posición nueva o modifica una existente. El ID de esta posición se asigna a la orden ejecutada en la propiedad ORDER_POSITION_ID.
La enumeración ENUM_ORDER_STATE contiene elementos que describen los estados de las órdenes. Vea a continuación un esquema simplificado (diagrama de estados) de las órdenes:
Identificador |
Descripción |
|---|---|
ORDER_STATE_STARTED |
Se ha comprobado que la orden es correcta, pero el servidor aún no la ha aceptado. |
ORDER_STATE_PLACED |
La orden ha sido aceptada por el servidor. |
ORDER_STATE_CANCELED |
La orden ha sido cancelada por el cliente (usuario o programa MQL). |
ORDER_STATE_PARTIAL |
La orden se ha ejecutado parcialmente. |
ORDER_STATE_FILLED |
La orden se ha realizado en su totalidad. |
ORDER_STATE_REJECTED |
La orden ha sido rechazada por el servidor. |
ORDER_STATE_EXPIRED |
La orden se ha cancelado al vencimiento. |
ORDER_STATE_REQUEST_ADD |
La orden se está registrando (se está colocando en el sistema de trading). |
ORDER_STATE_REQUEST_MODIFY |
Se modifica la orden (se cambian sus parámetros). |
ORDER_STATE_REQUEST_CANCEL |
La orden se está borrando (eliminando del sistema de trading). |

Diagrama del estado de la orden
El cambio de estado sólo es posible para las órdenes activas. Para las órdenes históricas (ejecutadas o canceladas), el estado es fijo.
Puede cancelar una orden que ya se ha cumplido parcialmente, y entonces su estado en el historial será ORDER_STATE_CANCELED.
ORDER_STATE_PARTIAL sólo se produce para órdenes activas. Las órdenes ejecutadas (históricas) siempre tienen el estado ORDER_STATE_FILLED.
La enumeración ENUM_ORDER_REASON especifica las posibles opciones de origen de la orden.
Identificador |
Descripción |
|---|---|
ORDER_REASON_CLIENT |
Orden cursada manualmente desde el terminal de sobremesa |
ORDER_REASON_EXPERT |
Orden cursada desde el terminal de sobremesa por un Asesor Experto o un script |
ORDER_REASON_MOBILE |
Orden cursada desde la aplicación móvil |
ORDER_REASON_WEB |
Orden cursada desde el terminal web (navegador) |
ORDER_REASON_SL |
Orden cursada por el servidor como resultado de la activación de Stop Loss |
ORDER_REASON_TP |
Orden cursada por el servidor como resultado de la activación de Take Profit |
ORDER_REASON_SO |
Orden cursada por el servidor como resultado del evento Stop Out |
Las propiedades reales se recopilan en la enumeración ENUM_ORDER_PROPERTY_DOUBLE.
Identificador |
Descripción |
|---|---|
ORDER_VOLUME_INITIAL |
Volumen inicial al cursar una orden |
ORDER_VOLUME_CURRENT |
Volumen actual (inicial o restante tras la ejecución parcial) |
ORDER_PRICE_OPEN |
El precio indicado en la orden |
ORDER_PRICE_CURRENT |
El precio actual del símbolo de una orden que aún no se ha ejecutado o el precio de ejecución. |
ORDER_SL |
Nivel de Stop Loss |
ORDER_TP |
Nivel de Take Profit |
ORDER_PRICE_STOPLIMIT |
Precio de colocación de una orden Limit cuando se activa una orden StopLimit. |
La propiedad ORDER_PRICE_CURRENT contiene el precio Ask actual para órdenes pendientes de compra activas o el precio Bid para órdenes pendientes de venta activas. «Actual» se refiere al precio conocido en el entorno de trading en el momento en que se selecciona la orden mediante OrderSelect o OrderGetTicket. Para las órdenes ejecutadas en el historial, esta propiedad contiene el precio de ejecución, que puede diferir del especificado en la orden debido al deslizamiento.
Las propiedades ORDER_VOLUME_INITIAL y ORDER_VOLUME_CURRENT no son iguales entre sí sólo si el estado de la orden es ORDER_STATE_PARTIAL.
Si la orden se ejecutó por partes, entonces su propiedad ORDER_VOLUME_INITIAL en el historial será igual al tamaño de la última parte ejecutada, y todas las demás «ejecuciones» relacionadas con el volumen completo original se ejecutarán como órdenes (y transacciones) independientes.
Las propiedades de cadena se describen en la enumeración ENUM_ORDER_PROPERTY_STRING.
Identificador |
Descripción |
|---|---|
ORDER_SYMBOL |
El símbolo sobre el que se coloca la orden |
ORDER_COMMENT |
Comentario |
ORDER_EXTERNAL_ID |
ID de la orden en el sistema de trading externo (en la bolsa) |
Para leer todas las propiedades anteriores existen dos conjuntos de funciones diferentes: para órdenes activas y para órdenes históricas. En primer lugar, consideraremos las funciones para órdenes activas, y volveremos a las históricas después de familiarizarnos con los principios de selección del periodo necesario en el historial.