English Русский 中文 Español Deutsch 日本語
preview
MQL5 Trading Toolkit (Parte 5): Expansão da biblioteca EX5 para gerenciamento do histórico com funções do último ordem pendente executada

MQL5 Trading Toolkit (Parte 5): Expansão da biblioteca EX5 para gerenciamento do histórico com funções do último ordem pendente executada

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

Introdução

O acesso às informações sobre a última ordem pendente executada é especialmente valioso em cenários nos quais a lógica de trading depende do tipo da última ordem pendente executada. Por exemplo, você pode usar esses dados para refinar suas estratégias de negociação com base em se a última ordem executada foi Buy Limit, Sell Stop, Buy Stop, Sell Limit, Buy Stop Limit ou Sell Stop Limit. Entender o tipo de ordem pode fornecer uma visão sobre as condições de mercado e ajudar a ajustar sua abordagem, como modificar os pontos de entrada ou saída.

Essas informações também são fundamentais para coletar e analisar dados históricos de negociação com o objetivo de otimizar seus sistemas de trading ou reunir dados sobre a velocidade com que sua corretora executa ordens pendentes no momento em que são acionadas. Ao estudar detalhes como slippage, o tempo decorrido desde o envio da ordem até sua execução e as condições sob as quais ela foi executada, é possível identificar padrões e áreas de melhoria na sua estratégia. Além disso, esses dados permitem monitorar a qualidade da execução, garantindo que as ordens sejam processadas conforme o esperado e ajudando a eliminar possíveis ineficiências nas operações. Essa análise detalhada pode aprimorar o processo de tomada de decisão e, com o tempo, levar à criação de estratégias de trading mais eficazes e robustas.

A biblioteca EX5 de gerenciamento de histórico (History Management) simplifica o processo de obtenção de dados e propriedades da última ordem pendente executada. Chamando apenas uma função, é possível acessar essas informações sem precisar especificar manualmente o período de busca no histórico de operações, pois a biblioteca EX5 cuidará disso automaticamente. Tudo o que você precisa fazer é fornecer à função de consulta de histórico uma variável de entrada para armazenar a propriedade específica da ordem pendente. Em seguida, a função salvará os dados extraídos na variável indicada.

Se a função extrai com sucesso os dados solicitados, ela retorna true, informando que a execução foi bem-sucedida. Se os dados especificados da ordem pendente não estiverem disponíveis, o valor retornado será false. Essa abordagem otimizada elimina complexidades desnecessárias, permitindo que você se concentre na análise ou integração dos dados obtidos em suas estratégias de negociação, garantindo tanto eficiência quanto precisão em suas operações.

Para começar, abra o arquivo HistoryManager.mq5 da parte anterior, onde criamos as funções de busca do histórico de posições, e inicie criando a função GetLastFilledPendingOrderData(). Certifique-se de ter carregado o arquivo-fonte HistoryManager.mq5, anexado à parte anterior do artigo. Continuaremos adicionando o novo código logo abaixo da função LastClosedPositionDuration(), onde paramos anteriormente.


Função de obtenção dos dados da última ordem pendente executada

A função GetLastFilledPendingOrderData() é responsável por extrair as propriedades da última ordem pendente executada a partir do histórico de negociação disponível. Ela verifica sistematicamente os dados históricos em busca de ordens pendentes executadas e, caso uma seja encontrada, armazena as informações correspondentes na variável especificada getLastFilledPendingOrderData.

A função trabalha em conjunto com FetchHistoryByCriteria() para extrair o histórico de negociação necessário. Ela garante que apenas ordens pendentes executadas sejam consideradas e atualiza a estrutura fornecida com os dados da última ordem pendente executada.

Comecemos definindo a assinatura da função GetLastFilledPendingOrderData(). Como essa função é marcada com o modificador export, ela fica disponível para qualquer arquivo-fonte MQL5 que importe a biblioteca compilada. A função faz referência à variável getLastFilledPendingOrderData, na qual serão armazenados os dados extraídos.

bool GetLastFilledPendingOrderData(PendingOrderData &getLastFilledPendingOrderData) export
  {
//-- Function logic will be implemented here
  }

