Solicitar resultado del envío: estructura MqlTradeResult

En respuesta a una solicitud de operación ejecutada por las funciones OrderSend u OrderSendAsync que veremos en la siguiente sección, el servidor devuelve los resultados del procesamiento de la solicitud. Para ello se utiliza una estructura especial MqlTradeResult predefinida.

struct MqlTradeResult 

   uint     retcode;          // Operation result code 
   ulong    deal;             // Transaction ticket, if it is completed 
   ulong    order;            // Order ticket, if it is placed 
   double   volume;           // Trade volume confirmed by the broker 
   double   price;            // Trade price confirmed by the broker 
   double   bid;              // Current market bid price 
   double   ask;              // Current market offer price 
   string   comment;          // Broker's comment on the operation 
   uint     request_id;       // Request identifier, set by the terminal when sending  
   uint     retcode_external// Response code of the external trading system 
};

En la siguiente tabla se describen sus campos:

Campo

Descripción

retcode

Código de retorno del servidor de trading

deal

Ticket de transacción si se realiza (durante la operación de trading TRADE_ACTION_DEAL)

order

Ticket de orden si se realiza (durante la operación de trading TRADE_ACTION_PENDING)

volume

Volumen de trading confirmado por el bróker (depende de los modos de ejecución de la orden)

price

El precio de la transacción confirmado por el bróker (depende del campo deviation de la solicitud de operación, modo de ejecución y la operación de trading)

bid

Precio de oferta actual del mercado

ask

Precio de demanda actual del mercado

comment

Comentario del bróker sobre la operación (por defecto, se rellena con la desencriptación del código de retorno del servidor de trading)

request_id

ID de la solicitud que establece el terminal al enviarla al servidor de trading.

retcode_external

Código de error devuelto por el sistema de trading externo

Como veremos más adelante al realizar las operaciones de trading se pasa una variable de tipo MqlTradeResult como segundo parámetro por referencia en la función OrderSend u OrderSendAsync. Devuelve el resultado.

Al enviar una solicitud de operación al servidor, el terminal establece el identificador request_id en un valor único. Esto es necesario para el análisis de los eventos de trading posteriores, lo cual es necesario si se utiliza una función asíncrona OrderSendAsync. Este identificador permite asociar la solicitud enviada con el resultado de su procesamiento pasado al manejador de eventos OnTradeTransaction.

La presencia y los tipos de errores en el campo retcode_external dependen del bróker y del sistema de trading externo al que se envían las operaciones de trading.

Los resultados de las solicitudes se analizan de distintas maneras, en función de las operaciones de trading y de la forma en que se envían. Nos ocuparemos de ello en secciones posteriores sobre acciones específicas: compra y venta en el mercado, colocación y eliminación de órdenes pendientes, y modificación y cierre de posiciones.