English Русский 中文 Deutsch 日本語 Português
preview
Kit de herramientas de negociación MQL5 (Parte 7): Ampliación de la libreria EX5 de gestión del historial con las funciones de última orden pendiente cancelada

Kit de herramientas de negociación MQL5 (Parte 7): Ampliación de la libreria EX5 de gestión del historial con las funciones de última orden pendiente cancelada

MetaTrader 5Ejemplos |
162 0
Wanateki Solutions LTD
Kelvin Muturi Muigua

Introducción

A lo largo de esta serie de artículos, hemos dedicado un esfuerzo significativo a crear un conjunto completo de librerías EX5 para trading. Estas librerías están diseñadas para agilizar el proceso de desarrollo de aplicaciones MQL5, reduciendo drásticamente el tiempo y el esfuerzo necesarios para gestionar las operaciones comerciales y administrar los datos históricos de órdenes, transacciones y posiciones. Al ofrecer funciones bien estructuradas e intuitivas, estas librerías simplifican tareas complejas, lo que permite a los desarrolladores procesar sin problemas el historial de operaciones con precisión y eficiencia.

En este artículo, finalizaremos el desarrollo del último módulo de nuestra librería History Management EX5, diseñada específicamente para gestionar la recuperación y el almacenamiento de las propiedades asociadas al último pedido pendiente cancelado. Este módulo aborda una limitación clave del lenguaje MQL5, que carece de funciones sencillas de una sola línea para acceder y gestionar dichos datos históricos. Al salvar esta brecha, nuestra librería ofrece a los desarrolladores una solución optimizada para trabajar de manera eficiente con la información de pedidos pendientes cancelados.

El objetivo de este módulo es proporcionar una forma sencilla pero eficaz de recuperar y almacenar datos críticos de órdenes pendientes canceladas, como su símbolo, precio de apertura, stop loss basado en pips, take profit, duraciones basadas en el tiempo y otros atributos relevantes. Al encapsular esta funcionalidad en funciones fáciles de usar, la librería permite a los desarrolladores acceder a los datos necesarios con un mínimo esfuerzo y complejidad. Esto lo convierte en una herramienta indispensable para cualquiera que desee crear aplicaciones MQL5 que se basen en datos históricos de trading precisos y accesibles. Para aquellos que estén interesados en analizar el rendimiento de las operaciones, este módulo simplifica el proceso, permitiéndoles centrarse en una visión más amplia.

Para empezar, abra el archivo HistoryManager.mq5 del artículo anterior, donde desarrollamos funciones para gestionar la orden pendiente completada más recientemente. En esta sección, comenzaremos a implementar la función GetLastCanceledPendingOrderData(), que es fundamental para procesar las órdenes pendientes canceladas. Antes de continuar, asegúrese de haber descargado el archivo fuente HistoryManager.mq5, que se adjunta al final del artículo anterior.

Una vez que el archivo esté listo, localiza la sección donde concluimos en el último artículo. En concreto, continuaremos añadiendo nuevo código justo debajo de la función LastFilledPendingOrderComment(). Esta ubicación garantiza que la nueva funcionalidad esté organizada de forma lógica junto con las funciones relacionadas, lo que facilita la navegación por la librería y su ampliación en el futuro si fuera necesario.


Contenido principal

  1. Obtener los últimos datos de órdenes pendientes canceladas
  2. Obtener el último tipo de orden pendiente cancelada
  3. Obtener el último símbolo de orden pendiente cancelada
  4. Obtener el último ticket de orden pendiente cancelada
  5. Obtener el precio de apertura de la última orden pendiente cancelada
  6. Obtener el último precio de stop loss de la orden pendiente cancelada
  7. Obtener el último precio de take profit de la orden pendiente cancelada
  8. Obtener los pips de stop loss de la última orden pendiente cancelada
  9. Obtener los pips de take profit de la última orden pendiente cancelada
  10. Obtener la configuración de tiempo del última orden pendiente cancelada
  11. Obtener la última orden pendiente cancelada realizada
  12. Obtener la hora de vencimiento de la última orden pendiente cancelada
  13. Obtener la última ID de posición de orden pendiente cancelada
  14. Obtener el último número mágico de la orden pendiente cancelada
  15. Obtener el último motivo de cancelación de una orden pendiente
  16. Obtener el último tipo de orden pendiente cancelada que se ha completado
  17. Obtener la hora y el tipo de la última orden pendiente cancelada
  18. Obtener el último comentario sobre una orden pendiente cancelada
  19. Conclusión



