English Русский 中文 Español Deutsch 日本語
preview
MQL5 Trading Toolkit (Parte 7): Expandindo a Biblioteca EX5 de Gerenciamento de Histórico com as Funções da Última Ordem Pendente Cancelada

MQL5 Trading Toolkit (Parte 7): Expandindo a Biblioteca EX5 de Gerenciamento de Histórico com as Funções da Última Ordem Pendente Cancelada

MetaTrader 5Exemplos |
125 0
Wanateki Solutions LTD
Kelvin Muturi Muigua

Introdução

Ao longo desta série de artigos, dedicamos um esforço significativo à construção de um conjunto abrangente de bibliotecas de negociação EX5. Essas bibliotecas são projetadas para otimizar o processo de desenvolvimento de aplicações MQL5, reduzindo drasticamente o tempo e o esforço necessários para lidar com operações de negociação e gerenciar os dados históricos de ordens, negociações e posições. Ao oferecer funções bem estruturadas e intuitivas, essas bibliotecas simplificam tarefas complexas, permitindo que os desenvolvedores processem o histórico de negociações de forma integrada, com precisão e eficiência.

Neste artigo, finalizaremos o desenvolvimento do último módulo da nossa biblioteca History Management EX5, especificamente projetada para lidar com a recuperação e o armazenamento de propriedades associadas à ordem pendente cancelada mais recente. Este módulo aborda uma limitação importante da linguagem MQL5, que não possui funções diretas, em uma única linha, para acessar e gerenciar esse tipo de dado histórico. Ao preencher essa lacuna, nossa biblioteca oferece aos desenvolvedores uma solução otimizada para trabalhar de forma eficiente com informações de ordens pendentes canceladas.

O foco deste módulo é fornecer uma maneira simples, porém eficaz, de recuperar e armazenar detalhes críticos de ordens pendentes canceladas, como seu símbolo, preço de abertura, stop loss baseado em pips, take profit, durações baseadas em tempo e outros atributos relevantes. Ao encapsular essa funcionalidade em funções fáceis de usar, a biblioteca permite que os desenvolvedores acessem os dados necessários com esforço e complexidade mínimos. Isso a torna uma ferramenta indispensável para qualquer pessoa que deseje criar aplicações MQL5 que dependam de dados históricos de negociação precisos e acessíveis. Para aqueles interessados em analisar o desempenho de negociação, este módulo simplifica o processo, permitindo que você se concentre no panorama geral.

Para começar, abra o arquivo HistoryManager.mq5 do artigo anterior, onde desenvolvemos funções para lidar com a ordem pendente preenchida mais recente. Nesta seção, começaremos a implementar a função GetLastCanceledPendingOrderData(), que é central para o processamento de ordens pendentes canceladas. Antes de prosseguir, certifique-se de ter baixado o arquivo-fonte HistoryManager.mq5, que está anexado ao final do artigo anterior.

Assim que o arquivo estiver pronto, localize a seção onde concluímos no último artigo. Especificamente, continuaremos adicionando novo código logo abaixo da função LastFilledPendingOrderComment(). Esse posicionamento garante que a nova funcionalidade esteja logicamente organizada junto às funções relacionadas, tornando a biblioteca mais fácil de navegar e expandir no futuro, caso surja a necessidade.


Conteúdo Principal

  1. Obter os Dados da Última Ordem Pendente Cancelada
  2. Obter o Tipo da Última Ordem Pendente Cancelada
  3. Obter o Símbolo da Última Ordem Pendente Cancelada
  4. Obter o Ticket da Última Ordem Pendente Cancelada
  5. Obter o Preço de Abertura da Última Ordem Pendente Cancelada
  6. Obter o Preço de Stop Loss da Última Ordem Pendente Cancelada
  7. Obter o Preço de Take Profit da Última Ordem Pendente Cancelada
  8. Obter o Stop Loss em Pips da Última Ordem Pendente Cancelada
  9. Obter o Take Profit em Pips da Última Ordem Pendente Cancelada
  10. Obter o Horário de Configuração da Última Ordem Pendente Cancelada
  11. Obter o Horário de Conclusão da Última Ordem Pendente Cancelada
  12. Obter o Horário de Expiração da Última Ordem Pendente Cancelada
  13. Obter o ID da Posição da Última Ordem Pendente Cancelada
  14. Obter o Magic da Última Ordem Pendente Cancelada
  15. Obter o Motivo da Última Ordem Pendente Cancelada
  16. Obter o Tipo de Preenchimento da Última Ordem Pendente Cancelada
  17. Obter o Tipo de Tempo da Última Ordem Pendente Cancelada
  18. Obter o Comentário da Última Ordem Pendente Cancelada
  19. Conclusão



