- OrderCalcMargin
- OrderCalcProfit
- OrderCheck
- OrderSend
- OrderSendAsync
- PositionsTotal
- PositionGetSymbol
- PositionSelect
- PositionSelectByTicket
- PositionGetDouble
- PositionGetInteger
- PositionGetString
- PositionGetTicket
- OrdersTotal
- OrderGetTicket
- OrderSelect
- OrderGetDouble
- OrderGetInteger
- OrderGetString
- HistorySelect
- HistorySelectByPosition
- HistoryOrderSelect
- HistoryOrdersTotal
- HistoryOrderGetTicket
- HistoryOrderGetDouble
- HistoryOrderGetInteger
- HistoryOrderGetString
- HistoryDealSelect
- HistoryDealsTotal
- HistoryDealGetTicket
- HistoryDealGetDouble
- HistoryDealGetInteger
- HistoryDealGetString
OrderSend
La función OrderSend() está destinada para realizar la actividad comercial dentro de los márgenes de MQL5.
bool OrderSend(
|
Parámetros
request
[in] Puntero a una estructura del tipo MqlTradeRequest que describe la acción comercial del cliente.
result
[in,out] Puntero a una estructura del tipo MqlTradeResult que describe el resultado de una operación comercial en caso de llevarla a cabo con éxito (se devuelve true).
Valor devuelto
En caso de comprobar las estructuras (comprobación de punteros) con éxito, la función devuelve true, pero eso no significa que la operación comercial que se solicita vaya a ser ejecutada con éxito. Para una descripción más detallada de los resultados de la ejecución de esta función, hay que analizar los campos de la estructura result.
Nota
Las solicitudes comerciales pasan por varias fases de comprobación en el servidor comercial. En primer lugar se comprueba si todos los campos necesarios del parámetro request están rellenados correctamente. Si no hay errores, el servidor acepta la solicitud para su procesamiento. Si la orden se acepta con éxito, la función OrderSend() devuelve el valor true.
Se recomienda comprobar personalmente la solicitud antes de enviarla al servidor comercial. Para eso sirve la función OrderCheck() que no sólo comprueba si hay fondos suficientes en la cuenta para la ejecución de la operación comercial, sino también devuelve muchos otros parámetros útiles como resultado de comprobación de la solicitud comercial:
- código de retorno que avisa sobre un error en la solicitud que se comprueba;
- valor del balance de la cuenta que se queda tras la ejecución de la operación comercial;
- valor de fondos propios que se obtiene tras la ejecución de la operación comercial;
- valor del beneficio flotante que se obtiene tras la ejecución de la operación comercial;
- margen necesario para la operación comercial;
- fondos propios que se quedan disponibles después de realizar la operación comercial;
- nivel del margen que va a establecerse después de realizar la operación comercial;
- comentario sobre el código de respuesta, descripción del error en su caso.
Al enviar una orden de mercado (MqlTradeRequest.action=TRADE_ACTION_DEAL), si la función OrderSend()da un resultado exitoso, esto no siginifca que la orden se haya ejecutado (se han ejecutado las operaciones correspondientes): true en este caso significa solo que la orden ha sido correctamente colocada en el sistema comercial para su posterior ejecución. El servidor comercial puede rellenar los valores de los campos deal o order en la estructura del resultado retornado result, si estos datos le son conocidos en el momento de la formación de la respuesta a la llamada OrderSend(). En general, el evento o eventos de ejecución de las operaciones correspondientes a una orden pueden suceder ya después de que se envíe la respuesta a la llamada OrderSend(). Por eso, para cualquier tipo de solucitud comercial, al recibir el resultado de la ejecución de OrderSend(), es necesario en primer lugar comprobar el código de retorno del servidor comercial retcode y el código de respuesta del sistema comercial retcode_external (en caso necesario), que están disponibles en la estructura del resultado retornada result.
Cada orden aceptada se almacena en el servidor comercial esperando su procesamiento hasta que se de una de las condiciones adecuadas para su ejecución:
- expiración del plazo de vigencia,
- aparición de una solicitud opuesta,
- ejecución de la orden tras la recepción del precio de ejecución,
- aparición de la solicitud de cancelación de la orden.
Durante el procesamiento de la orden el servidor comercial envía un mensaje al terminal sobre el evento Trade, que se puede procesar mediante la función OnTrade().
En el servidor el resultado de ejecución de la solicitud comercial que ha sido enviada con la función OrderSend() se puede seguir a través del manejador OnTradeTransaction. Hay que tener en cuenta que durante la ejecución de una solicitud comercial el manejador OnTradeTransaction será invocado varias veces.
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. La función OnTradeTransaction será llamada para cada uno de estos eventos.
Ejemplo:
//--- valores para ORDER_MAGIC
|
Véase también
Tipos de operaciones comerciales, Estructura de solicitud comercial, Estructura de resultado de solicitud comercial