Función para obtener los datos de la última orden pendiente cancelada

La función GetLastCanceledPendingOrderData() recupera los detalles de la última orden pendiente cancelada y guarda esta información en la referencia getLastCanceledPendingOrderData especificada. Se basa en la función FetchHistoryByCriteria() para acceder a los datos históricos de negociación, identificando la última orden pendiente cancelada mediante el análisis del conjunto de datos relevante. Si no se encuentran dichos datos, la función registra un mensaje de error y devuelve false. Cuando tiene éxito, almacena la información recuperada en la referencia proporcionada y devuelve true.

Comencemos por crear la definición o firma de la función. La función GetLastCanceledPendingOrderData() debe ser accesible para importar programas MQL5 para uso externo, por lo que la hemos definido como exported.

bool GetLastCanceledPendingOrderData(PendingOrderData &getLastCanceledPendingOrderData) export
  {
//-- Function implementation will be explained step by step below.
  }

Seguiremos adelante e intentaremos recuperar el historial de órdenes pendientes utilizando la función FetchHistoryByCriteria() con el argumento GET_PENDING_ORDERS_HISTORY_DATA . Esto garantiza que la función tenga acceso a los datos necesarios para las órdenes pendientes canceladas.

Si la función FetchHistoryByCriteria() devuelve false, indica que no hay historial de operaciones disponible. En este caso, registramos un mensaje de error utilizando la función Print() para facilitar la depuración. A continuación, la función devuelve false, lo que significa que no se han podido recuperar los datos.

if(!FetchHistoryByCriteria(GET_PENDING_ORDERS_HISTORY_DATA))
  {
   Print(__FUNCTION__, ": No trading history available. Last canceled pending order can't be retrieved.");
   return(false);
  }

Una vez que los datos históricos estén disponibles, calcularemos el número total de órdenes pendientes utilizando la función GetTotalDataInfoSize(). Este valor nos ayudará a recorrer la matriz pendingOrderInfo para localizar la orden pendiente cancelada más reciente.

A continuación, recorreremos el array pendingOrderInfo para encontrar un pedido con el estado ORDER_STATE_CANCELED. La función guardará el primer pedido coincidente en la variable getLastCanceledPendingOrderData . El bucle garantiza que comprobemos el estado de cada orden y, una vez que se encuentra una orden cancelada, se guarda en la variable de referencia, tras lo cual el bucle finaliza. Después de almacenar los datos del último pedido pendiente cancelado, la función devuelve true, lo que indica que la operación se ha realizado correctamente.

int totalPendingOrderInfo = GetTotalDataInfoSize(GET_PENDING_ORDERS_HISTORY_DATA);
for(int x = 0; x < totalPendingOrderInfo; x++)
  {
   if(pendingOrderInfo[x].state == ORDER_STATE_CANCELED)
     {
      getLastCanceledPendingOrderData = pendingOrderInfo[x];
      break;
     }
  }
return(true);

Si no hay datos históricos disponibles, se registra un mensaje de error utilizando la función Print(), incluyendo el nombre de la función (__FUNCTION__) para mayor claridad. Este mensaje ayuda a identificar el problema durante la depuración. La función garantiza que la variable de referencia proporcionada permanezca sin cambios si la operación falla, manteniendo la integridad de la entrada.

Aquí está la implementación completa de la función GetLastCanceledPendingOrderData().

bool GetLastCanceledPendingOrderData(PendingOrderData &getLastCanceledPendingOrderData) export
  {
   if(!FetchHistoryByCriteria(GET_PENDING_ORDERS_HISTORY_DATA))
     {
      Print(__FUNCTION__, ": No trading history available. Last canceled pending order can't be retrieved.");
      return(false);
     }

//-- Save the last canceled pending order data in the referenced getLastCanceledPendingOrderData variable
   int totalPendingOrderInfo = GetTotalDataInfoSize(GET_PENDING_ORDERS_HISTORY_DATA);
   for(int x = 0; x < totalPendingOrderInfo; x++)
     {
      if(pendingOrderInfo[x].state == ORDER_STATE_CANCELED)
        {
         getLastCanceledPendingOrderData = pendingOrderInfo[x];
         break;
        }
     }
   return(true);
  }


Función de tipo de última orden pendiente cancelada

La función LastCanceledPendingOrderType() se encarga de recuperar el tipo de orden de la orden pendiente cancelada más recientemente y guardarla en la variable referenciada, lastCanceledPendingOrderType. Esta variable se pasa a la función como entrada, donde almacena el tipo de orden recuperado.