Em seguida, usaremos a função FetchHistoryByCriteria() e passaremos a constante GET_PENDING_ORDERS_HISTORY_DATA como parâmetro, garantindo que tenhamos à disposição os dados históricos necessários das ordens pendentes. Caso os dados não sejam encontrados, exibiremos uma mensagem e retornaremos false.

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

Se conseguirmos obter os dados, prosseguiremos com a busca pela última ordem pendente executada. Obtemos o número total de ordens pendentes a partir da função GetTotalDataInfoSize() e percorremos o array pendingOrderInfo para localizar a ordem executada. Quando a ordem é encontrada, seus dados são atribuídos à estrutura getLastFilledPendingOrderData. Por fim, a função retorna true se uma ordem pendente executada for encontrada e seus dados forem salvos. Caso contrário, a função é encerrada retornando 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);

Aqui está a implementação completa da função GetLastFilledPendingOrderData() com todos os segmentos de código dispostos na sequência correta.

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


Função de tipo da última ordem pendente executada

A função LastFilledPendingOrderType() é responsável por determinar o tipo da última ordem pendente executada. Ela armazena esse tipo na variável especificada lastFilledPendingOrderType. Essa funcionalidade é extremamente importante para aplicações que precisam analisar os tipos de execução de ordens ou monitorar a eficiência de determinadas categorias de ordens.

Comecemos definindo a assinatura da função. Como essa função é marcada como export, ela estará disponível para uso em qualquer arquivo-fonte MQL5 que importe a biblioteca EX5. A função recebe a variável referenciada lastFilledPendingOrderType como parâmetro de entrada, onde será armazenado o tipo da última ordem pendente executada.

bool LastFilledPendingOrderType(ENUM_ORDER_TYPE &lastFilledPendingOrderType) export
  {
//-- Function logic will be implemented here
  }

Primeiro, declaramos uma variável do tipo PendingOrderData chamada lastFilledPendingOrderInfo. Essa variável servirá como armazenamento temporário das informações da última ordem pendente executada.

PendingOrderData lastFilledPendingOrderInfo;

Em seguida, utilizamos a função GetLastFilledPendingOrderData() para obter as informações da última ordem pendente executada. Se a operação for bem-sucedida, extraímos o campo type da estrutura lastFilledPendingOrderInfo, armazenamos esse valor na variável especificada lastFilledPendingOrderType e retornamos true. Caso a extração não seja bem-sucedida, não atualizamos a variável especificada e retornamos false, indicando que os dados não foram encontrados.

if(GetLastFilledPendingOrderData(lastFilledPendingOrderInfo))
  {
   lastFilledPendingOrderType = lastFilledPendingOrderInfo.type;
   return(true);
  }
return(false);

Implementação completa da função LastFilledPendingOrderType().

bool LastFilledPendingOrderType(ENUM_ORDER_TYPE &lastFilledPendingOrderType) export
  {
   PendingOrderData lastFilledPendingOrderInfo;
   if(GetLastFilledPendingOrderData(lastFilledPendingOrderInfo))
     {
      lastFilledPendingOrderType = lastFilledPendingOrderInfo.type;
      return(true);
     }
   return(false);
  }


Função de símbolo da última ordem pendente executada

A função LastFilledPendingOrderSymbol() extrai o símbolo da última ordem pendente executada e o armazena na variável especificada lastFilledPendingOrderSymbol. Ela recebe essa variável como parâmetro lastFilledPendingOrderSymbol de entrada para guardar o símbolo.

Primeiro, declaramos a variável do tipo PendingOrderData chamada lastFilledPendingOrderInfo para armazenar temporariamente os dados da última ordem pendente executada. Em seguida, usamos a função GetLastFilledPendingOrderData() para obter as informações da ordem. Em caso de sucesso, extraímos o símbolo de lastFilledPendingOrderInfo, armazenamos em lastFilledPendingOrderSymbol e retornamos true. Se a extração falhar, retornamos false sem atualizar a variável especificada.

Implementação da função LastFilledPendingOrderSymbol() no código.

bool LastFilledPendingOrderSymbol(string &lastFilledPendingOrderSymbol) export
  {
   PendingOrderData lastFilledPendingOrderInfo;
   if(GetLastFilledPendingOrderData(lastFilledPendingOrderInfo))
     {
      lastFilledPendingOrderSymbol = lastFilledPendingOrderInfo.symbol;
      return(true);
     }
   return(false);
  }


Função de ticket da última ordem pendente executada

