
Kit de herramientas de negociación MQL5 (Parte 6): Ampliación de la libreria EX5 de gestión del historial con las funciones de última orden pendiente completada
Introducción
Acceder a los detalles de la última orden pendiente ejecutada resulta especialmente útil en situaciones en las que su lógica de negociación depende del tipo de la última orden pendiente ejecutada. Por ejemplo, puede aprovechar estos datos para perfeccionar sus estrategias de negociación en función de si la orden ejecutada más reciente fue una orden de compra limitada, orden de venta stop, orden de compra stop, orden de venta limitada, orden de compra stop limitada o una orden de venta stop limitada. Comprender el tipo de orden puede proporcionar información sobre las condiciones del mercado y servir de base para ajustar su estrategia, por ejemplo, adaptando los puntos de entrada o salida.
Esta información también es crucial para recopilar y analizar datos históricos de operaciones con el fin de optimizar sus sistemas de negociación o recopilar datos sobre la rapidez con la que su bróker completa o ejecuta las órdenes pendientes cuando se activan y se ponen en marcha. Al examinar detalles como el deslizamiento (slippage), el tiempo transcurrido desde la colocación de la orden hasta su ejecución y las condiciones en las que se completó la orden, puede identificar patrones y áreas de mejora en su estrategia. Además, estos datos le permiten supervisar la calidad de la ejecución, garantizando que sus órdenes se ejecuten según lo previsto y ayudándole a abordar posibles ineficiencias en sus operaciones bursátiles. Un análisis tan detallado puede mejorar la toma de decisiones y conducir a estrategias comerciales más eficaces y sólidas a lo largo del tiempo.
Esta librería History Management EX5 simplifica el proceso de recuperación de los detalles y propiedades de la orden pendiente completada más recientemente. Al invocar una única función, puede acceder a estos datos sin el esfuerzo adicional de especificar un período para la búsqueda del historial de operaciones: la librería EX5 lo gestiona perfectamente por usted. Todo lo que tienes que hacer es proporcionar a la función de consulta del historial correspondiente una variable para almacenar la propiedad específica de la orden pendiente como entrada. A continuación, la función guardará los detalles recuperados en la variable de referencia que usted proporcione.
Si la función recupera correctamente los datos solicitados, devuelve true, lo que indica que se ha realizado correctamente. Si los datos de la orden pendiente especificados no están disponibles, devuelve false. Este enfoque simplificado elimina la complejidad innecesaria, lo que le permite centrarse en analizar o integrar los datos recuperados en sus estrategias de negociación, garantizando tanto la eficiencia como la precisión en sus operaciones bursátiles.
Para empezar, abriremos el archivo HistoryManager.mq5 del artículo anterior, donde creamos las funciones de recuperación del historial de posiciones, y comenzaremos creando la función GetLastFilledPendingOrderData(). Asegúrese de haber descargado el archivo fuente HistoryManager.mq5 , que encontrará adjunto al final del artículo anterior. Continuaremos añadiendo nuevo código debajo de la función LastClosedPositionDuration(), que es donde lo dejamos anteriormente.
Función para obtener los datos del último pedido pendiente completado
La función GetLastFilledPendingOrderData() se encarga de recuperar las propiedades de la última orden pendiente ejecutada del historial de operaciones disponible. Comprueba sistemáticamente los datos históricos en busca de órdenes pendientes que se hayan ejecutado y, si encuentra alguna, guarda los datos relevantes en la variable getLastFilledPendingOrderData referenciada.
Esta función trabaja en conjunto con la función FetchHistoryByCriteria() para obtener los datos necesarios del historial de operaciones. Garantiza que solo se tengan en cuenta las órdenes pendientes ejecutadas y actualiza la estructura proporcionada con los datos de la última orden pendiente ejecutada.
Comencemos por definir la firma de la función GetLastFilledPendingOrderData(): Dado que esta función está marcada como <I1>export</I1>, es accesible para cualquier archivo de código fuente MQL5 que importe la librería EX5 compilada. La función hace referencia a la variable getLastFilledPendingOrderData , donde se almacenarán los datos recuperados.
bool GetLastFilledPendingOrderData(PendingOrderData &getLastFilledPendingOrderData) export { //-- Function logic will be implemented here }
A continuación, utilizaremos la función FetchHistoryByCriteria() y pasaremos la constante GET_PENDING_ORDERS_HISTORY_DATA como parámetro de la función para asegurarnos de que disponemos de los datos necesarios del historial de órdenes pendientes. Si no se encuentran datos, imprimiremos un mensaje y devolveremos false.
if(!FetchHistoryByCriteria(GET_PENDING_ORDERS_HISTORY_DATA)) { Print(__FUNCTION__, ": No trading history available. Last filled pending order can't be retrieved."); return(false); }
Si recuperamos los datos correctamente, procedemos a buscar la última orden pendiente completada. Obtenemos el número total de órdenes pendientes de la función GetTotalDataInfoSize() y, a continuación, recorremos el array pendingOrderInfo para encontrar una orden pendiente que se haya ejecutado. Una vez encontrado, asignamos sus datos a la estructura getLastFilledPendingOrderData. Por último, la función devuelve true si se encuentra una orden pendiente completada y se guardan sus datos. Si no se encuentra ninguna orden pendiente completada, la función se cerrará y devolverá false.
int totalPendingOrderInfo = GetTotalDataInfoSize(GET_PENDING_ORDERS_HISTORY_DATA); for(int x = 0; x < totalPendingOrderInfo; x++) { if(pendingOrderInfo[x].state == ORDER_STATE_FILLED) { getLastFilledPendingOrderData = pendingOrderInfo[x]; break; } } return(true);
Aquí está la implementación completa de la función GetLastFilledPendingOrderData() con todos los segmentos de código en su secuencia correcta.
bool GetLastFilledPendingOrderData(PendingOrderData &getLastFilledPendingOrderData) export { if(!FetchHistoryByCriteria(GET_PENDING_ORDERS_HISTORY_DATA)) { Print(__FUNCTION__, ": No trading history available. Last filled pending order can't be retrieved."); return(false); } //-- Save the last filled pending order data in the referenced getLastFilledPendingOrderData variable int totalPendingOrderInfo = GetTotalDataInfoSize(GET_PENDING_ORDERS_HISTORY_DATA); for(int x = 0; x < totalPendingOrderInfo; x++) { if(pendingOrderInfo[x].state == ORDER_STATE_FILLED) { getLastFilledPendingOrderData = pendingOrderInfo[x]; break; } } return(true); }
Función de tipo de última orden pendiente completada
La función LastFilledPendingOrderType() se encarga de determinar el tipo de la orden pendiente ejecutada más recientemente. Almacena este tipo en la variable referenciada lastFilledPendingOrderType. Esta capacidad es esencial para aplicaciones que necesitan analizar los tipos de ejecución de órdenes o realizar un seguimiento del rendimiento de categorías de órdenes específicas.
Comencemos definiendo la firma de la función. Dado que esta función está marcada como exportable, se podrá utilizar en cualquier archivo fuente MQL5 que importe la librería EX5. La función acepta como entrada la variable referenciada lastFilledPendingOrderType , donde se almacenará el tipo de la última orden pendiente ejecutada.
bool LastFilledPendingOrderType(ENUM_ORDER_TYPE &lastFilledPendingOrderType) export { //-- Function logic will be implemented here }
Comenzaremos declarando una variable de tipo PendingOrderData denominada lastFilledPendingOrderInfo. Esta variable almacenará temporalmente los detalles de la última orden pendiente completada.
PendingOrderData lastFilledPendingOrderInfo;
A continuación, utilizaremos la función GetLastFilledPendingOrderData() para recuperar los detalles de la última orden pendiente ejecutada. Si la operación se realiza correctamente, extraeremos el campo type de la estructura lastFilledPendingOrderInfo , lo almacenaremos en la variable referenciada lastFilledPendingOrderType y devolveremos true. Si la recuperación falla, omitiremos la actualización de la variable referenciada y devolveremos false para indicar que no se han encontrado datos.
if(GetLastFilledPendingOrderData(lastFilledPendingOrderInfo)) { lastFilledPendingOrderType = lastFilledPendingOrderInfo.type; return(true); } return(false);
Aquí está la implementación completa de la función LastFilledPendingOrderType():
bool LastFilledPendingOrderType(ENUM_ORDER_TYPE &lastFilledPendingOrderType) export { PendingOrderData lastFilledPendingOrderInfo; if(GetLastFilledPendingOrderData(lastFilledPendingOrderInfo)) { lastFilledPendingOrderType = lastFilledPendingOrderInfo.type; return(true); } return(false); }
Función del símbolo de la última orden pendiente completada
La función LastFilledPendingOrderSymbol() recupera el símbolo de la orden pendiente completada más recientemente y lo almacena en la variable lastFilledPendingOrderSymbol referenciada. Acepta la variable referenciada lastFilledPendingOrderSymbol como entrada para almacenar el símbolo.
En primer lugar, declaramos una variable PendingOrderData , lastFilledPendingOrderInfo, para almacenar temporalmente los detalles de la última orden pendiente ejecutada. A continuación, utilizamos la función GetLastFilledPendingOrderData() para recuperar los detalles del pedido. Si tiene éxito, extraemos el símbolo de lastFilledPendingOrderInfo, lo almacenamos en lastFilledPendingOrderSymbol y devolvemos true. Si la recuperación falla, devolvemos false sin actualizar la variable referenciada.
Aquí está la implementación de la función LastFilledPendingOrderSymbol() :
bool LastFilledPendingOrderSymbol(string &lastFilledPendingOrderSymbol) export { PendingOrderData lastFilledPendingOrderInfo; if(GetLastFilledPendingOrderData(lastFilledPendingOrderInfo)) { lastFilledPendingOrderSymbol = lastFilledPendingOrderInfo.symbol; return(true); } return(false); }
Función de ticket de última orden pendiente completada
La función LastFilledPendingOrderTicket() recupera el número de ticket de la orden pendiente completada más recientemente y lo almacena en la variable lastFilledPendingOrderTicket referenciada. Acepta la variable lastFilledPendingOrderTicket como entrada, donde se guardará el número de ticket.
Comenzamos definiendo una variable PendingOrderData denominada lastFilledPendingOrderInfo, que sirve como contenedor temporal para los detalles de la orden pendiente completada más recientemente. A continuación, llamamos a la función GetLastFilledPendingOrderData() para obtener la información del pedido. Una vez recuperado correctamente, extraemos el ticket de lastFilledPendingOrderInfo, lo guardamos en la variable lastFilledPendingOrderTicket e indicamos que la operación se ha realizado correctamente devolviendo true. Si la recuperación no se realiza correctamente, la función devuelve false, dejando la variable referenciada sin cambios.
Aquí está la implementación de la función LastFilledPendingOrderTicket():
bool LastFilledPendingOrderTicket(ulong &lastFilledPendingOrderTicket) export { PendingOrderData lastFilledPendingOrderInfo; if(GetLastFilledPendingOrderData(lastFilledPendingOrderInfo)) { lastFilledPendingOrderTicket = lastFilledPendingOrderInfo.ticket; return(true); } return(false); }
Función de precio de apertura de la última orden pendiente completada
La función LastFilledPendingOrderPriceOpen() recupera el precio de apertura de la orden pendiente ejecutada más recientemente y lo almacena en la variable lastFilledPendingOrderPriceOpen referenciada. Acepta la variable lastFilledPendingOrderPriceOpen como entrada para almacenar el precio de apertura.
En primer lugar, declaramos una variable PendingOrderData , lastFilledPendingOrderInfo, para almacenar temporalmente los detalles de la última orden pendiente ejecutada. A continuación, utilizamos la función GetLastFilledPendingOrderData() para recuperar los detalles del pedido. Si tiene éxito, extraemos el priceOpen de lastFilledPendingOrderInfo, lo almacenamos en lastFilledPendingOrderPriceOpen y devolvemos true. Si la recuperación falla, devolvemos false sin actualizar la variable referenciada.
Aquí está la implementación de la función LastFilledPendingOrderPriceOpen():
bool LastFilledPendingOrderPriceOpen(double &lastFilledPendingOrderPriceOpen) export { PendingOrderData lastFilledPendingOrderInfo; if(GetLastFilledPendingOrderData(lastFilledPendingOrderInfo)) { lastFilledPendingOrderPriceOpen = lastFilledPendingOrderInfo.priceOpen; return(true); } return(false); }
Función de precio de Stop Loss de la última orden pendiente completada
La función LastFilledPendingOrderSlPrice() recupera el precio de stop loss de la orden pendiente ejecutada más recientemente y lo almacena en la variable lastFilledPendingOrderSlPrice referenciada. Acepta la variable lastFilledPendingOrderSlPrice como entrada para almacenar el precio de stop loss recuperado. Esta función es especialmente útil en situaciones en las que es necesario realizar un seguimiento o analizar los niveles de stop loss de las órdenes pendientes ejecutadas recientemente.
Comencemos por declarar una variable PendingOrderData denominada lastFilledPendingOrderInfo para almacenar temporalmente los detalles de la última orden pendiente ejecutada. A continuación, utilizamos la función GetLastFilledPendingOrderData() para obtener los detalles del pedido.
Si la recuperación de datos se realiza correctamente, el campo slPrice de lastFilledPendingOrderInfo se extrae y se guarda en la variable referenciada lastFilledPendingOrderSlPrice . A continuación, la función devuelve true para indicar que se ha realizado correctamente. Si la recuperación falla, la función se cierra sin actualizar la variable referenciada y devuelve false para indicar que no se han encontrado datos.
Aquí está la implementación completa de la función LastFilledPendingOrderSlPrice() :
bool LastFilledPendingOrderSlPrice(double &lastFilledPendingOrderSlPrice) export { PendingOrderData lastFilledPendingOrderInfo; if(GetLastFilledPendingOrderData(lastFilledPendingOrderInfo)) { lastFilledPendingOrderSlPrice = lastFilledPendingOrderInfo.slPrice; return(true); } return(false); }
Función de precio de Take Profit de la última orden pendiente completada
La función LastFilledPendingOrderTpPrice() recupera el precio de take profit de la orden pendiente ejecutada más recientemente y lo almacena en la variable lastFilledPendingOrderTpPrice referenciada. Esta función es esencial para aplicaciones que analizan o gestionan los niveles de take profit de las órdenes pendientes ejecutadas. Acepta la variable lastFilledPendingOrderTpPrice como entrada para almacenar el precio de take profit.
Comenzamos declarando una variable PendingOrderData , lastFilledPendingOrderInfo, para almacenar temporalmente los detalles de la última orden pendiente ejecutada. A continuación, utilizamos la función GetLastFilledPendingOrderData() para recuperar los detalles del pedido. Si la recuperación se realiza correctamente, extraemos el tpPrice de lastFilledPendingOrderInfo, lo almacenamos en la variable lastFilledPendingOrderTpPrice y devolvemos true. Si la recuperación falla, devolvemos false sin actualizar la variable referenciada.
Aquí está la implementación de la función LastFilledPendingOrderTpPrice():
bool LastFilledPendingOrderTpPrice(double &lastFilledPendingOrderTpPrice) export { PendingOrderData lastFilledPendingOrderInfo; if(GetLastFilledPendingOrderData(lastFilledPendingOrderInfo)) { lastFilledPendingOrderTpPrice = lastFilledPendingOrderInfo.tpPrice; return(true); } return(false); }
Función de Stop Loss de pips de la última orden pendiente completada
La función LastFilledPendingOrderSlPips() recupera el valor stop-loss pips de la orden pendiente ejecutada más recientemente y lo almacena en la variable referenciada lastFilledPendingOrderSlPips. Esta función es fundamental para analizar los parámetros de riesgo asociados a las órdenes pendientes ejecutadas.
En primer lugar, declaramos una variable PendingOrderData denominada lastFilledPendingOrderInfo. Esta variable almacenará temporalmente los detalles de la última orden pendiente completada. A continuación, utilizamos la función GetLastFilledPendingOrderData() para obtener los detalles del pedido. Si la operación se realiza correctamente, extraemos el campo slPips de la estructura lastFilledPendingOrderInfo y lo almacenamos en la variable referenciada lastFilledPendingOrderSlPips . A continuación, la función devuelve true para indicar que se ha realizado correctamente. Si el proceso de recuperación falla, la variable referenciada permanece sin cambios y la función devuelve false para indicar que no se han encontrado datos.
Aquí está la implementación completa de la función LastFilledPendingOrderSlPips():
bool LastFilledPendingOrderSlPips(int &lastFilledPendingOrderSlPips) export { PendingOrderData lastFilledPendingOrderInfo; if(GetLastFilledPendingOrderData(lastFilledPendingOrderInfo)) { lastFilledPendingOrderSlPips = lastFilledPendingOrderInfo.slPips; return(true); } return(false); }
Función de pips de Take Profit de la última orden pendiente completada
La función LastFilledPendingOrderTpPips() recupera el valor take profit pips de la orden pendiente completada más recientemente y lo guarda en la variable referenciada lastFilledPendingOrderTpPips . Esta funcionalidad es muy útil para realizar un seguimiento de los niveles de take profit de las órdenes pendientes ejecutadas y puede utilizarse para analizar el rendimiento o ajustar estrategias.
Para implementar esto, primero declaramos una variable PendingOrderData denominada lastFilledPendingOrderInfo. Esta variable se utiliza para almacenar temporalmente los detalles de la última orden pendiente completada. A continuación, llamamos a la función GetLastFilledPendingOrderData() para recuperar los detalles del pedido. Si la recuperación se realiza correctamente, el valor tpPips se extrae de lastFilledPendingOrderInfo y se almacena en la variable lastFilledPendingOrderTpPips . A continuación, la función devuelve true. Si la recuperación falla, la variable referenciada permanece sin cambios y la función devuelve false para indicar el fallo.
Aquí está la implementación completa de la función LastFilledPendingOrderTpPips() :
bool LastFilledPendingOrderTpPips(int &lastFilledPendingOrderTpPips) export { PendingOrderData lastFilledPendingOrderInfo; if(GetLastFilledPendingOrderData(lastFilledPendingOrderInfo)) { lastFilledPendingOrderTpPips = lastFilledPendingOrderInfo.tpPips; return(true); } return(false); }
Función de configuración de hora del último pedido pendiente completado
La función LastFilledPendingOrderTimeSetup() recupera la hora en la que se configuró la última orden pendiente ejecutada. Almacena esta hora en la variable referenciada lastFilledPendingOrderTimeSetup. Esta función es esencial para realizar un seguimiento de cuándo se iniciaron órdenes pendientes específicas, lo que permite realizar un análisis basado en el tiempo de la actividad de las órdenes.
La función LastFilledPendingOrderTimeSetup() acepta una variable referenciada, lastFilledPendingOrderTimeSetup, como entrada. Esta variable contendrá el tiempo de configuración de la última orden pendiente completada después de que se ejecute la función. Para lograrlo, la función comienza declarando una variable PendingOrderData denominada lastFilledPendingOrderInfo. Esta variable se utiliza para almacenar temporalmente los detalles de la última orden pendiente completada.
A continuación, se llama a la función GetLastFilledPendingOrderData() para recuperar los detalles de la última orden pendiente ejecutada. Si la recuperación se realiza correctamente, el campo timeSetup de la estructura lastFilledPendingOrderInfo se extrae y se almacena en la variable lastFilledPendingOrderTimeSetup. A continuación, la función devuelve true para indicar que se ha realizado correctamente. Si la recuperación falla, la función devuelve false sin actualizar la variable referenciada.
Aquí está la implementación completa de la función LastFilledPendingOrderTimeSetup() :
bool LastFilledPendingOrderTimeSetup(datetime &lastFilledPendingOrderTimeSetup) export { PendingOrderData lastFilledPendingOrderInfo; if(GetLastFilledPendingOrderData(lastFilledPendingOrderInfo)) { lastFilledPendingOrderTimeSetup = lastFilledPendingOrderInfo.timeSetup; return(true); } return(false); }
Función de tiempo de finalización del último pedido pendiente completado
La función LastFilledPendingOrderTimeDone() recupera la hora en la que se activó la última orden pendiente ejecutada (hora de ejecución) y la guarda en la variable lastFilledPendingOrderTimeDone referenciada. Esta función es esencial para realizar un seguimiento de los tiempos de ejecución de las órdenes pendientes completadas, lo que le permite analizar la sincronización de las órdenes o crear informes detallados.
La función toma la variable referenciada lastFilledPendingOrderTimeDone como entrada para almacenar el tiempo completado. Comienza declarando una variable PendingOrderData denominada lastFilledPendingOrderInfo, que se utiliza para almacenar temporalmente los detalles de la orden pendiente completada más recientemente.
A continuación, la función llama a GetLastFilledPendingOrderData() para recuperar los datos de la última orden pendiente ejecutada. Si la operación tiene éxito, la función extrae el campo timeDone de la estructura lastFilledPendingOrderInfo y lo guarda en la variable referenciada lastFilledPendingOrderTimeDone . A continuación, devuelve true para indicar que la operación se ha realizado correctamente.
Si la recuperación falla, la función no actualiza la variable referenciada y, en su lugar, devuelve false para indicar que no se han encontrado datos válidos.
Aquí está la implementación completa de la función LastFilledPendingOrderTimeDone():
bool LastFilledPendingOrderTimeDone(datetime &lastFilledPendingOrderTimeDone) export { PendingOrderData lastFilledPendingOrderInfo; if(GetLastFilledPendingOrderData(lastFilledPendingOrderInfo)) { lastFilledPendingOrderTimeDone = lastFilledPendingOrderInfo.timeDone; return(true); } return(false); }
Función de tiempo de vencimiento de la última orden pendiente completada
La función LastFilledPendingOrderExpirationTime() recupera la hora de vencimiento de la orden pendiente completada más recientemente y la guarda en la variable lastFilledPendingOrderExpirationTime referenciada. Esta función es útil para gestionar y analizar la vigencia de las órdenes pendientes, especialmente cuando se supervisa su período de validez.
La función acepta la variable referenciada lastFilledPendingOrderExpirationTime como entrada para almacenar el tiempo de caducidad. Comienza declarando una variable PendingOrderData denominada lastFilledPendingOrderInfo, que sirve como contenedor temporal para los detalles de la orden pendiente completada más recientemente.
A continuación, la función invoca GetLastFilledPendingOrderData() para recuperar los datos de la última orden pendiente ejecutada. Si la operación se realiza correctamente, extrae el campo expirationTime de la estructura lastFilledPendingOrderInfo y lo guarda en la variable referenciada lastFilledPendingOrderExpirationTime. Devuelve true para indicar que se han recuperado correctamente los datos.
Si la recuperación falla, la función deja la variable referenciada sin cambios y devuelve false para indicar la ausencia de datos válidos.
Aquí está la implementación completa de la función LastFilledPendingOrderExpirationTime():
bool LastFilledPendingOrderExpirationTime(datetime &lastFilledPendingOrderExpirationTime) export { PendingOrderData lastFilledPendingOrderInfo; if(GetLastFilledPendingOrderData(lastFilledPendingOrderInfo)) { lastFilledPendingOrderExpirationTime = lastFilledPendingOrderInfo.expirationTime; return(true); } return(false); }
Función de identificación de posición de la última orden pendiente completada
La función LastFilledPendingOrderPositionId() recupera el ID de posición de la orden pendiente ejecutada más recientemente y lo guarda en la variable lastFilledPendingOrderPositionId referenciada. Esta función es especialmente útil para asociar órdenes pendientes con sus posiciones correspondientes, lo que permite un mejor seguimiento y gestión de la actividad comercial.
La función toma la variable referenciada lastFilledPendingOrderPositionId como entrada para almacenar el ID de posición. Comienza declarando una variable PendingOrderData denominada lastFilledPendingOrderInfo, que sirve como contenedor temporal para los detalles de la orden pendiente completada más recientemente.
A continuación, la función llama a GetLastFilledPendingOrderData() para recuperar los datos de la última orden pendiente ejecutada. Si la recuperación de datos se realiza correctamente, extrae el campo positionId de la estructura lastFilledPendingOrderInfo y lo asigna a la variable referenciada lastFilledPendingOrderPositionId . A continuación, devuelve true para indicar que la operación se ha realizado correctamente.
Si la recuperación de datos falla, la función no modifica la variable referenciada y devuelve false para indicar el fallo.
Aquí está la implementación completa de la función LastFilledPendingOrderPositionId():
bool LastFilledPendingOrderPositionId(ulong &lastFilledPendingOrderPositionId) export { PendingOrderData lastFilledPendingOrderInfo; if(GetLastFilledPendingOrderData(lastFilledPendingOrderInfo)) { lastFilledPendingOrderPositionId = lastFilledPendingOrderInfo.positionId; return(true); } return(false); }
Función del número mágico de la última orden pendiente completada
La función LastFilledPendingOrderMagic() recupera el número mágico de la orden pendiente completada más recientemente y lo guarda en la variable referenciada lastFilledPendingOrderMagic . Esta función es esencial para identificar el identificador único asociado a una orden específica, especialmente cuando se gestionan múltiples estrategias o sistemas dentro de la misma cuenta de operaciones.
La función toma la variable referenciada lastFilledPendingOrderMagic como entrada para almacenar el número mágico. Comienza declarando una variable PendingOrderData denominada lastFilledPendingOrderInfo, que contiene temporalmente los detalles de la orden pendiente completada más recientemente.
A continuación, la función llama a GetLastFilledPendingOrderData() para recuperar los datos de la última orden pendiente ejecutada. Si la recuperación de datos se realiza correctamente, extrae el campo magic de la estructura lastFilledPendingOrderInfo y lo asigna a la variable referenciada lastFilledPendingOrderMagic . A continuación, devuelve true para indicar que la operación se ha realizado correctamente.
Si la recuperación de datos falla, la función no modifica la variable referenciada y devuelve false para indicar el fallo.
Aquí está la implementación completa de la función LastFilledPendingOrderMagic():
bool LastFilledPendingOrderMagic(ulong &lastFilledPendingOrderMagic) export { PendingOrderData lastFilledPendingOrderInfo; if(GetLastFilledPendingOrderData(lastFilledPendingOrderInfo)) { lastFilledPendingOrderMagic = lastFilledPendingOrderInfo.magic; return(true); } return(false); }
Función de motivo de la última orden pendiente completada
La función LastFilledPendingOrderReason() recupera el motivo de la orden pendiente completada más recientemente y lo almacena en la variable lastFilledPendingOrderReason referenciada. Esta función es útil para rastrear el motivo específico detrás de la ejecución de una orden. Ayuda a identificar si la orden se ejecutó desde una aplicación móvil, web o de escritorio, si fue activada por un asesor experto o script, o si fue activada por un evento de stop loss, take profit o stop out. Esta información es crucial para el análisis y la depuración, ya que proporciona información sobre cómo y por qué se completó un pedido.
La función toma la variable referenciada lastFilledPendingOrderReason como entrada para almacenar el motivo. Comienza declarando una variable PendingOrderData denominada lastFilledPendingOrderInfo, que contiene temporalmente los detalles de la última orden pendiente ejecutada.
A continuación, la función llama a GetLastFilledPendingOrderData() para recuperar los datos de la última orden pendiente ejecutada. Si la recuperación de datos se realiza correctamente, extrae el campo reason de la estructura lastFilledPendingOrderInfo y lo asigna a la variable referenciada lastFilledPendingOrderReason . A continuación, la función devuelve true para indicar que la operación se ha realizado correctamente.
Si la recuperación de datos falla, la función no modifica la variable referenciada y devuelve false para indicar el fallo.
Aquí está la implementación completa de la función LastFilledPendingOrderReason():
bool LastFilledPendingOrderReason(ENUM_ORDER_REASON &lastFilledPendingOrderReason) export { PendingOrderData lastFilledPendingOrderInfo; if(GetLastFilledPendingOrderData(lastFilledPendingOrderInfo)) { lastFilledPendingOrderReason = lastFilledPendingOrderInfo.reason; return(true); } return(false); }
Función de tipo de ejecución de la última orden pendiente completada
La función LastFilledPendingOrderTypeFilling() recupera el tipo de ejecución de la orden pendiente ejecutada más recientemente y lo almacena en la variable lastFilledPendingOrderTypeFilling a la que se hace referencia. Esta función es importante para determinar cómo se ha ejecutado la orden pendiente, lo cual podría ser mediante políticas de llenar o eliminar, inmediata o cancelar, pasiva (reservar o cancelar) o retornar .
La función toma la variable referenciada lastFilledPendingOrderTypeFilling como entrada para almacenar el tipo de ejecución. Comienza declarando una variable PendingOrderData , lastFilledPendingOrderInfo, que contiene temporalmente los detalles de la última orden pendiente ejecutada.
A continuación, la función llama a GetLastFilledPendingOrderData() para recuperar los datos de la última orden pendiente ejecutada. Si la recuperación de datos se realiza correctamente, extrae el campo typeFilling de la estructura lastFilledPendingOrderInfo y lo asigna a la variable referenciada lastFilledPendingOrderTypeFilling. A continuación, la función devuelve true para indicar que la operación se ha realizado correctamente.
Si la recuperación de datos falla, la función no modifica la variable referenciada y devuelve false para indicar el fallo.
Aquí está la implementación completa de la función LastFilledPendingOrderTypeFilling():
bool LastFilledPendingOrderTypeFilling(ENUM_ORDER_TYPE_FILLING &lastFilledPendingOrderTypeFilling) export { PendingOrderData lastFilledPendingOrderInfo; if(GetLastFilledPendingOrderData(lastFilledPendingOrderInfo)) { lastFilledPendingOrderTypeFilling = lastFilledPendingOrderInfo.typeFilling; return(true); } return(false); }
Función de tiempo del tipo de orden pendiente completada por última vez
La función LastFilledPendingOrderTypeTime() recupera el tiempo de tipo de la orden pendiente completada más recientemente y lo almacena en la variable lastFilledPendingOrderTypeTime referenciada. Esta función ayuda a determinar la vigencia de la orden pendiente.
La función toma la variable referenciada lastFilledPendingOrderTypeTime como entrada para almacenar el tiempo de tipo. Comienza declarando una variable PendingOrderData , lastFilledPendingOrderInfo, para almacenar temporalmente los detalles de la última orden pendiente ejecutada.
A continuación, la función llama a GetLastFilledPendingOrderData() para recuperar los datos de la última orden pendiente ejecutada. Si la recuperación de datos se realiza correctamente, extrae el campo typeTime de la estructura lastFilledPendingOrderInfo y lo asigna a la variable referenciada lastFilledPendingOrderTypeTime . A continuación, la función devuelve true para indicar que la operación se ha realizado correctamente.
Si la recuperación de datos falla, la función no modifica la variable referenciada y devuelve false para indicar el fallo.
Aquí está la implementación completa de la función LastFilledPendingOrderTypeTime():
bool LastFilledPendingOrderTypeTime(datetime &lastFilledPendingOrderTypeTime) export { PendingOrderData lastFilledPendingOrderInfo; if(GetLastFilledPendingOrderData(lastFilledPendingOrderInfo)) { lastFilledPendingOrderTypeTime = lastFilledPendingOrderInfo.typeTime; return(true); } return(false); }
Función de comentario de la última orden pendiente completada
La función LastFilledPendingOrderComment() recupera el comentario asociado con la orden pendiente completada más recientemente y lo almacena en la variable lastFilledPendingOrderComment referenciada. Esta función es útil para capturar cualquier nota o anotación adicional que se haya añadido a la orden pendiente.
La función acepta como entrada la variable referenciada lastFilledPendingOrderComment , donde almacenará el comentario. Comienza declarando una variable PendingOrderData, lastFilledPendingOrderInfo, para almacenar temporalmente los detalles de la última orden pendiente ejecutada.
A continuación, la función llama a GetLastFilledPendingOrderData() para recuperar los datos de la última orden pendiente ejecutada. Si la recuperación de datos se realiza correctamente, extrae el campo de comentarios de la estructura lastFilledPendingOrderInfo y lo asigna a la variable referenciada lastFilledPendingOrderComment. A continuación, la función devuelve true para indicar que la operación se ha realizado correctamente.
Si la recuperación de datos falla, la función no modifica la variable referenciada y devuelve false para indicar el fallo.
Aquí está la implementación completa de la función LastFilledPendingOrderComment():
bool LastFilledPendingOrderComment(string &lastFilledPendingOrderComment) export { PendingOrderData lastFilledPendingOrderInfo; if(GetLastFilledPendingOrderData(lastFilledPendingOrderInfo)) { lastFilledPendingOrderComment = lastFilledPendingOrderInfo.comment; return(true); } return(false); }
Conclusión
Hemos desarrollado con éxito las funciones exportables para recuperar y almacenar las propiedades de la orden pendiente completada más recientemente, mejorando así la versatilidad de la librería History Management EX5. Estas nuevas capacidades proporcionan un acceso fluido a datos críticos sobre órdenes pendientes ejecutadas, lo que permite un análisis comercial y una optimización de estrategias más sencillos y eficaces, al tiempo que refuerzan la capacidad de la librería para gestionar operaciones esenciales relacionadas con el historial de órdenes pendientes.
En el próximo artículo, ampliaremos aún más la librería añadiendo funciones para recuperar y almacenar las propiedades de la última orden pendiente cancelada. Esta incorporación mejorará la capacidad de la librería para gestionar y analizar el historial comercial, ofreciendo herramientas aún más valiosas para su kit de herramientas comerciales.
El código fuente actualizado de la librería HistoryManager.mq5, que incluye todas las funciones creadas en este artículo y en los anteriores, está disponible al final de este artículo. Gracias por seguirme, y espero continuar este viaje con ustedes en el próximo artículo.
Traducción del inglés realizada por MetaQuotes Ltd.
Artículo original: https://www.mql5.com/en/articles/16742
Advertencia: todos los derechos de estos materiales pertenecen a MetaQuotes Ltd. Queda totalmente prohibido el copiado total o parcial.
Este artículo ha sido escrito por un usuario del sitio web y refleja su punto de vista personal. MetaQuotes Ltd. no se responsabiliza de la exactitud de la información ofrecida, ni de las posibles consecuencias del uso de las soluciones, estrategias o recomendaciones descritas.





- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Usted acepta la política del sitio web y las condiciones de uso