Para ello, se declara una variable temporal PendingOrderData , lastCanceledPendingOrderInfo, para almacenar los detalles de la última orden pendiente cancelada. A continuación, la función llama a GetLastCanceledPendingOrderData() para obtener la información necesaria sobre la orden.

Si la recuperación se realiza correctamente, se extrae el campo type de lastCanceledPendingOrderInfo y se asigna a lastCanceledPendingOrderType. A continuación, la función devuelve true para confirmar que la operación se ha realizado correctamente. Por el contrario, si la recuperación falla, la función devuelve false, dejando la variable lastCanceledPendingOrderType sin cambios.

A continuación se muestra la implementación completa de la función LastCanceledPendingOrderType().

bool LastCanceledPendingOrderType(ENUM_ORDER_TYPE &lastCanceledPendingOrderType) export
  {
   PendingOrderData lastCanceledPendingOrderInfo;
   if(GetLastCanceledPendingOrderData(lastCanceledPendingOrderInfo))
     {
      lastCanceledPendingOrderType = lastCanceledPendingOrderInfo.type;
      return(true);
     }
   return(false);
  }


Función del símbolo de la última orden pendiente cancelada

La función LastCanceledPendingOrderSymbol() está diseñada para recuperar el símbolo bursátil vinculado a la orden pendiente cancelada más recientemente. Este símbolo se almacena en la variable lastCanceledPendingOrderSymbol proporcionada, lo que ofrece una forma sencilla de acceder a esta propiedad específica. La función utiliza la utilidad GetLastCanceledPendingOrderData() para obtener los detalles necesarios del pedido.

El proceso comienza invocando GetLastCanceledPendingOrderData(), que recupera los detalles de la última orden pendiente cancelada. Si la recuperación se realiza correctamente, el campo del símbolo de los datos obtenidos se asigna a la variable lastCanceledPendingOrderSymbol referenciada, y la función devuelve true para confirmar el éxito de la operación.

En los casos en que la recuperación de datos falla, como cuando no hay un historial de órdenes relevante, la función deja la variable referenciada sin cambios y devuelve false para indicar el fallo.

A continuación se muestra la implementación completa de la función LastCanceledPendingOrderSymbol().

bool LastCanceledPendingOrderSymbol(string &lastCanceledPendingOrderSymbol) export
  {
   PendingOrderData lastCanceledPendingOrderInfo;
   if(GetLastCanceledPendingOrderData(lastCanceledPendingOrderInfo))
     {
      lastCanceledPendingOrderSymbol = lastCanceledPendingOrderInfo.symbol;
      return(true);
     }
   return(false);
  }


Función de ticket de última orden pendiente cancelada

La función LastCanceledPendingOrderTicket() recupera el número de ticket de la orden pendiente cancelada más recientemente y lo almacena en la variable lastCanceledPendingOrderTicket a la que se hace referencia. Llama a la función GetLastCanceledPendingOrderData() para obtener los detalles del pedido.

Si la recuperación de datos se realiza correctamente, el número de ticket se almacena en la variable referenciada y la función devuelve true. Si el proceso falla, la función devuelve false, dejando la variable sin cambios.

A continuación se muestra el código completo de la función LastCanceledPendingOrderTicket().
bool LastCanceledPendingOrderTicket(ulong &lastCanceledPendingOrderTicket) export
  {
   PendingOrderData lastCanceledPendingOrderInfo;
   if(GetLastCanceledPendingOrderData(lastCanceledPendingOrderInfo))
     {
      lastCanceledPendingOrderTicket = lastCanceledPendingOrderInfo.ticket;
      return(true);
     }
   return(false);
  }


Función de precio de apertura de la última orden pendiente cancelada

La función LastCanceledPendingOrderPriceOpen() obtiene el precio de apertura de la orden pendiente cancelada más recientemente y lo almacena en la variable referenciada lastCanceledPendingOrderPriceOpen. Llama a GetLastCanceledPendingOrderData() para recopilar los detalles del pedido.

Una vez recuperado correctamente, el precio de apertura se guarda en la variable proporcionada y la función devuelve true. Si la recuperación falla, la función devuelve false sin alterar la variable.

Aquí está la implementación completa de la función LastCanceledPendingOrderPriceOpen().

bool LastCanceledPendingOrderPriceOpen(double &lastCanceledPendingOrderPriceOpen) export
  {
   PendingOrderData lastCanceledPendingOrderInfo;
   if(GetLastCanceledPendingOrderData(lastCanceledPendingOrderInfo))
     {
      lastCanceledPendingOrderPriceOpen = lastCanceledPendingOrderInfo.priceOpen;
      return(true);
     }
   return(false);
  }


