MQL5 Trading Toolkit (Parte 7): Expandindo a Biblioteca EX5 de Gerenciamento de Histórico com as Funções da Última Ordem Pendente Cancelada
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
- Obter os Dados da Última Ordem Pendente Cancelada
- Obter o Tipo da Última Ordem Pendente Cancelada
- Obter o Símbolo da Última Ordem Pendente Cancelada
- Obter o Ticket da Última Ordem Pendente Cancelada
- Obter o Preço de Abertura da Última Ordem Pendente Cancelada
- Obter o Preço de Stop Loss da Última Ordem Pendente Cancelada
- Obter o Preço de Take Profit da Última Ordem Pendente Cancelada
- Obter o Stop Loss em Pips da Última Ordem Pendente Cancelada
- Obter o Take Profit em Pips da Última Ordem Pendente Cancelada
- Obter o Horário de Configuração da Última Ordem Pendente Cancelada
- Obter o Horário de Conclusão da Última Ordem Pendente Cancelada
- Obter o Horário de Expiração da Última Ordem Pendente Cancelada
- Obter o ID da Posição da Última Ordem Pendente Cancelada
- Obter o Magic da Última Ordem Pendente Cancelada
- Obter o Motivo da Última Ordem Pendente Cancelada
- Obter o Tipo de Preenchimento da Última Ordem Pendente Cancelada
- Obter o Tipo de Tempo da Última Ordem Pendente Cancelada
- Obter o Comentário da Última Ordem Pendente Cancelada
- 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
Aviso: Todos os direitos sobre esses materiais pertencem à MetaQuotes Ltd. É proibida a reimpressão total ou parcial.
Esse artigo foi escrito por um usuário do site e reflete seu ponto de vista pessoal. A MetaQuotes Ltd. não se responsabiliza pela precisão das informações apresentadas nem pelas possíveis consequências decorrentes do uso das soluções, estratégias ou recomendações descritas.
Redes neurais em trading: Previsão de séries temporais com o auxílio da decomposição modal adaptativa (ACEFormer)
Implementação do mecanismo de breakeven em MQL5 (Parte 1): Classe base e modo de breakeven por pontos fixos
Simulação de mercado: A união faz a força (III)
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Você concorda com a política do site e com os termos de uso