A função LastFilledPendingOrderTicket() extrai o número do ticket da última ordem pendente executada e o armazena na variável especificada lastFilledPendingOrderTicket. Ela recebe a variável lastFilledPendingOrderTicket como parâmetro de entrada, na qual será armazenado o número do ticket.

Começamos declarando a variável do tipo PendingOrderData chamada lastFilledPendingOrderInfo, que serve como contêiner temporário para as informações da última ordem pendente executada. Em seguida, chamamos a função GetLastFilledPendingOrderData() para extrair as informações da ordem. Após a extração bem-sucedida, obtemos o ticket de lastFilledPendingOrderInfo, armazenamos na variável lastFilledPendingOrderTicket e indicamos a execução bem-sucedida retornando true. Se a extração não for bem-sucedida, a função retorna false, mantendo a variável especificada inalterada.

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

bool LastFilledPendingOrderTicket(ulong &lastFilledPendingOrderTicket) export
  {
   PendingOrderData lastFilledPendingOrderInfo;
   if(GetLastFilledPendingOrderData(lastFilledPendingOrderInfo))
     {
      lastFilledPendingOrderTicket = lastFilledPendingOrderInfo.ticket;
      return(true);
     }
   return(false);
  }


Função de preço de abertura da última ordem pendente executada

A função LastFilledPendingOrderPriceOpen() extrai o preço de abertura da última ordem pendente executada e o armazena na variável especificada lastFilledPendingOrderPriceOpen. Ela recebe a variável lastFilledPendingOrderPriceOpen como parâmetro de entrada para armazenar o preço de abertura.

Primeiro, declaramos a variável do tipo PendingOrderData chamada lastFilledPendingOrderInfo para armazenar temporariamente os dados da última ordem pendente executada. Em seguida, usamos a função GetLastFilledPendingOrderData() para obter as informações da ordem. Em caso de sucesso, extraímos o priceOpen de lastFilledPendingOrderInfo, armazenamos em lastFilledPendingOrderPriceOpen e retornamos true. Se a busca não for bem-sucedida, retornamos false sem atualizar a variável especificada.

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

bool LastFilledPendingOrderPriceOpen(double &lastFilledPendingOrderPriceOpen) export
  {
   PendingOrderData lastFilledPendingOrderInfo;
   if(GetLastFilledPendingOrderData(lastFilledPendingOrderInfo))
     {
      lastFilledPendingOrderPriceOpen = lastFilledPendingOrderInfo.priceOpen;
      return(true);
     }
   return(false);
  }


Função de preço de stop loss da última ordem pendente executada

A função LastFilledPendingOrderSlPrice() extrai o preço de stop loss da última ordem pendente executada e o armazena na variável especificada lastFilledPendingOrderSlPrice. Ela recebe a variável lastFilledPendingOrderSlPrice como parâmetro de entrada para armazenar o preço de stop loss extraído. Essa função é particularmente útil em cenários em que é necessário monitorar ou analisar os níveis de stop loss de ordens pendentes recentemente executadas.

Começamos declarando a variável PendingOrderData chamada lastFilledPendingOrderInfo para armazenar temporariamente os dados da última ordem pendente executada. Em seguida, utilizamos a função GetLastFilledPendingOrderData() para extrair os detalhes da ordem.

Se a extração dos dados for bem-sucedida, o campo slPrice de lastFilledPendingOrderInfo é obtido e armazenado na variável lastFilledPendingOrderSlPrice. A função então retorna true para indicar que a operação foi concluída com sucesso. Se a extração não for bem-sucedida, a função é encerrada sem atualizar a variável especificada e retorna false para sinalizar que os dados não foram encontrados.

Implementação completa da função LastFilledPendingOrderSlPrice():

bool LastFilledPendingOrderSlPrice(double &lastFilledPendingOrderSlPrice) export
  {
   PendingOrderData lastFilledPendingOrderInfo;
   if(GetLastFilledPendingOrderData(lastFilledPendingOrderInfo))
     {
      lastFilledPendingOrderSlPrice = lastFilledPendingOrderInfo.slPrice;
      return(true);
     }
   return(false);
  }


Função de preço de take profit da última ordem pendente executada