Función de precio de stop loss de la última orden pendiente cancelada

La función LastCanceledPendingOrderSlPrice() obtiene el precio de stop loss de la orden pendiente cancelada más recientemente y lo guarda en la variable referenciada lastCanceledPendingOrderSlPrice. Utiliza la función GetLastCanceledPendingOrderData() para recuperar los detalles de la orden.

Si la recuperación se realiza correctamente, el precio de stop loss se almacena en la variable referenciada y la función devuelve true. Si el proceso falla, la función devuelve false sin alterar la variable.

Así es como se implementa completamente la función LastCanceledPendingOrderSlPrice().

bool LastCanceledPendingOrderSlPrice(double &lastCanceledPendingOrderSlPrice) export
  {
   PendingOrderData lastCanceledPendingOrderInfo;
   if(GetLastCanceledPendingOrderData(lastCanceledPendingOrderInfo))
     {
      lastCanceledPendingOrderSlPrice = lastCanceledPendingOrderInfo.slPrice;
      return(true);
     }
   return(false);
  }


Función de precio de take profit de la última orden pendiente cancelada

La función LastCanceledPendingOrderTpPrice() recupera el precio de take profit de la orden pendiente cancelada más recientemente y lo almacena en la variable referenciada lastCanceledPendingOrderTpPrice. Utiliza la función GetLastCanceledPendingOrderData() para obtener los detalles de la orden.

Si la recuperación de datos se realiza correctamente, el precio de take profit se guarda en la variable referenciada y la función devuelve true. Si la recuperación falla, la función devuelve false sin modificar la variable.

A continuación se muestra la implementación completa de la función LastCanceledPendingOrderTpPrice().

bool LastCanceledPendingOrderTpPrice(double &lastCanceledPendingOrderTpPrice) export
  {
   PendingOrderData lastCanceledPendingOrderInfo;
   if(GetLastCanceledPendingOrderData(lastCanceledPendingOrderInfo))
     {
      lastCanceledPendingOrderTpPrice = lastCanceledPendingOrderInfo.tpPrice;
      return(true);
     }
   return(false);
  }


Función de stop loss de pips de última orden pendiente cancelada

La función LastCanceledPendingOrderSlPips() recupera el valor stop loss de pips de la orden pendiente cancelada más recientemente y lo almacena en la variable referenciada lastCanceledPendingOrderSlPips. Al utilizar la función GetLastCanceledPendingOrderData(), accede a los detalles relevantes de la orden para extraer este valor específico.

La función comienza invocando GetLastCanceledPendingOrderData() para obtener los datos de la última orden pendiente cancelada. Si la recuperación se realiza correctamente, el valor stop loss de pips se extrae de los datos obtenidos y se asigna a la variable lastCanceledPendingOrderSlPips . A continuación, la función indica que se ha realizado correctamente devolviendo true.

Por otro lado, si la función no logra recuperar los datos requeridos, tal vez debido a la falta de información histórica, se abstiene de alterar la variable lastCanceledPendingOrderSlPips y, en su lugar, devuelve false.

Aquí está la implementación completa de la función LastCanceledPendingOrderSlPips().

bool LastCanceledPendingOrderSlPips(int &lastCanceledPendingOrderSlPips) export
  {
   PendingOrderData lastCanceledPendingOrderInfo;
   if(GetLastCanceledPendingOrderData(lastCanceledPendingOrderInfo))
     {
      lastCanceledPendingOrderSlPips = lastCanceledPendingOrderInfo.slPips;
      return(true);
     }
   return(false);
  }


Función de take profit de pips de la última orden pendiente cancelada

La función LastCanceledPendingOrderTpPips() recupera el valor del take profit de pips asociado a la orden pendiente cancelada más recientemente. El valor recuperado se guarda en la variable referenciada, lastCanceledPendingOrderTpPips. Para lograrlo, la función se basa en la función GetLastCanceledPendingOrderData(), que obtiene los detalles necesarios de la orden.

Inicialmente, se declara una variable PendingOrderData para almacenar temporalmente los detalles de la última orden pendiente cancelada. A continuación, se llama a la función GetLastCanceledPendingOrderData() para rellenar esta variable con los datos pertinentes. Si la operación tiene éxito, el valor de take profit de pips se extrae de la variable y se almacena en la variable lastCanceledPendingOrderTpPips. A continuación, la función devuelve true, lo que indica que se ha realizado correctamente.

