- OnStart
- OnInit
- OnDeinit
- OnTick
- OnCalculate
- OnTimer
- OnTrade
- OnTradeTransaction
- OnBookEvent
- OnChartEvent
- OnTester
- OnTesterInit
- OnTesterDeinit
- OnTesterPass
OnTradeTransaction
Se llama en los expertos al suceder el evento TradeTransaction. La función ha sido pensada para procesar los resultados de la ejecución de una solicitud comercial.
void OnTradeTransaction()
|
Parámetros
trans
[in] Variable del tipo MqlTradeTransaction que describe una transacción realizada en la cuenta comercial.
request
[in] Variable del tipo MqlTradeRequest que describe la solicitud comercial que ha generado la transacción. Contiene valores solo para una transacción del tipo TRADE_TRANSACTION_REQUEST.
result
[in] Variable del tipo MqlTradeResult con el resultado de la ejecución de la solicitud comercial que ha generado la transacción. Contiene valores solo para una transacción del tipo TRADE_TRANSACTION_REQUEST.
Valor retornado
No hay valor retornado
Observación
OnTradeTransaction() se llama para procesar el evento TradeTransaction, que el servidor comercial envía al terminal en los siguientes casos:
- el envío de una solicitud comercial desde un programa MQL5 con la ayuda de las funciones OrderSend()/OrderSendAsync() y su posterior ejecución;
- el envío manual de una solicitud comercial a través de la interfaz gráfica y su posterior ejecución;
- la activación de órdenes pendientes y órdenes stop en el servidor;
- la ejecución de operaciones en lado del servidor comercial.
La información sobre el tipo de información se contiene en el campo type de la variable trans. Los tipos de transacciones comerciales se describen en la enumeración ENUM_TRADE_TRANSACTION_TYPE:
- TRADE_TRANSACTION_ORDER_ADD añadir una nueva orden activa
- TRADE_TRANSACTION_ORDER_UPDATE cambiar una orden activa
- TRADE_TRANSACTION_ORDER_DELETE eliminar una orden de la lista de activas
- TRADE_TRANSACTION_DEAL_ADD añadir una transacción a la historia
- TRADE_TRANSACTION_DEAL_UPDATE cambiar una transacción en la historia
- TRADE_TRANSACTION_DEAL_DELETE eliminar una transacción de la historia
- TRADE_TRANSACTION_HISTORY_ADD añadir una orden a la historia como resultado de una ejecución o cancelación
- TRADE_TRANSACTION_HISTORY_UPDATE cambiar una orden que se encuentra en la historia de órdenes
- TRADE_TRANSACTION_HISTORY_DELETE eliminar una orden de la historia de órdenes
- TRADE_TRANSACTION_POSITION cambiar una posición no relacionada con la ejecución de una transacción
- TRADE_TRANSACTION_REQUEST notificar que la solicitud comercial ha sido procesada por el servidor y que el resultado del procesamiento ha sido recibido.
Al procesar transacciones del tipo TRADE_TRANSACTION_REQUEST, para obtener información adicional es necesario analizar el segundo y tercer parámetros de la función OnTradeTransaction(): request y result.
El envío de una solicitud comercial de compra genera una cadena de transacciones comerciales que se ejecutan en la cuenta comercial: 1) la solicitud es aceptada para su procesamiento, 2) a continuación, para la cuenta se crea la orden de compra correspondiente, 3) después tiene lugar la ejecución de la orden, 4) se elimina la orden ejecutada de la lista de activas, 5) se añade a la historia de órdenes, 6) a continuación, se añade la transacción correspondiente a la historia y 7) se crea una nueva posición. Todas estas acciones son transacciones comerciales. La llegada de cada transacción semejante al terminal constituye el evento TradeTransaction. En este caso, además, la llegada de estas transacciones al terminal no está garantizada, por eso no debemos construir nuestro algoritmo esperando que los grupos de transacciones comerciales lleguen unos detrás de otros.
Mientras el experto procesa las transacciones comerciales con la ayuda del manejador OnTradeTransaction(), el terminal continúa procesando las transacciones comerciales entrantes. De esta forma, el estado de la cuenta comercial puede cambiar ya durante el funcionamiento de OnTradeTransaction(). Por ejemplo, mientras un programa MQL5 procesa el evento de adición de una nueva orden, esta puede ser ejeuctada, eliminada de la lista de abiertas y trasladada a la historia. Posteriormente, al programa se le notificarán todos estos eventos.
La longitud de la cola de transacciones es de 1024 elementos. Si OnTradeTransaction() procesa la siguiente transacción durante demasiado tiempo, las transacciones antiguas que se encuentren en la cola podrían ser remplazadas por otras nuevas.
El manejador OnTrade() se llama después de las llamadas correspondientes de OnTradeTransaction(). En general, no existe una proporción exacta en cuanto a la cantidad de llamadas de OnTrade() y OnTradeTransaction(). Una llamada de OnTrade() corresponde a una o varias llamadas de OnTradeTransaction.
Cada evento Trade puede ser el resultado de una o varias solicitudes comerciales. Las solicitudes comerciales se envían al servidor con la ayuda de OrderSend() o OrderSendAsync(). Cada solicitud puede generar varios eventos comerciales. No debemos confiar en la regla: "Una solicitud - Un evento Trade", ya que el procesamiento de solicitudes puede tener lugar en varias etapas y cada operación puede cambiar el estado de las órdenes, posiciones e historia comercial.
Ejemplo de un experto con el manejador OnTradeTransaction()
//+------------------------------------------------------------------+
|
Ver también
OrderSend, OrderSendAsync, OnTradeTransaction, Estructura de la solicitud comercial, Estructura de la transacción comercial, Tipos de transacciones comerciales, Tipos de operaciones comerciales, Eventos del terminal de cliente