A função LastFilledPendingOrderTpPrice() extrai o preço de take profit da última ordem pendente executada e o armazena na variável especificada lastFilledPendingOrderTpPrice. Essa função é essencial para aplicações que analisam ou controlam os níveis de take profit de ordens pendentes executadas. Ela recebe a variável lastFilledPendingOrderTpPrice como entrada para armazenar o preço de take profit.

Primeiro, declaramos a variável PendingOrderData chamada lastFilledPendingOrderInfo para armazenar temporariamente os dados da última ordem pendente executada. Em seguida, usamos a função GetLastFilledPendingOrderData() para extrair as informações da ordem. Em caso de sucesso, extraímos o tpPrice de lastFilledPendingOrderInfo, armazenamos na variável lastFilledPendingOrderTpPrice e retornamos true. Se a busca não for bem-sucedida, retornamos false sem atualizar a variável especificada.

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

bool LastFilledPendingOrderTpPrice(double &lastFilledPendingOrderTpPrice) export
  {
   PendingOrderData lastFilledPendingOrderInfo;
   if(GetLastFilledPendingOrderData(lastFilledPendingOrderInfo))
     {
      lastFilledPendingOrderTpPrice = lastFilledPendingOrderInfo.tpPrice;
      return(true);
     }
   return(false);
  }


Função de pips de stop loss da última ordem pendente executada

A função LastFilledPendingOrderSlPips() extrai o valor em pips do stop loss da última ordem pendente executada e o armazena na variável especificada lastFilledPendingOrderSlPips. Essa função é fundamental para a análise dos parâmetros de risco associados às ordens pendentes executadas.

Primeiro, declaramos a variável PendingOrderData chamada lastFilledPendingOrderInfo. Essa variável servirá como armazenamento temporário dos dados da última ordem pendente executada. Em seguida, usamos a função GetLastFilledPendingOrderData() para obter os dados da ordem. Se tudo ocorrer com sucesso, extraímos o campo slPips da estrutura lastFilledPendingOrderInfo e o armazenamos na variável especificada lastFilledPendingOrderSlPips. A função então retorna true para indicar sucesso. Se a extração não for bem-sucedida, a função é encerrada sem atualizar a variável especificada e retorna false para sinalizar que os dados não foram encontrados.

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

bool LastFilledPendingOrderSlPips(int &lastFilledPendingOrderSlPips) export
  {
   PendingOrderData lastFilledPendingOrderInfo;
   if(GetLastFilledPendingOrderData(lastFilledPendingOrderInfo))
     {
      lastFilledPendingOrderSlPips = lastFilledPendingOrderInfo.slPips;
      return(true);
     }
   return(false);
  }


Função de pips de take profit da última ordem pendente executada

A função LastFilledPendingOrderTpPips() extrai o valor em pips do take profit da última ordem pendente executada e o armazena na variável especificada lastFilledPendingOrderTpPips. Esse recurso é útil para monitorar os níveis de take profit das ordens pendentes executadas e pode ser empregado para análise de desempenho ou ajustes de estratégia.

Primeiro, declaramos a variável PendingOrderData chamada lastFilledPendingOrderInfo. Essa variável é usada para armazenar temporariamente os dados da última ordem pendente executada. Em seguida, chamamos a função GetLastFilledPendingOrderData() para obter as informações da ordem. Se a busca for bem-sucedida, o valor de tpPips é extraído de lastFilledPendingOrderInfo e armazenado na variável lastFilledPendingOrderTpPips. A função então retorna true. Caso a extração não seja bem-sucedida, a variável especificada permanece inalterada e a função retorna false, indicando falha.

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

bool LastFilledPendingOrderTpPips(int &lastFilledPendingOrderTpPips) export
  {
   PendingOrderData lastFilledPendingOrderInfo;
   if(GetLastFilledPendingOrderData(lastFilledPendingOrderInfo))
     {
      lastFilledPendingOrderTpPips = lastFilledPendingOrderInfo.tpPips;
      return(true);
     }
   return(false);
  }


Função de tempo de colocação da última ordem pendente executada

A função LastFilledPendingOrderTimeSetup() extrai o horário de colocação da última ordem pendente executada. Ela armazena esse horário na variável especificada lastFilledPendingOrderTimeSetup. Essa função é essencial para rastrear o momento em que determinadas ordens pendentes foram iniciadas, permitindo a análise temporal da atividade das ordens.