Sin embargo, si la recuperación de datos falla, la función devuelve false, dejando la variable referenciada sin cambios.

Aquí está la implementación completa de la función LastCanceledPendingOrderTpPips().

bool LastCanceledPendingOrderTpPips(int &lastCanceledPendingOrderTpPips) export
  {
   PendingOrderData lastCanceledPendingOrderInfo;
   if(GetLastCanceledPendingOrderData(lastCanceledPendingOrderInfo))
     {
      lastCanceledPendingOrderTpPips = lastCanceledPendingOrderInfo.tpPips;
      return(true);
     }
   return(false);
  }


Función de configuración de la hora de la última orden pendiente cancelada

La función LastCanceledPendingOrderTimeSetup() recupera la configuración de tiempo de la orden pendiente cancelada más recientemente y la almacena en la variable lastCanceledPendingOrderTimeSetup a la que se hace referencia. Para realizar esta operación, la función utiliza la función GetLastCanceledPendingOrderData() para acceder a los detalles necesarios sobre la orden cancelada.

Comenzamos declarando una variable PendingOrderData para almacenar temporalmente los datos de la última orden pendiente cancelada. A continuación, se invoca la función GetLastCanceledPendingOrderData() para rellenar esta variable con los detalles relevantes del pedido. Si la recuperación se realiza correctamente, se extrae el valor de configuración de hora y se almacena en la variable lastCanceledPendingOrderTimeSetup . A continuación, la función devuelve true, lo que confirma que la operación se ha realizado correctamente.

Por otro lado, si la recuperación de datos falla, la función devuelve false, lo que garantiza que la variable lastCanceledPendingOrderTimeSetup permanezca sin cambios.

A continuación se muestra la implementación completa de la función LastCanceledPendingOrderTimeSetup().

bool LastCanceledPendingOrderTimeSetup(datetime &lastCanceledPendingOrderTimeSetup) export
  {
   PendingOrderData lastCanceledPendingOrderInfo;
   if(GetLastCanceledPendingOrderData(lastCanceledPendingOrderInfo))
     {
      lastCanceledPendingOrderTimeSetup = lastCanceledPendingOrderInfo.timeSetup;
      return(true);
     }
   return(false);
  }


Función de tiempo de finalización de la última orden pendiente cancelada

La función LastCanceledPendingOrderTimeDone() está diseñada para recuperar la hora en la que se ejecutó la última orden pendiente cancelada. Este tiempo se almacena en la variable referenciada lastCanceledPendingOrderTimeDone, lo que proporciona una forma sencilla de acceder a este dato específico. La función se basa en la función de utilidad GetLastCanceledPendingOrderData() para recopilar los detalles necesarios de la orden cancelada.

La función comienza llamando a GetLastCanceledPendingOrderData(), que extrae los detalles de la orden pendiente cancelada más recientemente. Si la operación de recuperación se realiza correctamente, el campo time de los datos recuperados se asigna a la variable lastCanceledPendingOrderTimeDone , y la función devuelve true, lo que confirma que la operación se ha realizado correctamente.

Sin embargo, si el proceso de recuperación falla, por ejemplo, si no hay un historial de órdenes relevante, la función no modifica la variable a la que se hace referencia y, en su lugar, devuelve false, lo que indica que no se ha podido obtener la información deseada.

Para tareas que requieren el cálculo del tiempo total que una orden pendiente estuvo abierta antes de ser cancelada, esta función se puede utilizar junto con la función LastCanceledPendingOrderTimeSetup(). Juntos, le permiten determinar la duración entre la creación del pedido y su cancelación.

A continuación se muestra la implementación completa de la función LastCanceledPendingOrderTimeDone().

bool LastCanceledPendingOrderTimeDone(datetime &lastCanceledPendingOrderTimeDone) export
  {
   PendingOrderData lastCanceledPendingOrderInfo;
   if(GetLastCanceledPendingOrderData(lastCanceledPendingOrderInfo))
     {
      lastCanceledPendingOrderTimeDone = lastCanceledPendingOrderInfo.timeDone;
      return(true);
     }
   return(false);
  }


Función de tiempo de vencimiento de la última orden pendiente cancelada

La función LastCanceledPendingOrderExpirationTime() obtiene la hora de vencimiento de la orden pendiente cancelada más recientemente y la asigna a la variable lastCanceledPendingOrderExpirationTime a la que se hace referencia. Llama a la función GetLastCanceledPendingOrderData() para obtener los detalles del pedido.

