- Estructura de fecha
- Estructura de parámetros de entrada de indicador
- Estructura de datos históricos
- Estructura de profundidad de mercado
- Estructura de solicitud comercial
- Estructura de resultados de verificación de una solicitud comercial
- Estructura de resultado de solicitud comercial
- Structure of a Trade Transaction
- Estructura para obtención de precios actuales
- Estructuras del calendario económico
Estructura de transacción comercial (MqlTradeTransaction)
Como resultado de ejecución de ciertas acciones con la cuenta de trading su estado se cambia. A estas acciones les pertenecen:
- El envío de una solicitud comercial por parte de cualquier aplicación MQL5 en el terminal de cliente utilizando la función OrderSend y OrderSendAsync, con su posterior ejecución;
- El envío de una solicitud comercial a través de la interfaz gráfica del terminal y su posterior ejecución;
- El accionamiento de órdenes pendientes y órdenes Stop en el servidor;
- La ejecución de operaciones en el servidor de trading.
Como resultado de estas acciones, para la cuenta se ejecutan las transacciones comerciales:
- tramitación de la solicitud comercial;
- cambio de órdenes abiertas;
- cambio del historial de órdenes;
- cambio del historial de operaciones;
- cambio de posiciones.
Por ejemplo, al enviar una orden de compra, ésta se tramita, para la cuenta se crea una orden de compra correspondiente, se realiza la ejecución de la orden, su eliminación de la lista de las abiertas, se agrega al historial de órdenes, luego la operación correspondiente se agrega al historial, y se crea una posición nueva. Pues todas estas acciones son transacciones comerciales.
Para recibir las transacciones comerciales que se aplican a la cuenta, en MQL5 ha sido diseñado un manejador especial OnTradeTransaction(). En el primer parámetro de este manejador se traspasa la estructura MqlTradeTransaction que describe las transacciones comerciales.
struct MqlTradeTransaction
{
ulong deal; // Ticket de la operación
ulong order; // Ticket de la orden
string symbol; // Nombre del instrumento financiero
ENUM_TRADE_TRANSACTION_TYPE type; // Tipo de transacción comercial
ENUM_ORDER_TYPE order_type; // Tipo de la orden
ENUM_ORDER_STATE order_state; // Estado de la orden
ENUM_DEAL_TYPE deal_type; // Tipo de la operación
ENUM_ORDER_TYPE_TIME time_type; // Tipo de la orden según el tiempo de ejecución
datetime time_expiration; // Plazo de vencimiento de la orden
double price; // Precio
double price_trigger; // Precio de activación de la orden stop limitada
double price_sl; // Nivel Stop Loss
double price_tp; // Nivel Take Profit
double volume; // Volumen en lotes
ulong position; // Position ticket
ulong position_by; // Comentarios sobre la orden
};
Descripción de campos
Campo |
Descripción |
---|---|
deal |
Ticket de la operación. |
order |
Ticket de la orden. |
symbol |
Nombre del instrumento financiero para el que se realiza la transacción. |
type |
Tipo de transacción comercial. El valor puede ser uno de los valores de la enumeración ENUM_TRADE_TRANSACTION_TYPE. |
order_type |
Tipo de orden comercial. El valor puede ser uno de los valores de la enumeración ENUM_ORDER_TYPE. |
order_state |
Estado de orden comercial. El valor puede ser uno de los valores de la enumeración ENUM_ORDER_STATE. |
deal_type |
Tipo de operación. El valor puede ser uno de los valores de la enumeración ENUM_DEAL_TYPE. |
time_type |
Tipo de la orden según su expiración. El valor puede ser uno de los valores de la enumeración ENUM_ORDER_TYPE_TIME. |
time_expiration |
Plazo de expiración de la orden pendiente (para las órdenes del tipo ORDER_TIME_SPECIFIED y ORDER_TIME_SPECIFIED_DAY). |
price |
Precio. En función del tipo de la transacción comercial puede ser el precio de la orden, operación o posición. |
price_trigger |
Precio stop (precio de activación) de la orden stop limitada (ORDER_TYPE_BUY_STOP_LIMIT y ORDER_TYPE_SELL_STOP_LIMIT). |
price_sl |
Precio Stop Loss. En función del tipo de la transacción comercial puede referirse al precio de la orden, operación o posición. |
price_tp |
Precio Take Profit. En función del tipo de la transacción comercial puede referirse al precio de la orden, operación o posición. |
volume |
Volumen en lotes. En función del tipo de la transacción comercial puede referirse al volumen actual de la orden, volumen de la operación o volumen de la posición. |
position |
Ticket de la posición a la que ha influido la transacción. |
position_by |
Ticket de la posición opuesta. Se usa al cerrar una posición con otra opuesta, abierta en el mismo instrumento, pero en dirección contraria. |
El parámetro determinante para el análisis de una transacción que llega es su tipo que figura en el campo type. Por ejemplo, si la transacción es del tipo TRADE_TRANSACTION_REQUEST (el resultado de procesamiento de la solicitud por parte del servidor ha sido recibido), entonces la estructura tiene sólo un campo rellenado type, los demás no hace falta analizar. En este caso se puede realizar el análisis de dos campos adicionales request y result que se pasan al manejador OnTradeTransaction(), tal como se muestra en el ejemplo de abajo.
Teniendo información sobre el tipo de la operación comercial, se puede tomar la decisión sobre el análisis del estado actual de la orden, posición y transacciones (deals) en la cuenta de trading. Hay que tener en cuenta que una solicitud comercial enviada del terminal al servidor puede provocar varias transacciones (transactions) comerciales, cuya orden de llegada al terminal no se garantiza.
La estructura MqlTradeTransaction se llena de una manera diferente en función del tipo de transacción comercial (ENUM_TRADE_TRANSACTION_TYPE):
TRADE_TRANSACTION_ORDER_* y TRADE_TRANSACTION_HISTORY_*
Para las transacciones comerciales que conciernen el procesamiento de las órdenes abiertas (TRADE_TRANSACTION_ORDER_ADD, TRADE_TRANSACTION_ORDER_UPDATE y TRADE_TRANSACTION_ORDER_DELETE) e historial de órdenes (TRADE_TRANSACTION_HISTORY_ADD, TRADE_TRANSACTION_HISTORY_UPDATE, TRADE_TRANSACTION_HISTORY_DELETE), en la estructura MqlTradeTransaction se llenan los siguientes campos:
- order - ticket de la orden;
- symbol - nombre del instrumento financiero en la orden;
- type - tipo de transacción (transaction) comercial;
- order_type - tipo de la orden;
- orders_state - estado actual de la orden;
- time_type - tipo de vencimiento de la orden;
- time_expiration - tiempo de expiración de la orden (para las órdenes con el tipo de vencimiento ORDER_TIME_SPECIFIED y ORDER_TIME_SPECIFIED_DAY);
- price - precio de la orden especificado por el cliente;
- price_trigger - precio stop de activación de la orden stop limitada (sólo para ORDER_TYPE_BUY_STOP_LIMIT y ORDER_TYPE_SELL_STOP_LIMIT);
- price_sl - precio Stop Loss de la orden (se rellena si está especificado en la orden);
- price_tp - precio Take Profit de la orden (se rellena si está especificado en la orden);
- volume - volumen actual de la orden (no ejecutado). El volumen inicial de la orden se puede conocer del historial de órdenes utilizando la función HistoryOrders*.
- position - ticket de la posición abierta, modificada o cerrada como resultado de la ejecución de una orden. Se rellena solo para las órdenes de mercado. No se rellena para TRADE_TRANSACTION_ORDER_ADD.
- position_by - ticket de la posición opuesta. Se rellena solo para las órdenes de cierre de posición con una opuesta (close by).
TRADE_TRANSACTION_DEAL_*
Para las transacciones (transactions) comerciales que conciernen el procesamiento de las operaciones (deals) (TRADE_TRANSACTION_DEAL_ADD, TRADE_TRANSACTION_DEAL_UPDATE y TRADE_TRANSACTION_DEAL_DELETE), en la estructura MqlTradeTransaction se llenan los siguientes campos:
- deal - ticket de la operación (deal);
- order - ticket de la orden a base de la cual ha sido realizada la operación (deal);
- symbol - nombre del instrumento financiero en la operación (deal);
- type - tipo de transacción (transaction) comercial;
- deal_type - tipo de la operación (deal);
- Precio precio por el que ha sido realizada la operación (deal);
- price_sl - precio Stop Loss (se rellena si está especificado en la orden a base de la cual ha sido realizada la operación (deal));
- price_tp - precio Take Profit (se rellena si está especificado en la orden a base de la cual ha sido realizada la operación (deal));
- Volumen volumen de la operación (deal) en lotes.
- position - ticket de la posición abierta, modificada o cerrada como resultado de la ejecución de una operación.
- position_by - ticket de la posición opuesta. Solo se rellena para las operaciones de cierre de posición con una opuesta (out by).
TRADE_TRANSACTION_POSITION
Para las transacciones (transactions) comerciales que conciernen las modificaciones de posiciones no relacionadas con la ejecución de las operaciones (deals) (TRADE_TRANSACTION_POSITION), en la estructura MqlTradeTransaction se llenan los siguientes campos:
- symbol - nombre del instrumento financiero de la posición;
- type - tipo de transacción (transaction) comercial;
- deal_type - tipo de posición (DEAL_TYPE_BUY o DEAL_TYPE_SELL);
- price - precio medio ponderado de la apertura de la posición;
- price_sl - precio Stop Loss;
- price_tp - precio Take Profit;
- Volumen volumen de la posición en lotes si no ha sido modificado.
- position - ticket de la posición.
La modificación de una posición (agregación, cambio o eliminación) como resultado de ejecución de la transacción (deal) no supone la aparición tras sí la transacción (transaction) TRADE_TRANSACTION_POSITION. |
TRADE_TRANSACTION_REQUEST
Para las transacciones (transactions) comerciales que describen el hecho de que la solicitud comercial haya sido procesada por el servidor y que el resultado de su procesamiento haya sido recibido (TRADE_TRANSACTION_REQUEST), en la estructura MqlTradeTransaction se rellena sólo un campo:
- type - tipo de transacción (transaction) comercial;
Para las transacciones de este tipo hay que analizar sólo un campo - type (tipo de transacción comercial). Para obtener la información adicional hay que analizar el segundo y el tercer parámetro de la función OnTradeTransaction (request y result). |
Ejemplo:
input int MagicNumber=1234567; |
Véase también