Função Get Last Canceled Pending Order Data

A função GetLastCanceledPendingOrderData() recupera os detalhes da ordem pendente cancelada mais recente e salva essas informações na referência getLastCanceledPendingOrderData especificada. Ela depende da função FetchHistoryByCriteria() para acessar os dados históricos de negociação, identificando a última ordem pendente cancelada por meio da análise do conjunto de dados relevante. Se nenhum dado desse tipo for encontrado, a função registra uma mensagem de erro e retorna false. Quando bem-sucedida, ela armazena as informações recuperadas na referência fornecida e retorna true.

Vamos começar criando a definição ou assinatura da função. A função GetLastCanceledPendingOrderData() deve ser acessível a programas MQL5 que a importem para uso externo, motivo pelo qual a definimos como exported.

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

Prosseguiremos tentando buscar o histórico de ordens pendentes usando a função FetchHistoryByCriteria() com o argumento GET_PENDING_ORDERS_HISTORY_DATA . Isso garante que a função tenha acesso aos dados necessários para ordens pendentes canceladas.

Se a função FetchHistoryByCriteria() retornar false, isso indica que não há histórico de negociação disponível. Nesse caso, registramos uma mensagem de erro usando a função Print() para auxiliar na depuração. A função então retorna false, indicando a falha na recuperação dos dados.

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

Quando os dados históricos estiverem disponíveis, calcularemos o número total de ordens pendentes usando a função GetTotalDataInfoSize(). Esse valor nos ajudará a percorrer o array pendingOrderInfo para localizar a ordem pendente cancelada mais recente.

Em seguida, percorreremos o array pendingOrderInfo para encontrar uma ordem com o estado ORDER_STATE_CANCELED. A função salvará a primeira ordem correspondente na variável getLastCanceledPendingOrderData . O loop garante que verifiquemos o estado de cada ordem e, assim que uma ordem cancelada for encontrada, ela será salva na variável de referência, após o que o loop será encerrado. Após armazenar os dados da última ordem pendente cancelada, a função retorna true, indicando que a operação foi bem-sucedida.

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);

Se nenhum dado histórico estiver disponível, uma mensagem de erro será registrada usando a função Print(), incluindo o nome da função (FUNCTION) para maior clareza. Essa mensagem ajuda a identificar o problema durante a depuração. A função garante que a variável de referência fornecida permaneça inalterada caso a operação falhe, mantendo a integridade da entrada.

Aqui está a implementação completa da função 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);
  }


Função Last Canceled Pending Order Type

A função LastCanceledPendingOrderType() é responsável por recuperar o tipo de ordem da ordem pendente cancelada mais recente e salvá-lo na variável referenciada lastCanceledPendingOrderType. Essa variável é passada para a função como entrada, onde armazena o tipo de ordem recuperado.

Para realizar isso, uma variável temporária PendingOrderData , lastCanceledPendingOrderInfo, é declarada para armazenar os detalhes da última ordem pendente cancelada. Em seguida, a função chama GetLastCanceledPendingOrderData() para obter as informações necessárias da ordem.

Se a recuperação for bem-sucedida, o campo type de lastCanceledPendingOrderInfo é extraído e atribuído a lastCanceledPendingOrderType. A função então retorna true para confirmar a operação bem-sucedida. Por outro lado, se a recuperação falhar, a função retorna false, deixando a variável lastCanceledPendingOrderType inalterada.

Abaixo está a implementação completa da função LastCanceledPendingOrderType().

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


Função do Símbolo da Última Ordem Pendente Cancelada