Si la recuperación de datos se realiza correctamente, el tiempo de caducidad se guarda en la variable referenciada y la función devuelve true. Si la recuperación falla, la función devuelve false sin alterar la variable.

A continuación se muestra la implementación completa de la función LastCanceledPendingOrderExpirationTime() .
bool LastCanceledPendingOrderExpirationTime(datetime &lastCanceledPendingOrderExpirationTime) export
  {
   PendingOrderData lastCanceledPendingOrderInfo;
   if(GetLastCanceledPendingOrderData(lastCanceledPendingOrderInfo))
     {
      lastCanceledPendingOrderExpirationTime = lastCanceledPendingOrderInfo.expirationTime;
      return(true);
     }
   return(false);
  }


Función de ID de posición de la última orden pendiente cancelada

La función LastCanceledPendingOrderPositionId() extrae la ID de posición de la orden pendiente cancelada más recientemente y actualiza la variable lastCanceledPendingOrderPositionId referenciada con este valor. Para acceder a los datos necesarios, invoca la función GetLastCanceledPendingOrderData().

Si la operación se realiza correctamente, la ID de posición se coloca en la variable referenciada y la función devuelve true. En caso de que la recuperación no se realice correctamente, la función devuelve false, dejando la variable sin cambios.

Aquí está la implementación completa de la función LastCanceledPendingOrderPositionId().
bool LastCanceledPendingOrderPositionId(ulong &lastCanceledPendingOrderPositionId) export
  {
   PendingOrderData lastCanceledPendingOrderInfo;
   if(GetLastCanceledPendingOrderData(lastCanceledPendingOrderInfo))
     {
      lastCanceledPendingOrderPositionId = lastCanceledPendingOrderInfo.positionId;
      return(true);
     }
   return(false);
  }


Función de número mágico de la última orden pendiente cancelada

La función LastCanceledPendingOrderMagic() obtiene el número mágico asociado con la orden pendiente cancelada más recientemente y lo asigna a la variable lastCanceledPendingOrderMagic referenciada. Este proceso se basa en la función GetLastCanceledPendingOrderData() para obtener los detalles necesarios.

Si la recuperación de datos se realiza correctamente, el número mágico se transfiere a la variable referenciada y la función devuelve true. Si la operación falla, la función devuelve false, dejando la variable sin modificar.

Aquí está la implementación completa de la función LastCanceledPendingOrderMagic().
bool LastCanceledPendingOrderMagic(ulong &lastCanceledPendingOrderMagic) export
  {
   PendingOrderData lastCanceledPendingOrderInfo;
   if(GetLastCanceledPendingOrderData(lastCanceledPendingOrderInfo))
     {
      lastCanceledPendingOrderMagic = lastCanceledPendingOrderInfo.magic;
      return(true);
     }
   return(false);
  }


Función de motivo de la última orden pendiente cancelada

La función LastCanceledPendingOrderReason() extrae el código de motivo de la orden pendiente cancelada más recientemente y lo almacena en la variable lastCanceledPendingOrderReason a la que se hace referencia. Utiliza la función de utilidad GetLastCanceledPendingOrderData() para recuperar los detalles del pedido.

El código de motivo indica cómo se realizó el pedido o por qué se activó. Por ejemplo, ORDER_REASON_CLIENT muestra que la orden se realizó manualmente desde un terminal de escritorio, mientras que ORDER_REASON_EXPERT indica que la orden fue realizada por un Asesor Experto, y ORDER_REASON_WEB indica que la orden se realizó desde una plataforma web. Otras posibles razones incluyen la activación debido a Stop Loss o Take Profit, o como resultado de un evento Stop Out.

Si la recuperación de datos se realiza correctamente, la función almacena el código de motivo en la variable proporcionada y devuelve true. Si falla, la función devuelve false sin modificar la variable.

A continuación se muestra la implementación completa de la función LastCanceledPendingOrderReason().

bool LastCanceledPendingOrderReason(ENUM_ORDER_REASON &lastCanceledPendingOrderReason) export
  {
   PendingOrderData lastCanceledPendingOrderInfo;
   if(GetLastCanceledPendingOrderData(lastCanceledPendingOrderInfo))
     {
      lastCanceledPendingOrderReason = lastCanceledPendingOrderInfo.reason;
      return(true);
     }
   return(false);
  }


Función de relleno del último tipo de orden pendiente cancelada