A função LastFilledPendingOrderTimeSetup() recebe a variável especificada lastFilledPendingOrderTimeSetup como parâmetro de entrada. Após a execução, essa variável conterá o horário de colocação da última ordem pendente executada. Para isso, a função começa declarando a variável PendingOrderData chamada lastFilledPendingOrderInfo. Essa variável é utilizada para armazenar temporariamente as informações da última ordem pendente executada.

Em seguida, a função GetLastFilledPendingOrderData() é chamada para extrair as informações sobre a última ordem pendente executada. Se a extração for bem-sucedida, o campo timeSetup da estrutura lastFilledPendingOrderInfo é obtido e armazenado na variável lastFilledPendingOrderTimeSetup. A função então retorna true para indicar que a operação foi concluída com sucesso. Caso a extração não seja bem-sucedida, a função retorna false sem atualizar a variável especificada.

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

bool LastFilledPendingOrderTimeSetup(datetime &lastFilledPendingOrderTimeSetup) export
  {
   PendingOrderData lastFilledPendingOrderInfo;
   if(GetLastFilledPendingOrderData(lastFilledPendingOrderInfo))
     {
      lastFilledPendingOrderTimeSetup = lastFilledPendingOrderInfo.timeSetup;
      return(true);
     }
   return(false);
  }


Função de tempo de execução da última ordem pendente executada

A função LastFilledPendingOrderTimeDone() extrai o horário de execução da última ordem pendente executada (time done) e o armazena na variável especificada lastFilledPendingOrderTimeDone. Essa função é necessária para rastrear o momento em que as ordens pendentes são executadas, permitindo analisar o tempo de execução ou gerar relatórios detalhados.

A função recebe a variável especificada lastFilledPendingOrderTimeDone como parâmetro de entrada para armazenar o horário de execução. Começamos declarando a variável PendingOrderData chamada lastFilledPendingOrderInfo, que é usada para armazenar temporariamente as informações da última ordem pendente executada.

Em seguida, a função chama GetLastFilledPendingOrderData() para extrair os dados da última ordem pendente executada. Se tudo ocorrer com sucesso, o campo timeDone é extraído da estrutura lastFilledPendingOrderInfo e armazenado na variável especificada lastFilledPendingOrderTimeDone. A função então retorna true para indicar que a operação foi concluída com sucesso.

Se a extração não for bem-sucedida, a função é encerrada sem atualizar a variável especificada e retorna false para indicar que os dados necessários não foram encontrados.

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

bool LastFilledPendingOrderTimeDone(datetime &lastFilledPendingOrderTimeDone) export
  {
   PendingOrderData lastFilledPendingOrderInfo;
   if(GetLastFilledPendingOrderData(lastFilledPendingOrderInfo))
     {
      lastFilledPendingOrderTimeDone = lastFilledPendingOrderInfo.timeDone;
      return(true);
     }
   return(false);
  }


Função de tempo de expiração da última ordem pendente executada

A função LastFilledPendingOrderExpirationTime() extrai o horário de expiração da última ordem pendente executada e o armazena na variável especificada lastFilledPendingOrderExpirationTime. Essa função é útil para o gerenciamento e análise do tempo de validade das ordens pendentes, especialmente quando é necessário monitorar o vencimento dessas ordens.

A função recebe a variável especificada lastFilledPendingOrderExpirationTime como parâmetro de entrada para armazenar o horário de expiração. Começamos declarando a variável PendingOrderData chamada lastFilledPendingOrderInfo, que serve como contêiner temporário para as informações da última ordem pendente executada.

Em seguida, a função chama GetLastFilledPendingOrderData() para extrair os dados da última ordem pendente executada. Se a operação for bem-sucedida, o campo expirationTime é extraído da estrutura lastFilledPendingOrderInfo e armazenado na variável especificada lastFilledPendingOrderExpirationTime. A função retorna true para indicar que os dados foram extraídos com sucesso.

Se a extração não for bem-sucedida, a função mantém a variável especificada inalterada e retorna false para indicar que os dados necessários não foram encontrados.

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

bool LastFilledPendingOrderExpirationTime(datetime &lastFilledPendingOrderExpirationTime) export
  {
   PendingOrderData lastFilledPendingOrderInfo;
   if(GetLastFilledPendingOrderData(lastFilledPendingOrderInfo))
     {
      lastFilledPendingOrderExpirationTime = lastFilledPendingOrderInfo.expirationTime;
      return(true);
     }
   return(false);
  }