A função LastCanceledPendingOrderSymbol() foi projetada para buscar o símbolo de negociação vinculado à ordem pendente cancelada mais recente. Esse símbolo é armazenado na variável fornecida lastCanceledPendingOrderSymbol , oferecendo uma forma direta de acessar essa propriedade específica. A função depende do utilitário GetLastCanceledPendingOrderData() para obter os detalhes necessários da ordem.

O processo começa com a chamada de GetLastCanceledPendingOrderData(), que recupera os detalhes da última ordem pendente cancelada. Se a recuperação for bem-sucedida, o campo de símbolo dos dados obtidos é atribuído à variável referenciada lastCanceledPendingOrderSymbol , e a função retorna true para confirmar o sucesso da operação.

Nos casos em que a recuperação dos dados falha — como quando não há histórico de ordens relevante — a função mantém a variável referenciada inalterada e retorna false para indicar a falha.

Abaixo está a implementação completa da função LastCanceledPendingOrderSymbol().

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


Função do Ticket da Última Ordem Pendente Cancelada

A função LastCanceledPendingOrderTicket() recupera o número do ticket da ordem pendente cancelada mais recente e o armazena na variável referenciada lastCanceledPendingOrderTicket. Ela chama a função GetLastCanceledPendingOrderData() para buscar os detalhes da ordem.

Se a recuperação dos dados for bem-sucedida, o número do ticket é armazenado na variável referenciada, e a função retorna true. Se o processo falhar, a função retorna false, deixando a variável inalterada.

Abaixo está o código completo da função LastCanceledPendingOrderTicket().
bool LastCanceledPendingOrderTicket(ulong &lastCanceledPendingOrderTicket) export
  {
   PendingOrderData lastCanceledPendingOrderInfo;
   if(GetLastCanceledPendingOrderData(lastCanceledPendingOrderInfo))
     {
      lastCanceledPendingOrderTicket = lastCanceledPendingOrderInfo.ticket;
      return(true);
     }
   return(false);
  }


Função do Preço de Abertura da Última Ordem Pendente Cancelada

A função LastCanceledPendingOrderPriceOpen() busca o preço de abertura da ordem pendente cancelada mais recente e o mantém na variável referenciada lastCanceledPendingOrderPriceOpen . Ela chama GetLastCanceledPendingOrderData() para coletar os detalhes da ordem.

Após a recuperação bem-sucedida, o preço de abertura é salvo na variável fornecida, e a função retorna true. Se a recuperação falhar, a função retorna false sem alterar a variável.

Aqui está a implementação completa da função LastCanceledPendingOrderPriceOpen().

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


Função do Preço de Stop Loss da Última Ordem Pendente Cancelada

A função LastCanceledPendingOrderSlPrice() obtém o preço de stop loss da ordem pendente cancelada mais recente e o salva na variável referenciada lastCanceledPendingOrderSlPrice. Ela utiliza a função GetLastCanceledPendingOrderData() para buscar os detalhes da ordem.

Se a recuperação for bem-sucedida, o preço de stop loss é armazenado na variável referenciada, e a função retorna true. Se o processo falhar, a função retorna false sem alterar a variável.

Veja como a função LastCanceledPendingOrderSlPrice() é implementada por completo.

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


Função do Preço de Take Profit da Última Ordem Pendente Cancelada

A função LastCanceledPendingOrderTpPrice() recupera o preço de take profit da ordem pendente cancelada mais recente e o mantém na variável referenciada lastCanceledPendingOrderTpPrice. Ela utiliza a função GetLastCanceledPendingOrderData() para buscar os detalhes da ordem.

Se a recuperação dos dados for bem-sucedida, o preço de take profit é salvo na variável referenciada, e a função retorna true. Se a recuperação falhar, a função retorna false sem modificar a variável.

Abaixo está a implementação completa da função LastCanceledPendingOrderTpPrice().

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


Função de Stop Loss em Pips da Última Ordem Pendente Cancelada

A função LastCanceledPendingOrderSlPips() recupera o valor de stop loss em pips da ordem pendente cancelada mais recente e o armazena na variável referenciada lastCanceledPendingOrderSlPips . Ao utilizar a função GetLastCanceledPendingOrderData(), ela acessa os detalhes relevantes da ordem para extrair esse valor específico.