La función LastCanceledPendingOrderTypeFilling() determina el tipo de ejecución de la orden pendiente cancelada más recientemente y lo asigna a la variable lastCanceledPendingOrderTypeFilling referenciada. Para ello, llama a la función GetLastCanceledPendingOrderData() para recopilar los detalles necesarios del pedido.

El tipo de relleno proporciona información esencial sobre cómo se pretendía ejecutar la orden. Si el tipo es «Fill or Kill (FOK)», la orden debe ejecutarse íntegramente al precio solicitado y, si esto no es posible, se cancela. En el caso de «Immediate or Cancel (IOC)», la orden se ejecuta inmediatamente para el volumen disponible al precio solicitado, y cualquier parte no cubierta se descarta. El tipo «Return» permite que la orden se ejecute parcialmente si no está disponible el volumen total, y el volumen restante sin ejecutar se convierte en una orden limitada. Esta orden limitada permanece activa en el mercado hasta que se ejecuta o se cancela manualmente o mediante un Asesor Experto.

Si la operación de recuperación de datos se realiza correctamente, el tipo de relleno se almacena en la variable proporcionada y la función devuelve true. Si la recuperación falla, la función devuelve false sin modificar la variable referenciada.

A continuación se muestra la implementación completa de la función LastCanceledPendingOrderTypeFilling() .

bool LastCanceledPendingOrderTypeFilling(ENUM_ORDER_TYPE_FILLING &lastCanceledPendingOrderTypeFilling) export
  {
   PendingOrderData lastCanceledPendingOrderInfo;
   if(GetLastCanceledPendingOrderData(lastCanceledPendingOrderInfo))
     {
      lastCanceledPendingOrderTypeFilling = lastCanceledPendingOrderInfo.typeFilling;
      return(true);
     }
   return(false);
  }


Función de tiempo del último tipo de orden pendiente cancelada

La función LastCanceledPendingOrderTypeTime() extrae el tipo de hora de la orden pendiente cancelada más recientemente y actualiza la variable lastCanceledPendingOrderTypeTime referenciada con este valor. Utiliza la función GetLastCanceledPendingOrderData() para recuperar los detalles necesarios de la orden.

El tipo de tiempo (typeTime) de un pedido indica cuánto tiempo permanece válido el pedido. Hay varios tipos de tiempo asociados a las órdenes: Good Till Cancel (GTC), en la que la orden permanece activa hasta que se cancela manualmente; Good Till Current Trade Day, en la que la orden caduca al final del día de negociación; Good Till Expired, en la que la orden caduca después de una fecha o hora específicas; y Good Till Specified Day, en la que la orden es válida hasta las 23:59:59 del día especificado, con la condición añadida de que, si la hora no coincide con una sesión bursátil, la orden caduca en el horario bursátil más cercano.

Si la recuperación se realiza correctamente, la función asigna el tipo de tiempo a la variable referenciada y devuelve true. Si la recuperación falla, deja la variable sin cambios y devuelve false.

Aquí está la implementación completa de la función LastCanceledPendingOrderTypeTime().

bool LastCanceledPendingOrderTypeTime(datetime &lastCanceledPendingOrderTypeTime) export
  {
   PendingOrderData lastCanceledPendingOrderInfo;
   if(GetLastCanceledPendingOrderData(lastCanceledPendingOrderInfo))
     {
      lastCanceledPendingOrderTypeTime = lastCanceledPendingOrderInfo.typeTime;
      return(true);
     }
   return(false);
  }


Función de comentarios sobre la última orden pendiente cancelada

La función LastCanceledPendingOrderComment() obtiene el comentario asociado a la orden pendiente cancelada más recientemente y lo coloca en la variable lastCanceledPendingOrderComment a la que se hace referencia. Utiliza la función GetLastCanceledPendingOrderData() para obtener la información necesaria sobre la orden.

Si los datos del pedido se obtienen correctamente, se asigna el comentario a la variable referenciada y la función devuelve true. Si la operación falla, la variable referenciada permanece sin modificar y la función devuelve false.

A continuación se muestra la implementación completa de la función LastCanceledPendingOrderComment().
bool LastCanceledPendingOrderComment(string &lastCanceledPendingOrderComment) export
  {
   PendingOrderData lastCanceledPendingOrderInfo;
   if(GetLastCanceledPendingOrderData(lastCanceledPendingOrderInfo))
     {
      lastCanceledPendingOrderComment = lastCanceledPendingOrderInfo.comment;
      return(true);
     }
   return(false);
  }


Conclusión