Função de identificador de posição da última ordem pendente executada

A função LastFilledPendingOrderPositionId() extrai o identificador de posição da última ordem pendente executada e o armazena na variável especificada lastFilledPendingOrderPositionId. Essa função é particularmente útil para vincular ordens pendentes às suas respectivas posições, permitindo um controle e acompanhamento mais precisos da atividade de negociação.

A função recebe a variável especificada lastFilledPendingOrderPositionId como parâmetro de entrada para armazenar o identificador da posição. Começamos declarando a variável PendingOrderData chamada lastFilledPendingOrderInfo, que serve como contêiner temporário para as informações da última ordem pendente executada.

Em seguida, a função chama GetLastFilledPendingOrderData() para extrair os dados da última ordem pendente executada. Se tudo ocorrer com sucesso, o campo positionId é extraído da estrutura lastFilledPendingOrderInfo e atribuído à variável especificada lastFilledPendingOrderPositionId. A função então retorna true para indicar que a operação foi bem-sucedida.

Se a extração não for bem-sucedida, a função é encerrada sem atualizar a variável especificada e retorna false para indicar falha.

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

bool LastFilledPendingOrderPositionId(ulong &lastFilledPendingOrderPositionId) export
  {
   PendingOrderData lastFilledPendingOrderInfo;
   if(GetLastFilledPendingOrderData(lastFilledPendingOrderInfo))
     {
      lastFilledPendingOrderPositionId = lastFilledPendingOrderInfo.positionId;
      return(true);
     }
   return(false);
  }


Função de mágico da última ordem pendente executada

A função LastFilledPendingOrderMagic() extrai o mágico da última ordem pendente executada e o armazena na variável especificada lastFilledPendingOrderMagic. Essa função é necessária para determinar o identificador único associado a uma ordem específica, especialmente ao gerenciar múltiplas estratégias ou sistemas em uma única conta de trading.

A função recebe a variável especificada lastFilledPendingOrderMagic como parâmetro de entrada para armazenar o mágico. Começamos declarando a variável PendingOrderData chamada lastFilledPendingOrderInfo, que é usada para armazenar temporariamente as informações da última ordem pendente executada.

Em seguida, a função chama GetLastFilledPendingOrderData() para extrair os dados da última ordem pendente executada. Se tudo ocorrer com sucesso, o campo magic é extraído da estrutura lastFilledPendingOrderInfo e atribuído à variável especificada lastFilledPendingOrderMagic. A função então retorna true para indicar que a operação foi bem-sucedida.

Se a extração não for bem-sucedida, a função é encerrada sem atualizar a variável especificada e retorna false para indicar falha.

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

bool LastFilledPendingOrderMagic(ulong &lastFilledPendingOrderMagic) export
  {
   PendingOrderData lastFilledPendingOrderInfo;
   if(GetLastFilledPendingOrderData(lastFilledPendingOrderInfo))
     {
      lastFilledPendingOrderMagic = lastFilledPendingOrderInfo.magic;
      return(true);
     }
   return(false);
  }


Função de motivo da última ordem pendente executada

A função LastFilledPendingOrderReason() extrai o motivo da última ordem pendente executada e o armazena na variável especificada lastFilledPendingOrderReason. Essa função é útil para rastrear o motivo específico da execução da ordem. Ela permite identificar se a ordem foi executada a partir de terminal móvel, terminal web ou aplicativo desktop, se foi ativada por EA, script, stop loss, take profit ou stop out. Essas informações são essenciais para análise e depuração, fornecendo dados sobre como e por que a ordem foi executada.

A função recebe a variável especificada lastFilledPendingOrderReason como parâmetro de entrada para armazenar o motivo. Começamos declarando a variável PendingOrderData chamada lastFilledPendingOrderInfo, que é usada para armazenar temporariamente as informações da última ordem pendente executada.

Em seguida, a função chama GetLastFilledPendingOrderData() para extrair os dados da última ordem pendente executada. Se tudo ocorrer com sucesso, o campo motivo é extraído da estrutura lastFilledPendingOrderInfo e atribuído à variável especificada lastFilledPendingOrderReason. A função então retorna true para indicar que a operação foi bem-sucedida.