A função começa invocando GetLastCanceledPendingOrderData() para obter os dados da última ordem pendente cancelada. Se a recuperação for bem-sucedida, o valor de stop loss em pips é extraído dos dados obtidos e atribuído à variável lastCanceledPendingOrderSlPips . A função então indica sucesso ao retornar true.

Por outro lado, se a função falhar em recuperar os dados necessários — possivelmente devido à ausência de informações históricas — ela se abstém de alterar a variável lastCanceledPendingOrderSlPips e retorna false.

Aqui está a implementação completa da função LastCanceledPendingOrderSlPips().

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


Função de Take Profit em Pips da Última Ordem Pendente Cancelada

A função LastCanceledPendingOrderTpPips() recupera o valor de take profit em pips associado à ordem pendente cancelada mais recente. O valor recuperado é salvo na variável referenciada lastCanceledPendingOrderTpPips. Para isso, a função depende da função GetLastCanceledPendingOrderData(), que busca os detalhes necessários da ordem.

Inicialmente, uma variável PendingOrderData é declarada para armazenar temporariamente os detalhes da última ordem pendente cancelada. Em seguida, a função GetLastCanceledPendingOrderData() é chamada para preencher essa variável com os dados relevantes. Se a operação for bem-sucedida, o valor de take profit em pips é extraído da variável e armazenado na variável lastCanceledPendingOrderTpPips . A função então retorna true, indicando sucesso.

No entanto, se a recuperação dos dados falhar, a função retorna false, deixando a variável referenciada inalterada.

Aqui está a implementação completa da função LastCanceledPendingOrderTpPips().

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


Função do Horário de Configuração da Última Ordem Pendente Cancelada

A função LastCanceledPendingOrderTimeSetup() recupera o horário de configuração da ordem pendente cancelada mais recente e o armazena na variável referenciada lastCanceledPendingOrderTimeSetup. Para realizar essa operação, a função utiliza a função GetLastCanceledPendingOrderData() para acessar os detalhes necessários sobre a ordem cancelada.

Começamos declarando uma variável PendingOrderData para armazenar temporariamente os dados da última ordem pendente cancelada. Em seguida, a função GetLastCanceledPendingOrderData() é invocada para preencher essa variável com os detalhes relevantes da ordem. Se a recuperação for bem-sucedida, o valor de horário de configuração é extraído e armazenado na variável lastCanceledPendingOrderTimeSetup . A função então retorna true, confirmando o sucesso da operação.

Por outro lado, se a recuperação dos dados falhar, a função retorna false, garantindo que a variável lastCanceledPendingOrderTimeSetup permaneça inalterada.

Abaixo está a implementação completa da função LastCanceledPendingOrderTimeSetup().

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


Função do Horário de Conclusão da Última Ordem Pendente Cancelada

A função LastCanceledPendingOrderTimeDone() foi projetada para recuperar o horário em que a ordem pendente cancelada mais recente foi executada. Esse horário é armazenado na variável referenciada lastCanceledPendingOrderTimeDone, oferecendo uma forma direta de acessar esse dado específico. A função depende da função utilitária GetLastCanceledPendingOrderData() para reunir os detalhes necessários da ordem cancelada.

A função começa chamando GetLastCanceledPendingOrderData(), que extrai os detalhes da ordem pendente cancelada mais recente. Se a operação de recuperação for bem-sucedida, o campo de horário dos dados obtidos é atribuído à variável lastCanceledPendingOrderTimeDone , e a função retorna true, confirmando a operação bem-sucedida.

No entanto, se o processo de recuperação falhar — como na ausência de histórico de ordens relevante — a função não altera a variável referenciada e retorna false, sinalizando a falha na obtenção das informações desejadas.

Para tarefas que exigem o cálculo do tempo total em que uma ordem pendente permaneceu aberta antes de ser cancelada, essa função pode ser utilizada em conjunto com a função LastCanceledPendingOrderTimeSetup(). Juntas, elas permitem determinar a duração entre a criação da ordem e o seu cancelamento.

Abaixo está a implementação completa da função LastCanceledPendingOrderTimeDone().

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


Função do Horário de Expiração da Última Ordem Pendente Cancelada