Ahora hemos desarrollado una biblioteca de gestión de historiales completa que es capaz de consultar, recuperar, clasificar y almacenar el historial de operaciones de órdenes pendientes ejecutadas y canceladas, así como de transacciones y posiciones. Esto supone un hito importante en la simplificación de la gestión de datos históricos de trading en MQL5, ya que proporciona a los desarrolladores un conjunto de herramientas versátiles y eficientes para gestionar requisitos de datos complejos.

Lo que distingue a esta librería es su marco robusto y organizado para gestionar datos comerciales. Al proporcionar funciones estructuradas e intuitivas, transforma la tarea, a menudo engorrosa, de gestionar el historial de operaciones en un proceso fluido. Este enfoque mejora la accesibilidad a datos críticos y garantiza al mismo tiempo que se pueda aplicar de manera eficaz en diversos escenarios del mundo real, como la creación de herramientas de análisis del rendimiento, la optimización de estrategias comerciales o la realización de revisiones históricas en profundidad.

El siguiente paso de esta serie consistirá en crear los archivos de encabezado necesarios que permitirán a los usuarios finales importar e integrar sin problemas la librería en sus proyectos. Una vez completados los encabezados, mostraré cómo implementar la librería, asegurándome de que los desarrolladores puedan incorporar fácilmente su funcionalidad en su código base.

Para su comodidad, al final de este artículo se adjunta el código fuente actualizado de la librería HistoryManager.mq5, que incluye todas las funciones creadas en este y en artículos anteriores, además del archivo binario ejecutable EX5 compilado HistoryManager.ex5. En el próximo artículo, concluiremos la biblioteca de gestión de historiales proporcionando documentación completa sobre la implementación y ejemplos prácticos que le guiarán en el uso eficaz de esta librería EX5. Gracias por seguirnos, espero volver a comunicarme con ustedes cuando lleguemos a la etapa final de este proyecto.

Traducción del inglés realizada por MetaQuotes Ltd.
Artículo original: https://www.mql5.com/en/articles/16906

Archivos adjuntos |
HistoryManager.mq5 (81.42 KB)
HistoryManager.ex5 (33.63 KB)
Redes neuronales en el trading: Modelos bidimensionales del espacio de enlaces (Quimera) Redes neuronales en el trading: Modelos bidimensionales del espacio de enlaces (Quimera)
Descubra el innovador framework Chimera, un modelo bidimensional de espacio de estados que utiliza redes neuronales para analizar series temporales multivariantes. Este método ofrece una gran precisión con un bajo coste computacional, superando a los enfoques tradicionales y a las arquitecturas de Transformer.
Desarrollamos un asesor experto multidivisas (Parte 22): Inicio de la transición a la sustitución dinámica de ajustes Desarrollamos un asesor experto multidivisas (Parte 22): Inicio de la transición a la sustitución dinámica de ajustes
Si hemos empezado a automatizar la optimización periódica, también deberíamos ocuparnos de la actualización automática de los ajustes de los asesores expertos que ya están trabajando en la cuenta comercial. También deberíamos permitirle ejecutar un asesor experto en el simulador de estrategias y cambiar su configuración en una sola pasada.
Simulación de mercado (Parte 07): Sockets (I) Simulación de mercado (Parte 07): Sockets (I)
Sockets. ¿Sabes para qué sirven o cómo usarlos en MetaTrader 5? Si la respuesta es no, comencemos aprendiendo un poco sobre ellos. Este artículo trata de lo más básico. Pero, como existen diversas maneras de hacer lo mismo, y lo que realmente nos interesa es siempre el resultado, quiero mostrar que sí, existe una forma sencilla de pasar datos desde MetaTrader 5 hacia otros programas, como, por ejemplo, Excel. Sin embargo, la idea principal no es transferir datos de MetaTrader 5 a Excel, sino hacer lo contrario. Es decir, transferir datos desde Excel, o desde cualquier otro programa, hacia MetaTrader 5.
Simulación de mercado (Parte 06): Transfiriendo información desde MetaTrader 5 hacia Excel Simulación de mercado (Parte 06): Transfiriendo información desde MetaTrader 5 hacia Excel
A muchas personas, especialmente a los no programadores, les resulta muy difícil transferir información entre MetaTrader 5 y otros programas. Uno de esos programas es Excel. Muchos utilizan Excel para gestionar y controlar sus riesgos, ya que es un programa muy bueno y fácil de aprender, incluso para quienes no son programadores de VBA. A continuación, voy a mostrar cómo establecer la comunicación entre MetaTrader 5 y Excel (un método muy sencillo).