Se a extração não for bem-sucedida, a função é encerrada sem atualizar a variável especificada e retorna false para indicar falha.

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

bool LastFilledPendingOrderReason(ENUM_ORDER_REASON &lastFilledPendingOrderReason) export
  {
   PendingOrderData lastFilledPendingOrderInfo;
   if(GetLastFilledPendingOrderData(lastFilledPendingOrderInfo))
     {
      lastFilledPendingOrderReason = lastFilledPendingOrderInfo.reason;
      return(true);
     }
   return(false);
  }


Função de tipo de execução da última ordem pendente executada

A função LastFilledPendingOrderTypeFilling() extrai o tipo de execução da última ordem pendente executada e o armazena na variável especificada lastFilledPendingOrderTypeFilling. Essa função é importante para determinar como a ordem pendente foi executada — Fill or Kill, Immediate or Cancel, Book or Cancel ou Return.

A função recebe a variável especificada lastFilledPendingOrderTypeFilling como parâmetro de entrada para armazenar o tipo de execução. Começamos declarando a variável PendingOrderData chamada lastFilledPendingOrderInfo, que é utilizada para armazenar temporariamente as informações da última ordem pendente executada.

Em seguida, a função chama GetLastFilledPendingOrderData() para extrair os dados da última ordem pendente executada. Se tudo ocorrer com sucesso, o campo typeFilling é extraído da estrutura lastFilledPendingOrderInfo e atribuído à variável especificada lastFilledPendingOrderTypeFilling. A função então retorna true para indicar que a operação foi bem-sucedida.

Se a extração não for bem-sucedida, a função é encerrada sem atualizar a variável especificada e retorna false para indicar falha.

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

bool LastFilledPendingOrderTypeFilling(ENUM_ORDER_TYPE_FILLING &lastFilledPendingOrderTypeFilling) export
  {
   PendingOrderData lastFilledPendingOrderInfo;
   if(GetLastFilledPendingOrderData(lastFilledPendingOrderInfo))
     {
      lastFilledPendingOrderTypeFilling = lastFilledPendingOrderInfo.typeFilling;
      return(true);
     }
   return(false);
  }


Função de tipo de tempo da última ordem pendente executada

A função LastFilledPendingOrderTypeTime() extrai o tipo de tempo da última ordem pendente executada e o armazena na variável especificada lastFilledPendingOrderTypeTime. Essa função ajuda a determinar o período de validade da ordem pendente.

A função recebe a variável especificada como parâmetro de entrada para armazenar o tipo de tempo. Começamos declarando a variável PendingOrderData chamada lastFilledPendingOrderInfo, que é usada para armazenar temporariamente as informações da última ordem pendente executada.

Em seguida, a função chama GetLastFilledPendingOrderData() para extrair os dados da última ordem pendente executada. Se os dados forem extraídos com sucesso, o campo typeTime é obtido da estrutura lastFilledPendingOrderInfo e atribuído à variável especificada lastFilledPendingOrderTypeTime. A função então retorna true para indicar que a operação foi bem-sucedida.

Se a extração não for bem-sucedida, a função é encerrada sem atualizar a variável especificada e retorna false para indicar falha.

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

bool LastFilledPendingOrderTypeTime(datetime &lastFilledPendingOrderTypeTime) export
  {
   PendingOrderData lastFilledPendingOrderInfo;
   if(GetLastFilledPendingOrderData(lastFilledPendingOrderInfo))
     {
      lastFilledPendingOrderTypeTime = lastFilledPendingOrderInfo.typeTime;
      return(true);
     }
   return(false);
  }


Função de comentário da última ordem pendente executada

A função LastFilledPendingOrderComment() extrai o comentário associado à última ordem pendente executada e o armazena na variável lastFilledPendingOrderComment. Essa função é útil para registrar quaisquer observações adicionais que possam ter sido adicionadas à ordem pendente.

A função recebe a variável especificada lastFilledPendingOrderComment como parâmetro de entrada para armazenar o comentário. Começamos declarando a variável PendingOrderData chamada lastFilledPendingOrderInfo, que é utilizada para armazenar temporariamente as informações da última ordem pendente executada.

