Como resultado de ejecución de ciertas acciones con la cuenta de trading su estado se cambia. A estas acciones les pertenecen:
Como resultado de estas acciones, para la cuenta se ejecutan las transacciones comerciales:
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:
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:
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:
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:
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