A função LastCanceledPendingOrderExpirationTime() busca o horário de expiração da ordem pendente cancelada mais recente e o atribui à variável referenciada lastCanceledPendingOrderExpirationTime. Ela chama a função GetLastCanceledPendingOrderData() para obter os detalhes da ordem.

Se a recuperação dos dados for bem-sucedida, o horário de expiração é salvo na variável referenciada e a função retorna true. Se a recuperação falhar, a função retorna false sem alterar a variável.

Abaixo está a implementação completa da função LastCanceledPendingOrderExpirationTime() .
bool LastCanceledPendingOrderExpirationTime(datetime &lastCanceledPendingOrderExpirationTime) export
  {
   PendingOrderData lastCanceledPendingOrderInfo;
   if(GetLastCanceledPendingOrderData(lastCanceledPendingOrderInfo))
     {
      lastCanceledPendingOrderExpirationTime = lastCanceledPendingOrderInfo.expirationTime;
      return(true);
     }
   return(false);
  }


Função do ID da Posição da Última Ordem Pendente Cancelada

A função LastCanceledPendingOrderPositionId() extrai o ID da posição da ordem pendente cancelada mais recente e atualiza a variável referenciada lastCanceledPendingOrderPositionId com esse valor. Para acessar os dados necessários, ela invoca a função GetLastCanceledPendingOrderData().

Se a operação for bem-sucedida, o ID da posição é inserido na variável referenciada, e a função retorna true. Caso a recuperação não seja bem-sucedida, a função retorna false, deixando a variável inalterada.

Aqui está a implementação completa da função LastCanceledPendingOrderPositionId().
bool LastCanceledPendingOrderPositionId(ulong &lastCanceledPendingOrderPositionId) export
  {
   PendingOrderData lastCanceledPendingOrderInfo;
   if(GetLastCanceledPendingOrderData(lastCanceledPendingOrderInfo))
     {
      lastCanceledPendingOrderPositionId = lastCanceledPendingOrderInfo.positionId;
      return(true);
     }
   return(false);
  }


Função Magic da Última Ordem Pendente Cancelada

A função LastCanceledPendingOrderMagic() obtém o número mágico associado à ordem pendente cancelada mais recente e o atribui à variável referenciada lastCanceledPendingOrderMagic. Esse processo depende da função GetLastCanceledPendingOrderData() para buscar os detalhes necessários.

Se a recuperação dos dados for bem-sucedida, o número mágico é transferido para a variável referenciada, e a função retorna true. Caso a operação falhe, a função retorna false, deixando a variável inalterada.

Aqui está a implementação completa da função LastCanceledPendingOrderMagic().
bool LastCanceledPendingOrderMagic(ulong &lastCanceledPendingOrderMagic) export
  {
   PendingOrderData lastCanceledPendingOrderInfo;
   if(GetLastCanceledPendingOrderData(lastCanceledPendingOrderInfo))
     {
      lastCanceledPendingOrderMagic = lastCanceledPendingOrderInfo.magic;
      return(true);
     }
   return(false);
  }


Função do Motivo da Última Ordem Pendente Cancelada

A função LastCanceledPendingOrderReason() extrai o código do motivo da ordem pendente cancelada mais recente e o armazena na variável referenciada lastCanceledPendingOrderReason. Ela utiliza a função utilitária GetLastCanceledPendingOrderData() para recuperar os detalhes da ordem.

O código do motivo indica como a ordem foi colocada ou por que ela foi acionada. Por exemplo, ORDER_REASON_CLIENT mostra que a ordem foi colocada manualmente a partir de um terminal desktop, enquanto ORDER_REASON_EXPERT indica que a ordem foi colocada por um Expert Advisor, e ORDER_REASON_WEB indica que a ordem foi colocada a partir de uma plataforma web. Outros motivos possíveis incluem ativação devido a Stop Loss ou Take Profit, ou como resultado de um evento de Stop Out .

Se a recuperação dos dados for bem-sucedida, a função armazena o código do motivo na variável fornecida e retorna true. Se falhar, a função retorna false sem modificar a variável.

Abaixo está a implementação completa da função LastCanceledPendingOrderReason().

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


