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

ENUM_ORDER_TYPE

ORDER_TYPE_FILLING

Tipo de ejecución por volumen

ENUM_ORDER_TYPE_FILLING

ORDER_TYPE_TIME

Duración de la orden (pendiente)

ENUM_ORDER_TYPE_TIME

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).

Gráfico del estado de la orden

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.