Em seguida, a função chama GetLastFilledPendingOrderData() para extrair os dados da última ordem pendente executada. Se os dados forem extraídos com sucesso, o campo comment é obtido da estrutura lastFilledPendingOrderInfo e atribuído à variável especificada lastFilledPendingOrderComment. A função então retorna true para indicar que a operação foi bem-sucedida.

Se a extração não for bem-sucedida, a função é encerrada sem atualizar a variável especificada e retorna false para indicar falha.

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

bool LastFilledPendingOrderComment(string &lastFilledPendingOrderComment) export
  {
   PendingOrderData lastFilledPendingOrderInfo;
   if(GetLastFilledPendingOrderData(lastFilledPendingOrderInfo))
     {
      lastFilledPendingOrderComment = lastFilledPendingOrderInfo.comment;
      return(true);
     }
   return(false);
  }


Considerações finais

Desenvolvemos com sucesso funções exportáveis para extração e armazenamento das propriedades da última ordem pendente executada, o que aprimora o desempenho da biblioteca EX5 de gerenciamento de histórico (History Management). Esses novos recursos permitem acesso contínuo a dados críticos sobre ordens pendentes executadas, possibilitando uma análise de negociação mais simples e eficiente e a otimização de estratégias, além de reforçar a capacidade da biblioteca em lidar com operações importantes relacionadas ao histórico de ordens pendentes.

No próximo artigo, ampliaremos a biblioteca adicionando funções para extrair e armazenar as propriedades da última ordem pendente cancelada. Essa expansão aumentará as possibilidades da biblioteca no gerenciamento e análise do histórico de negociações, oferecendo ferramentas ainda mais valiosas para o seu conjunto de recursos de trading.

O código-fonte atualizado do arquivo HistoryManager.mq5, contendo todas as funções disponíveis até o momento, pode ser baixado abaixo. Agradecemos sua atenção! Até o próximo artigo!

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

Arquivos anexados |
Desenvolvimento de ferramentas para análise do movimento de preços (Parte 7): Expert Advisor Signal Pulse Desenvolvimento de ferramentas para análise do movimento de preços (Parte 7): Expert Advisor Signal Pulse
Libere o potencial da análise multitimeframe com o Signal Pulse, um EA em MQL5 que combina as Bandas de Bollinger e o Oscilador Estocástico para fornecer sinais de negociação precisos com alta probabilidade de ocorrência. Descubra como implementar essa estratégia e visualizar de forma eficiente oportunidades de compra e venda usando setas. O EA é ideal para traders que buscam aprimorar suas decisões por meio de análise automática em vários timeframes.
Recursos do Assistente MQL5 que você precisa conhecer (Parte 52): Oscilador Accelerator Recursos do Assistente MQL5 que você precisa conhecer (Parte 52): Oscilador Accelerator
O Oscilador de Aceleração (Accelerator Oscillator) é mais um dos indicadores de Bill Williams, que monitora a aceleração do impulso de preço, e não apenas sua velocidade. Embora seja em muitos aspectos semelhante ao oscilador Awesome, que analisamos em um artigo recente, ele busca evitar os efeitos de defasagem, concentrando-se na aceleração e não apenas na taxa de variação. Como de costume, vamos examinar os padrões do indicador e também seu significado no trading com o uso de um EA criado no Assistente.
Modelos ocultos de Markov para previsão de volatilidade com consideração de tendência Modelos ocultos de Markov para previsão de volatilidade com consideração de tendência
Os modelos ocultos de Markov (HMM) são uma poderosa ferramenta estatística que permite identificar estados ocultos do mercado com base na análise de movimentos observáveis dos preços. No trading, os HMM permitem melhorar a previsão da volatilidade e são aplicados no desenvolvimento de estratégias de tendência, modelando as mudanças nos regimes de mercado. Neste artigo, apresentaremos um processo passo a passo para o desenvolvimento de uma estratégia de seguimento de tendência que utiliza HMM como filtro para previsão de volatilidade.
Dominando registros de log (Parte 2): Formatação dos logs Dominando registros de log (Parte 2): Formatação dos logs
Neste artigo, estudaremos a criação e aplicação de programas de formatação para bibliotecas de logs. Examinaremos todas as etapas, desde a estrutura básica de um programa de formatação até exemplos práticos de implementação. Ao final do artigo, você terá todo o conhecimento necessário para realizar a formatação de logs dentro de uma biblioteca e entenderá como tudo funciona nos bastidores.