Função do Tipo de Preenchimento da Última Ordem Pendente Cancelada

A função LastCanceledPendingOrderTypeFilling() determina o tipo de preenchimento da ordem pendente cancelada mais recente e o atribui à variável referenciada lastCanceledPendingOrderTypeFilling . Ela realiza isso chamando a função GetLastCanceledPendingOrderData() para reunir os detalhes necessários da ordem.

O tipo de preenchimento fornece informações essenciais sobre como a ordem foi planejada para ser executada. Se o tipo for "Fill or Kill (FOK)", a ordem deve ser totalmente preenchida ao preço solicitado e, se isso não for possível, ela é cancelada. Para "Immediate or Cancel (IOC)", a ordem é executada imediatamente para o volume disponível ao preço solicitado, e qualquer parte não preenchida é descartada. O tipo "Return" permite que a ordem seja parcialmente preenchida se o volume total não estiver disponível, com o volume restante não preenchido convertido em uma ordem limite. Essa ordem limite permanece ativa no mercado até ser preenchida ou cancelada manualmente ou por um Expert Advisor.

Se a operação de recuperação dos dados for bem-sucedida, o tipo de preenchimento é armazenado na variável fornecida, e a função retorna true. Se a recuperação falhar, a função retorna false sem modificar a variável referenciada.

Abaixo está a implementação completa da função LastCanceledPendingOrderTypeFilling() .

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


Função do Tipo de Tempo da Última Ordem Pendente Cancelada

A função LastCanceledPendingOrderTypeTime() extrai o tipo de tempo da ordem pendente cancelada mais recente e atualiza a variável referenciada lastCanceledPendingOrderTypeTime com esse valor. Ela utiliza a função GetLastCanceledPendingOrderData() para recuperar os detalhes necessários da ordem.

O tipo de tempo de uma ordem indica por quanto tempo a ordem permanece válida. Existem vários tipos de tempo associados às ordens: Good Till Cancel (GTC), onde a ordem permanece ativa até ser cancelada manualmente; Good Till Current Trade Day, onde a ordem expira ao final do dia de negociação; Good Till Expired, onde a ordem expira após uma data ou horário específico; e Good Till Specified Day, onde a ordem é válida até 23:59:59 do dia especificado, com a condição adicional de que, se o horário cair fora de uma sessão de negociação, a ordem expira no horário de negociação mais próximo.

Se a recuperação for bem-sucedida, a função atribui o tipo de tempo à variável referenciada e retorna true. Se a recuperação falhar, ela deixa a variável inalterada e retorna false.

Aqui está a implementação completa da função LastCanceledPendingOrderTypeTime().

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


Função do Comentário da Última Ordem Pendente Cancelada

A função LastCanceledPendingOrderComment() obtém o comentário associado à ordem pendente cancelada mais recente e o coloca na variável referenciada lastCanceledPendingOrderComment. Ela utiliza a função GetLastCanceledPendingOrderData() para buscar as informações necessárias da ordem.

Se os dados da ordem forem obtidos com sucesso, o comentário é atribuído à variável referenciada, e a função retorna true. Se a operação falhar, a variável referenciada permanece inalterada, e a função retorna false.

Abaixo está a implementação completa da função LastCanceledPendingOrderComment().
bool LastCanceledPendingOrderComment(string &lastCanceledPendingOrderComment) export
  {
   PendingOrderData lastCanceledPendingOrderInfo;
   if(GetLastCanceledPendingOrderData(lastCanceledPendingOrderInfo))
     {
      lastCanceledPendingOrderComment = lastCanceledPendingOrderInfo.comment;
      return(true);
     }
   return(false);
  }


Conclusão

Agora desenvolvemos uma biblioteca abrangente de gerenciamento de histórico que é capaz de consultar, recuperar, categorizar e armazenar o histórico de negociações de ordens pendentes preenchidas e canceladas, bem como negociações e posições. Isso marca um marco significativo na simplificação do gerenciamento de dados históricos de negociação em MQL5, equipando os desenvolvedores com um conjunto de ferramentas versátil e eficiente para lidar com requisitos de dados complexos.

O que diferencia esta biblioteca é sua estrutura robusta e organizada para o gerenciamento de dados de negociação. Ao fornecer funções estruturadas e intuitivas, ela transforma a tarefa frequentemente trabalhosa de lidar com o histórico de negociações em um processo contínuo. Essa abordagem melhora a acessibilidade a dados críticos e também garante que eles possam ser aplicados de forma eficaz em diversos cenários do mundo real, como a criação de ferramentas de análise de desempenho, a otimização de estratégias de negociação ou a realização de análises históricas aprofundadas.

O próximo passo desta série envolverá a criação dos arquivos de cabeçalho necessários que permitirão aos usuários finais importar e integrar a biblioteca de forma integrada em seus projetos. Assim que os cabeçalhos estiverem concluídos, demonstrarei como implementar a biblioteca, garantindo que os desenvolvedores possam incorporar facilmente sua funcionalidade à sua base de código.

Para sua conveniência, o código-fonte atualizado da biblioteca HistoryManager.mq5, que inclui todas as funções criadas neste e nos artigos anteriores, além do arquivo binário executável EX5 compilado HistoryManager.ex5, está anexado ao final deste artigo. No próximo artigo, concluiremos a biblioteca de gerenciamento de histórico fornecendo documentação completa de implementação e exemplos práticos para orientá-lo no uso eficaz desta biblioteca EX5. Obrigado por acompanhar, espero me conectar com você novamente enquanto levamos este projeto à sua etapa final.

Traduzido do Inglês pela MetaQuotes Ltd.
Artigo original: https://www.mql5.com/en/articles/16906

Arquivos anexados |
HistoryManager.mq5 (81.42 KB)
HistoryManager.ex5 (33.63 KB)
Redes neurais em trading: Previsão de séries temporais com o auxílio da decomposição modal adaptativa (ACEFormer) Redes neurais em trading: Previsão de séries temporais com o auxílio da decomposição modal adaptativa (ACEFormer)
Propomos conhecer a arquitetura ACEFormer, uma solução moderna que combina a eficiência da atenção probabilística com a decomposição adaptativa de séries temporais. O material será útil para quem busca um equilíbrio entre desempenho computacional e precisão de previsão nos mercados financeiros.
Implementação do mecanismo de breakeven em MQL5 (Parte 1): Classe base e modo de breakeven por pontos fixos Implementação do mecanismo de breakeven em MQL5 (Parte 1): Classe base e modo de breakeven por pontos fixos
Neste artigo, analisamos a aplicação do mecanismo de breakeven (ponto de equilíbrio) em estratégias automatizadas na linguagem MQL5. Começaremos com uma explicação simples do que é o modo de breakeven, como ele é implementado e quais são suas possíveis variações. Em seguida, essa funcionalidade será integrada ao EA Order Blocks, criado por nós no último artigo sobre gerenciamento de riscos. Para avaliar a eficácia, faremos dois backtests sob determinadas condições: um com a aplicação do mecanismo de breakeven e outro, sem.
Desenvolvimento do Kit de Ferramentas de Análise de Price Action (Parte 9): Fluxo Externo Desenvolvimento do Kit de Ferramentas de Análise de Price Action (Parte 9): Fluxo Externo
Este artigo explora uma nova dimensão de análise utilizando bibliotecas externas especificamente projetadas para análises avançadas. Essas bibliotecas, como o pandas, fornecem ferramentas poderosas para processar e interpretar dados complexos, permitindo que os traders obtenham percepções mais profundas sobre a dinâmica do mercado. Ao integrar essas tecnologias, podemos reduzir a lacuna entre dados brutos e estratégias acionáveis. Junte-se a nós enquanto estabelecemos as bases dessa abordagem inovadora e desbloqueamos o potencial de combinar tecnologia com expertise em trading.
Simulação de mercado: A união faz a força (III) Simulação de mercado: A união faz a força (III)
Neste artigo, apresentarei o nosso sistema de simulação de operações a mercado. Apesar deste sistema está praticamente terminado. Ainda existem algumas coisas a serem feitas e implementadas. Além de algumas poucas mudanças que ainda precisam ser feitas. Mas mesmo com tudo que já foi implementado. Confesso que já estou cansado de ficar preso na implementação deste sistema.